1#!perl 2 3use strict; 4use warnings; 5 6use lib 't/version-table-rename-lib'; 7use DBICDHTest; 8use DBIx::Class::DeploymentHandler; 9use aliased 'DBIx::Class::DeploymentHandler', 'DH'; 10 11use Test::More; 12use File::Temp 'tempdir'; 13use Test::Fatal qw(lives_ok dies_ok); 14use IO::All; 15 16my $dbh = DBICDHTest::dbh(); 17my @connection = (sub { $dbh }, { ignore_version => 1 }); 18my $sql_dir = tempdir( CLEANUP => 1 ); 19 20VERSION1: { 21 use_ok 'DBICVersion_v1'; 22 my $s = DBICVersion::Schema->connect(@connection); 23 $DBICVersion::Schema::VERSION = 1; 24 ok($s, 'DBICVersion::Schema 1 instantiates correctly'); 25 my $handler = DH->new({ 26 script_directory => $sql_dir, 27 schema => $s, 28 databases => 'SQLite', 29 sql_translator_args => { add_drop_table => 0 }, 30 }); 31 32 ok($handler, 'DBIx::Class::DeploymentHandler w/1 instantiates correctly'); 33 34 my $version = $s->schema_version; 35 $handler->prepare_install; 36 37 dies_ok { 38 $s->resultset('Foo')->create({ 39 bar => 'frew', 40 }) 41 } 'schema not deployed'; 42 $handler->install; 43 lives_ok { 44 $s->resultset('Foo')->create({ 45 bar => 'frew', 46 }) 47 } 'schema is deployed'; 48} 49 50VERSION2: { 51 use_ok 'DBICVersion_v2'; 52 my $s = DBICVersion::Schema->connect(@connection); 53 $DBICVersion::Schema::VERSION = 2; 54 $s->unregister_source('__VERSION'); # remove leftover version source 55 ok($s, 'DBICVersion::Schema 2 instantiates correctly'); 56 57 my $handler = DH->new({ 58 initial_version => 1, 59 script_directory => $sql_dir, 60 schema => $s, 61 databases => 'SQLite', 62 version_source => 'DBICDHVersion', 63 version_class => 'DBICVersion::Version', 64 }); 65 ok($handler, 'DBIx::Class::DeploymentHandler w/2 instantiates correctly'); 66 67 my $version = $s->schema_version(); 68 $handler->prepare_install; 69 $handler->prepare_upgrade({ from_version => 1, to_version => $version} ); 70 71 # manually add SQL to rename the version table 72 io->file($sql_dir, qw(SQLite upgrade 1-2 002-version-table-rename.sql))->print(<<SQL); 73 ALTER TABLE dbix_class_deploymenthandler_versions RENAME TO dbic_version; 74SQL 75 76 dies_ok { 77 $s->resultset('Foo')->create({ 78 bar => 'frew', 79 baz => 'frew', 80 }) 81 } 'schema not deployed'; 82 $handler->upgrade; 83 lives_ok { 84 $s->resultset('Foo')->create({ 85 bar => 'frew', 86 baz => 'frew', 87 }) 88 } 'schema is deployed'; 89 90 is $handler->database_version, 2, 'correct schema version is set'; 91} 92 93done_testing; 94