X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fpostgresql-rename-table-and-field.t;h=830fba9d05186f35dbe13e11916bad9435b2e9f8;hb=c0ec0e22d3f0e3852c00daac5ef5763010b410c3;hp=48a81b1dff04cd47dd3186875d4fbbf90591fbb7;hpb=591b4fa98fe80c43ea4420539ca94ac1822b3315;p=dbsrgits%2FSQL-Translator.git diff --git a/t/postgresql-rename-table-and-field.t b/t/postgresql-rename-table-and-field.t index 48a81b1..830fba9 100644 --- a/t/postgresql-rename-table-and-field.t +++ b/t/postgresql-rename-table-and-field.t @@ -4,21 +4,30 @@ use strict; use warnings; use Test::More; +use Test::Exception; use Test::SQL::Translator; use SQL::Translator; use SQL::Translator::Diff; -maybe_plan(10, 'DBD::Pg', 'Test::PostgreSQL'); +maybe_plan(undef, 'DBD::Pg'); -my ( $pgsql, $dbh , $ddl, $ret ); +my ( $pg_tst, $ddl, $ret, $dsn, $user, $pass ); +if ($ENV{DBICTEST_PG_DSN}) { + ($dsn, $user, $pass) = map { $ENV{"DBICTEST_PG_$_"} } qw(DSN USER PASS); +} +else { + no warnings 'once'; + maybe_plan(undef, 'Test::PostgreSQL'); + $pg_tst = Test::PostgreSQL->new + or plan skip_all => "Can't create test database: $Test::PostgreSQL::errstr"; + $dsn = $pg_tst->dsn; +}; -no warnings "once"; -$pgsql = Test::PostgreSQL->new() or plan skip_all => $Test::PostgreSQL::errstr; -$dbh = DBI->connect($pgsql->dsn,'','', { RaiseError => 1 }) or plan skip_all => $DBI::errstr; -use warnings "once"; +my $dbh = DBI->connect($dsn, $user, $pass, { RaiseError => 1, AutoCommit => 1 }); +$dbh->do('SET client_min_messages=warning'); my $source_ddl = <do($source_ddl), "create table" ); -ok( $ret = $dbh->do(q| INSERT INTO foo (bar) VALUES ('buzz') |), "insert data" ); +ok( $ret = $dbh->do(q| INSERT INTO sqlt_test_foo (bar) VALUES ('buzz') |), "insert data" ); cmp_ok( $ret, '==', 1, "one row inserted" ); my $target_ddl = <new( parser => 'SQL::Translator::Parser::PostgreSQL', )->translate(\$target_ddl); -my $table = $target_sqlt->get_table('fluff'); -$table->extra( renamed_from => 'foo' ); +my $table = $target_sqlt->get_table('sqlt_test_fluff'); +$table->extra( renamed_from => 'sqlt_test_foo' ); my $field = $table->get_field('biff'); $field->extra( renamed_from => 'bar' ); @@ -61,11 +70,28 @@ my @diff = SQL::Translator::Diff->new({ foreach my $line (@diff) { $line =~ s/\n//g; next if $line =~ /^--/; - ok( $dbh->do($line), "$line" ); + lives_ok { $dbh->do($line) } "$line"; } -ok ( $ret = $dbh->selectall_arrayref(q(SELECT biff FROM fluff), { Slice => {} }), "query DB for data" ); +ok ( $ret = $dbh->selectall_arrayref(q(SELECT biff FROM sqlt_test_fluff), { Slice => {} }), "query DB for data" ); cmp_ok( scalar(@$ret), '==', 1, "Got 1 row"); cmp_ok( $ret->[0]->{biff}, 'eq', 'buzz', "col biff has value buzz" ); + +# Make sure Test::PostgreSQL can kill Pg +undef $dbh if $pg_tst; + +END { + if ($dbh && !$pg_tst) { + $dbh->do("drop table if exists sqlt_test_$_") foreach qw(foo fluff); + } + elsif( $pg_tst ) { + # do the teardown ourselves, work around RT#108460 + local $?; + $pg_tst->stop; + 1; + } +} + +done_testing;