8 use aliased 'DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator';
9 use File::Spec::Functions;
10 use File::Path qw(rmtree mkpath);
12 my $dbh = DBI->connect('dbi:SQLite::memory:');
13 my @connection = (sub { $dbh }, { ignore_version => 1 });
14 my $sql_dir = 't/sql';
19 use_ok 'DBICVersion_v1';
20 my $s = DBICVersion::Schema->connect(@connection);
21 my $dm = Translator->new({
23 script_directory => $sql_dir,
24 databases => ['SQLite'],
25 sql_translator_args => { add_drop_table => 0 },
28 ok( $dm, 'DBIC::DH::DM::SQL::Translator gets instantiated correctly' );
32 mkpath(catfile(qw( t sql SQLite initialize 1.0 )));
34 catfile(qw( t sql SQLite initialize 1.0 003-semiautomatic.pl ));
35 print {$prerun} "sub {use File::Touch; touch(q(foobar));}";
37 $dm->initialize({ version => '1.0' });
43 local $SIG{__WARN__} = sub{$warned = 1};
45 ok( $warned, 'prepare_deploy warns if you run it twice' );
49 -f catfile(qw( t sql SQLite deploy 1.0 001-auto.sql )),
50 '1.0 schema gets generated properly'
54 $s->resultset('Foo')->create({
57 } 'schema not deployed';
62 $s->resultset('Foo')->create({
65 } 'schema is deployed';
69 use_ok 'DBICVersion_v2';
70 my $s = DBICVersion::Schema->connect(@connection);
71 my $dm = Translator->new({
73 script_directory => $sql_dir,
74 databases => ['SQLite'],
75 sql_translator_args => { add_drop_table => 0 },
79 ok( $dm, 'DBIC::DH::SQL::Translator w/2.0 instantiates correctly');
81 $version = $s->schema_version();
84 -f catfile(qw( t sql SQLite deploy 2.0 001-auto.sql )),
85 '2.0 schema gets generated properly'
87 mkpath(catfile(qw( t sql SQLite upgrade 1.0-2.0 )));
88 $dm->prepare_upgrade({
89 from_version => '1.0',
91 version_set => [qw(1.0 2.0)]
96 local $SIG{__WARN__} = sub{$warned = 1};
97 $dm->prepare_upgrade({
98 from_version => '0.0',
100 version_set => [qw(0.0 1.0)]
102 ok( $warned, 'prepare_upgrade with a bogus preversion warns' );
105 -f catfile(qw( t sql SQLite upgrade 1.0-2.0 001-auto.sql )),
106 '1.0-2.0 diff gets generated properly and default start and end versions get set'
108 mkpath(catfile(qw( t sql SQLite downgrade 2.0-1.0 )));
109 $dm->prepare_downgrade({
110 from_version => $version,
112 version_set => [$version, '1.0']
115 -f catfile(qw( t sql SQLite downgrade 2.0-1.0 001-auto.sql )),
116 '2.0-1.0 diff gets generated properly'
119 $s->resultset('Foo')->create({
123 } 'schema not deployed';
125 $s->resultset('Foo')->create({
129 } 'schema not uppgrayyed';
131 mkpath catfile(qw( t sql _common upgrade 1.0-2.0 ));
132 open my $common, '>',
133 catfile(qw( t sql _common upgrade 1.0-2.0 002-semiautomatic.sql ));
134 print {$common} qq<INSERT INTO Foo (bar, baz) VALUES ("hello", "world");\n\n>;
137 open my $common_pl, '>',
138 catfile(qw( t sql _common upgrade 1.0-2.0 003-semiautomatic.pl ));
139 print {$common_pl} q|
142 $schema->resultset('Foo')->create({
150 $dm->upgrade_single_step({ version_set => [qw( 1.0 2.0 )] });
151 is( $s->resultset('Foo')->search({
154 })->count, 1, '_common migration got run');
155 is( $s->resultset('Foo')->search({
157 #baz => 'blue skies',
158 })->count, 1, '_common perl migration got run');
160 $s->resultset('Foo')->create({
164 } 'schema is deployed';
165 $dm->downgrade_single_step({ version_set => [qw( 2.0 1.0 )] });
167 $s->resultset('Foo')->create({
171 } 'schema is downgrayyed';
172 $dm->upgrade_single_step({ version_set => [qw( 1.0 2.0 )] });
176 use_ok 'DBICVersion_v3';
177 my $s = DBICVersion::Schema->connect(@connection);
178 my $dm = Translator->new({
180 script_directory => $sql_dir,
181 databases => ['SQLite'],
182 sql_translator_args => { add_drop_table => 0 },
186 ok( $dm, 'DBIC::DH::SQL::Translator w/3.0 instantiates correctly');
188 $version = $s->schema_version();
191 -f catfile(qw( t sql SQLite deploy 3.0 001-auto.sql )),
192 '2.0 schema gets generated properly'
194 $dm->prepare_downgrade({
195 from_version => $version,
197 version_set => [$version, '1.0']
200 -f catfile(qw( t sql SQLite downgrade 3.0-1.0 001-auto.sql )),
201 '3.0-1.0 diff gets generated properly'
203 $dm->prepare_upgrade({
204 from_version => '1.0',
205 to_version => $version,
206 version_set => ['1.0', $version]
209 -f catfile(qw( t sql SQLite upgrade 1.0-3.0 001-auto.sql )),
210 '1.0-3.0 diff gets generated properly'
212 $dm->prepare_upgrade({
213 from_version => '2.0',
214 to_version => $version,
215 version_set => ['2.0', $version]
219 local $SIG{__WARN__} = sub{$warned = 1};
220 $dm->prepare_upgrade({
221 from_version => '2.0',
222 to_version => $version,
223 version_set => ['2.0', $version]
225 ok( $warned, 'prepare_upgrade warns if you clobber an existing upgrade file' );
228 -f catfile(qw( t sql SQLite upgrade 1.0-2.0 001-auto.sql )),
229 '2.0-3.0 diff gets generated properly'
232 $s->resultset('Foo')->create({
237 } 'schema not deployed';
238 $dm->upgrade_single_step({ version_set => [qw( 2.0 3.0 )] });
240 $s->resultset('Foo')->create({
245 } 'schema is deployed';
247 $dm->upgrade_single_step({ version_set => [qw( 2.0 3.0 )] });
248 } 'dies when sql dir does not exist';
251 #vim: ts=2 sw=2 expandtab