From: Arthur Axel 'fREW' Schmidt Date: Sun, 21 Mar 2010 08:17:27 +0000 (-0500) Subject: good enough coverage for govt work (98.7) X-Git-Tag: v0.001000_01~55 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=d50f25217d0b10029e1fb5ea140eb5547df67592;p=dbsrgits%2FDBIx-Class-DeploymentHandler.git good enough coverage for govt work (98.7) --- diff --git a/t/deploy_methods/sql_translator.t b/t/deploy_methods/sql_translator.t index 857129e..5eeb3de 100644 --- a/t/deploy_methods/sql_translator.t +++ b/t/deploy_methods/sql_translator.t @@ -7,6 +7,7 @@ use lib 't/lib'; use DBICDHTest; use aliased 'DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator'; use File::Spec::Functions; +use File::Path qw(rmtree mkpath); my $db = 'dbi:SQLite:db.db'; my @connection = ($db, '', '', { ignore_version => 1 }); @@ -27,6 +28,17 @@ VERSION1: { 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; ok( -f catfile(qw( t sql SQLite schema 1.0 001-auto.sql )), @@ -39,7 +51,17 @@ VERSION1: { }) } 'schema not deployed'; - $dm->_deploy; + 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' ); + } lives_ok { $s->resultset('Foo')->create({ @@ -66,15 +88,24 @@ VERSION2: { -f catfile(qw( t sql SQLite schema 2.0 001-auto.sql )), '2.0 schema gets generated properly' ); - $dm->prepare_upgrade('1.0', $version); + mkpath(catfile(qw( t sql SQLite up 1.0-2.0 ))); + $dm->prepare_upgrade; + + { + my $warned = 0; + local $SIG{__WARN__} = sub{$warned = 1}; + $dm->prepare_upgrade('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 )), - '1.0-2.0 diff gets generated properly' + '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'); ok( -f catfile(qw( t sql SQLite down 2.0-1.0 001-auto.sql )), - '1.0-2.0 diff gets generated properly' + '2.0-1.0 diff gets generated properly' ); dies_ok { $s->resultset('Foo')->create({ @@ -88,13 +119,32 @@ VERSION2: { baz => 'frew', }) } 'schema not uppgrayyed'; + + mkpath catfile(qw( t sql _common up 1.0-2.0 )); + open my $common, '>', + catfile(qw( t sql _common up 1.0-2.0 002-semiautomatic.sql )); + print {$common} qq; + close $common; + $dm->_upgrade_single_step([qw( 1.0 2.0 )]); + is( $s->resultset('Foo')->search({ + bar => 'hello', + baz => 'world', + })->count, 1, '_common migration got run'); lives_ok { $s->resultset('Foo')->create({ bar => 'frew', baz => 'frew', }) } 'schema is deployed'; + $dm->_downgrade_single_step([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 )]); } VERSION3: { @@ -105,6 +155,7 @@ VERSION3: { upgrade_directory => $sql_dir, databases => ['SQLite'], sqltargs => { add_drop_table => 0 }, + txn_wrap => 0, }); ok( $dm, 'DBIC::DH::SQL::Translator w/3.0 instantiates correctly'); @@ -115,16 +166,31 @@ VERSION3: { -f catfile(qw( t sql SQLite schema 3.0 001-auto.sql )), '2.0 schema gets generated properly' ); - $dm->prepare_upgrade( '1.0', $version ); + $dm->prepare_downgrade($version, '1.0'); ok( - -f catfile(qw( t sql SQLite up 1.0-2.0 001-auto.sql )), + -f catfile(qw( t sql SQLite down 3.0-1.0 001-auto.sql )), + '3.0-1.0 diff gets generated properly' + ); + $dm->prepare_upgrade( '1.0', $version, ['1.0', $version] ); + ok( + -f catfile(qw( t sql SQLite up 1.0-3.0 001-auto.sql )), '1.0-3.0 diff gets generated properly' ); $dm->prepare_upgrade( '2.0', $version ); + { + my $warned = 0; + local $SIG{__WARN__} = sub{$warned = 1}; + $dm->prepare_upgrade( '2.0', $version ); + ok( $warned, 'prepare_upgrade warns if you clobber an existing upgrade file' ); + } ok( -f catfile(qw( t sql SQLite up 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', @@ -139,6 +205,12 @@ VERSION3: { baz => 'frew', biff => 'frew', }) - } 'schema is deployed'; + } 'schema is deployed using _generic'; + rmtree(catfile(qw( t sql SQLite ))); + rmtree(catfile(qw( t sql _generic ))); + dies_ok { + $dm->_upgrade_single_step([qw( 2.0 3.0 )]); + } 'dies when sql dir does not exist'; } done_testing; +#vim: ts=2 sw=2 expandtab diff --git a/t/deploy_methods/sql_translator_deprecated.t b/t/deploy_methods/sql_translator_deprecated.t index 0e5eab2..1b4f0b5 100644 --- a/t/deploy_methods/sql_translator_deprecated.t +++ b/t/deploy_methods/sql_translator_deprecated.t @@ -1,4 +1,3 @@ - #!perl use Test::More; @@ -6,6 +5,85 @@ use Test::Exception; use lib 't/lib'; use DBICDHTest; -use_ok 'DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator::Deprecated'; +use aliased + 'DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator::Deprecated'; + +use File::Spec::Functions; + +my $db = 'dbi:SQLite:db.db'; +my @connection = ($db, '', '', { ignore_version => 1 }); +my $sql_dir = 't/sql'; + +DBICDHTest::ready; + +VERSION1: { + use_ok 'DBICVersion_v1'; + my $s = DBICVersion::Schema->connect(@connection); + my $dm = Deprecated->new({ + schema => $s, + upgrade_directory => $sql_dir, + databases => ['SQLite'], + sqltargs => { add_drop_table => 0 }, + }); + + ok( $dm, 'DBIC::DH::DM::SQLT::Deprecated gets instantiated correctly' ); + + $dm->prepare_install(); + + ok( + -f catfile(qw( t sql DBICVersion-Schema-1.0-SQLite.sql )), + '1.0 schema gets generated properly' + ); + + dies_ok { + $s->resultset('Foo')->create({ + bar => 'frew', + }) + } 'schema not deployed'; + $dm->_deploy; + lives_ok { + $s->resultset('Foo')->create({ + bar => 'frew', + }) + } 'schema is deployed'; +} + +VERSION2: { + use_ok 'DBICVersion_v2'; + my $s = DBICVersion::Schema->connect(@connection); + my $dm = Deprecated->new({ + schema => $s, + upgrade_directory => $sql_dir, + databases => ['SQLite'], + }); + + ok( + $dm, + 'DBIC::DH::DM::SQLT::Deprecated gets instantiated correctly w/ version 2.0' + ); + $version = $s->schema_version(); + $dm->prepare_install(); + $dm->prepare_upgrade('1.0', $version); + dies_ok { + $s->resultset('Foo')->create({ + bar => 'frew', + baz => 'frew', + }) + } 'schema not deployed'; + dies_ok { + $s->resultset('Foo')->create({ + bar => 'frew', + baz => 'frew', + }) + } 'schema not uppgrayyed'; + $dm->_upgrade_single_step(['1.0', $version]); + lives_ok { + $s->resultset('Foo')->create({ + bar => 'frew', + baz => 'frew', + }) + } 'schema is deployed'; +} done_testing; +#vim: ts=2 sw=2 expandtab