X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fdeploy_methods%2Fsql_translator.t;h=315858418c41c0b103d49db7e34c5d5358756e8d;hb=297e662fab9ba5a6798db95abbdbca2181373c92;hp=eca08c825c2968063dd9ac2c00113c3faea87305;hpb=0841a74313b0b1f813ba0211a7e665c7fcf93a4b;p=dbsrgits%2FDBIx-Class-DeploymentHandler.git diff --git a/t/deploy_methods/sql_translator.t b/t/deploy_methods/sql_translator.t index eca08c8..3158584 100644 --- a/t/deploy_methods/sql_translator.t +++ b/t/deploy_methods/sql_translator.t @@ -1,47 +1,66 @@ #!perl +use strict; +use warnings; + use Test::More; -use Test::Exception; +use Test::Fatal qw(lives_ok dies_ok); use lib 't/lib'; use DBICDHTest; use aliased 'DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator'; -use File::Spec::Functions; -use File::Path qw(rmtree mkpath); +use Path::Class qw(dir file); +use File::Temp qw(tempfile tempdir); -my $db = 'dbi:SQLite:db.db'; -my @connection = ($db, '', '', { ignore_version => 1 }); -my $sql_dir = 't/sql'; +my $dbh = DBICDHTest::dbh(); +my @connection = (sub { $dbh }, { ignore_version => 1 }); +my $sql_dir = tempdir( CLEANUP => 1 ); +my (undef, $stuffthatran_fn) = tempfile(OPEN => 0); -DBICDHTest::ready; +for (qw(initialize upgrade downgrade deploy)) { + dir($sql_dir, '_common', $_, '_any')->mkpath; + open my $fh, '>', + file($sql_dir, '_common', $_, qw(_any 000-win.pl )); + print {$fh} qq^sub {open my \$fh, ">>", '$stuffthatran_fn'; use Data::Dumper::Concise; print {\$fh} join(",", \@{\$_[1]||[]}) . "\\n"; }^; + close $fh; +} + +for (qw(initialize upgrade downgrade deploy)) { + dir($sql_dir, 'SQLite', $_, '_any')->mkpath; + open my $fh, '>', + file($sql_dir, 'SQLite', $_, qw(_any 000-win2.pl )); + print {$fh} qq^sub {open my \$fh, ">>", '$stuffthatran_fn'; use Data::Dumper::Concise; print {\$fh} join(",", \@{\$_[1]||[]}) . "\\n"; }^; + close $fh; +} VERSION1: { use_ok 'DBICVersion_v1'; my $s = DBICVersion::Schema->connect(@connection); my $dm = Translator->new({ schema => $s, - upgrade_directory => $sql_dir, + script_directory => $sql_dir, databases => ['SQLite'], - sqltargs => { add_drop_table => 0 }, + sql_translator_args => { add_drop_table => 0 }, }); ok( $dm, 'DBIC::DH::DM::SQL::Translator gets instantiated correctly' ); - $dm->prepare_install; - { - my $warned = 0; - local $SIG{__WARN__} = sub{$warned = 1}; - $dm->prepare_install; - ok( $warned, 'prepare_install warns if you run it twice' ); - } - mkpath(catfile(qw( t sql _common schema 1.0 ))); - open my $common, '>', - catfile(qw( t sql _common schema 1.0 002-error.sql )); - print {$common} qq; - close $common; + $dm->prepare_deploy; + + dir($sql_dir, qw(SQLite initialize 1.0 ))->mkpath; + open my $prerun, '>', + file($sql_dir, qw(SQLite initialize 1.0 003-semiautomatic.pl )); + my (undef, $fn) = tempfile(OPEN => 0); + print {$prerun} "sub { open my \$fh, '>', '$fn'}"; + close $prerun; + $dm->initialize({ version => '1.0' }); + + ok -e $fn, 'code got run in preinit'; + + dies_ok {$dm->prepare_deploy} 'prepare_deploy dies if you run it twice' ; ok( - -f catfile(qw( t sql SQLite schema 1.0 001-auto.sql )), + -f file($sql_dir, qw(SQLite deploy 1.0 001-auto.sql )), '1.0 schema gets generated properly' ); @@ -51,17 +70,7 @@ VERSION1: { }) } 'schema not deployed'; - mkpath catfile(qw( t sql _common schema 1.0 )); - open my $common, '>', - catfile(qw( t sql _common schema 1.0 001-auto.sql )); - print {$common} qq; - close $common; - { - my $warned = 0; - local $SIG{__WARN__} = sub{$warned = 1}; - $dm->deploy; - ok( $warned, 'deploy warns on sql errors' ); - } + $dm->deploy; lives_ok { $s->resultset('Foo')->create({ @@ -75,37 +84,49 @@ VERSION2: { my $s = DBICVersion::Schema->connect(@connection); my $dm = Translator->new({ schema => $s, - upgrade_directory => $sql_dir, + script_directory => $sql_dir, databases => ['SQLite'], - sqltargs => { add_drop_table => 0 }, - txn_wrap => 1, + sql_translator_args => { add_drop_table => 0 }, + txn_wrap => 1, }); ok( $dm, 'DBIC::DH::SQL::Translator w/2.0 instantiates correctly'); - $version = $s->schema_version(); - $dm->prepare_install; + my $version = $s->schema_version(); + $dm->prepare_deploy; ok( - -f catfile(qw( t sql SQLite schema 2.0 001-auto.sql )), + -f file($sql_dir, qw(SQLite deploy 2.0 001-auto.sql )), '2.0 schema gets generated properly' ); - mkpath(catfile(qw( t sql SQLite up 1.0-2.0 ))); - $dm->prepare_upgrade(qw(1.0 2.0), [qw(1.0 2.0)]); + dir($sql_dir, qw(SQLite upgrade 1.0-2.0 ))->mkpath; + $dm->prepare_upgrade({ + from_version => '1.0', + to_version => '2.0', + version_set => [qw(1.0 2.0)] + }); { my $warned = 0; local $SIG{__WARN__} = sub{$warned = 1}; - $dm->prepare_upgrade(qw(0.0 1.0), [qw(0.0 1.0)]); + $dm->prepare_upgrade({ + from_version => '0.0', + to_version => '1.0', + version_set => [qw(0.0 1.0)] + }); ok( $warned, 'prepare_upgrade with a bogus preversion warns' ); } ok( - -f catfile(qw( t sql SQLite up 1.0-2.0 001-auto.sql )), + -f file($sql_dir, qw(SQLite upgrade 1.0-2.0 001-auto.sql )), '1.0-2.0 diff gets generated properly and default start and end versions get set' ); - mkpath(catfile(qw( t sql SQLite down 2.0-1.0 ))); - $dm->prepare_downgrade($version, '1.0', [$version, '1.0']); + dir($sql_dir, qw(SQLite downgrade 2.0-1.0 ))->mkpath; + $dm->prepare_downgrade({ + from_version => $version, + to_version => '1.0', + version_set => [$version, '1.0'] + }); ok( - -f catfile(qw( t sql SQLite down 2.0-1.0 001-auto.sql )), + -f file($sql_dir, qw(SQLite downgrade 2.0-1.0 001-auto.sql )), '2.0-1.0 diff gets generated properly' ); dies_ok { @@ -121,26 +142,26 @@ VERSION2: { }) } 'schema not uppgrayyed'; - mkpath catfile(qw( t sql _common up 1.0-2.0 )); + dir($sql_dir, qw(_common upgrade 1.0-2.0 ))->mkpath; open my $common, '>', - catfile(qw( t sql _common up 1.0-2.0 002-semiautomatic.sql )); + file($sql_dir, qw(_common upgrade 1.0-2.0 002-semiautomatic.sql )); print {$common} qq; close $common; open my $common_pl, '>', - catfile(qw( t sql _common up 1.0-2.0 003-semiautomatic.pl )); + file($sql_dir, qw(_common upgrade 1.0-2.0 003-semiautomatic.pl )); print {$common_pl} q| - sub run { - my $schema = shift; - $schema->resultset('Foo')->create({ - bar => 'goodbye', - baz => 'blue skies', - }) - } - |; + sub { + my $schema = shift; + $schema->resultset('Foo')->create({ + bar => 'goodbye', + baz => 'blue skies', + }) + } + |; close $common_pl; - $dm->upgrade_single_step([qw( 1.0 2.0 )]); + $dm->upgrade_single_step({ version_set => [qw( 1.0 2.0 )] }); is( $s->resultset('Foo')->search({ bar => 'hello', baz => 'world', @@ -155,14 +176,14 @@ VERSION2: { baz => 'frew', }) } 'schema is deployed'; - $dm->downgrade_single_step([qw( 2.0 1.0 )]); + $dm->downgrade_single_step({ version_set => [qw( 2.0 1.0 )] }); dies_ok { $s->resultset('Foo')->create({ bar => 'frew', baz => 'frew', }) - } 'schema is downpgrayyed'; - $dm->upgrade_single_step([qw( 1.0 2.0 )]); + } 'schema is downgrayyed'; + $dm->upgrade_single_step({ version_set => [qw( 1.0 2.0 )] }); } VERSION3: { @@ -170,45 +191,55 @@ VERSION3: { my $s = DBICVersion::Schema->connect(@connection); my $dm = Translator->new({ schema => $s, - upgrade_directory => $sql_dir, + script_directory => $sql_dir, databases => ['SQLite'], - sqltargs => { add_drop_table => 0 }, + sql_translator_args => { add_drop_table => 0 }, txn_wrap => 0, }); ok( $dm, 'DBIC::DH::SQL::Translator w/3.0 instantiates correctly'); - $version = $s->schema_version(); - $dm->prepare_install; + my $version = $s->schema_version(); + $dm->prepare_deploy; ok( - -f catfile(qw( t sql SQLite schema 3.0 001-auto.sql )), + -f file($sql_dir, qw(SQLite deploy 3.0 001-auto.sql )), '2.0 schema gets generated properly' ); - $dm->prepare_downgrade($version, '1.0', [$version, '1.0']); + $dm->prepare_downgrade({ + from_version => $version, + to_version => '1.0', + version_set => [$version, '1.0'] + }); ok( - -f catfile(qw( t sql SQLite down 3.0-1.0 001-auto.sql )), + -f file($sql_dir, qw(SQLite downgrade 3.0-1.0 001-auto.sql )), '3.0-1.0 diff gets generated properly' ); - $dm->prepare_upgrade( '1.0', $version, ['1.0', $version] ); + $dm->prepare_upgrade({ + from_version => '1.0', + to_version => $version, + version_set => ['1.0', $version] + }); ok( - -f catfile(qw( t sql SQLite up 1.0-3.0 001-auto.sql )), + -f file($sql_dir, qw(SQLite upgrade 1.0-3.0 001-auto.sql )), '1.0-3.0 diff gets generated properly' ); - $dm->prepare_upgrade( '2.0', $version, ['2.0', $version]); - { - my $warned = 0; - local $SIG{__WARN__} = sub{$warned = 1}; - $dm->prepare_upgrade( '2.0', $version, ['2.0', $version] ); - ok( $warned, 'prepare_upgrade warns if you clobber an existing upgrade file' ); - } + $dm->prepare_upgrade({ + from_version => '2.0', + to_version => $version, + version_set => ['2.0', $version] + }); + dies_ok { + $dm->prepare_upgrade({ + from_version => '2.0', + to_version => $version, + version_set => ['2.0', $version] + }); + } + 'prepare_upgrade dies if you clobber an existing upgrade file' ; ok( - -f catfile(qw( t sql SQLite up 1.0-2.0 001-auto.sql )), + -f file($sql_dir, qw(SQLite upgrade 1.0-2.0 001-auto.sql )), '2.0-3.0 diff gets generated properly' ); - mkpath catfile(qw( t sql _generic up 2.0-3.0 )); - rename catfile(qw( t sql SQLite up 2.0-3.0 001-auto.sql )), catfile(qw( t sql _generic up 2.0-3.0 001-auto.sql )); - rmtree(catfile(qw( t sql SQLite ))); - warn 'how can this be' if -d catfile(qw( t sql SQLite )); dies_ok { $s->resultset('Foo')->create({ bar => 'frew', @@ -216,19 +247,36 @@ VERSION3: { biff => 'frew', }) } 'schema not deployed'; - $dm->upgrade_single_step([qw( 2.0 3.0 )]); + $dm->upgrade_single_step({ version_set => [qw( 2.0 3.0 )] }); lives_ok { $s->resultset('Foo')->create({ bar => 'frew', baz => 'frew', biff => 'frew', }) - } 'schema is deployed using _generic'; - rmtree(catfile(qw( t sql SQLite ))); - rmtree(catfile(qw( t sql _generic ))); + } 'schema is deployed'; dies_ok { - $dm->upgrade_single_step([qw( 2.0 3.0 )]); + $dm->upgrade_single_step({ version_set => [qw( 2.0 3.0 )] }); } 'dies when sql dir does not exist'; } + +my $stuff_that_ran = do { local( @ARGV, $/ ) = $stuffthatran_fn; <> }; +is $stuff_that_ran, +' + +1.0 +1.0 +1.0,2.0 +1.0,2.0 +2.0,1.0 +2.0,1.0 +1.0,2.0 +1.0,2.0 +2.0,3.0 +2.0,3.0 +2.0,3.0 +2.0,3.0 +', '_any got ran the right amount of times with the right args'; + done_testing; #vim: ts=2 sw=2 expandtab