11 use aliased 'DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator';
12 use File::Spec::Functions;
13 use File::Path qw(rmtree mkpath);
14 use File::Temp 'tempfile';
16 my $dbh = DBICDHTest::dbh();
17 my @connection = (sub { $dbh }, { ignore_version => 1 });
18 my $sql_dir = 't/sql';
19 my (undef, $stuffthatran_fn) = tempfile(OPEN => 0);
23 for (qw(initialize upgrade downgrade deploy)) {
24 mkpath(catfile(qw( t sql _common), $_, '_any' ));
26 catfile(qw( t sql _common), $_, qw(_any 000-win.pl ));
27 print {$fh} qq^sub {open my \$fh, ">>", '$stuffthatran_fn'; use Data::Dumper::Concise; print {\$fh} join(",", \@{\$_[1]||[]}) . "\\n"; }^;
31 for (qw(initialize upgrade downgrade deploy)) {
32 mkpath(catfile(qw( t sql SQLite), $_, '_any' ));
34 catfile(qw( t sql SQLite), $_, qw(_any 000-win2.pl ));
35 print {$fh} qq^sub {open my \$fh, ">>", '$stuffthatran_fn'; use Data::Dumper::Concise; print {\$fh} join(",", \@{\$_[1]||[]}) . "\\n"; }^;
40 use_ok 'DBICVersion_v1';
41 my $s = DBICVersion::Schema->connect(@connection);
42 my $dm = Translator->new({
44 script_directory => $sql_dir,
45 databases => ['SQLite'],
46 sql_translator_args => { add_drop_table => 0 },
49 ok( $dm, 'DBIC::DH::DM::SQL::Translator gets instantiated correctly' );
53 mkpath(catfile(qw( t sql SQLite initialize 1.0 )));
55 catfile(qw( t sql SQLite initialize 1.0 003-semiautomatic.pl ));
56 my (undef, $fn) = tempfile(OPEN => 0);
57 print {$prerun} "sub { open my \$fh, '>', '$fn'}";
59 $dm->initialize({ version => '1.0' });
61 ok -e $fn, 'code got run in preinit';
63 dies_ok {$dm->prepare_deploy} 'prepare_deploy dies if you run it twice' ;
66 -f catfile(qw( t sql SQLite deploy 1.0 001-auto.sql )),
67 '1.0 schema gets generated properly'
71 $s->resultset('Foo')->create({
74 } 'schema not deployed';
79 $s->resultset('Foo')->create({
82 } 'schema is deployed';
86 use_ok 'DBICVersion_v2';
87 my $s = DBICVersion::Schema->connect(@connection);
88 my $dm = Translator->new({
90 script_directory => $sql_dir,
91 databases => ['SQLite'],
92 sql_translator_args => { add_drop_table => 0 },
96 ok( $dm, 'DBIC::DH::SQL::Translator w/2.0 instantiates correctly');
98 my $version = $s->schema_version();
101 -f catfile(qw( t sql SQLite deploy 2.0 001-auto.sql )),
102 '2.0 schema gets generated properly'
104 mkpath(catfile(qw( t sql SQLite upgrade 1.0-2.0 )));
105 $dm->prepare_upgrade({
106 from_version => '1.0',
108 version_set => [qw(1.0 2.0)]
113 local $SIG{__WARN__} = sub{$warned = 1};
114 $dm->prepare_upgrade({
115 from_version => '0.0',
117 version_set => [qw(0.0 1.0)]
119 ok( $warned, 'prepare_upgrade with a bogus preversion warns' );
122 -f catfile(qw( t sql SQLite upgrade 1.0-2.0 001-auto.sql )),
123 '1.0-2.0 diff gets generated properly and default start and end versions get set'
125 mkpath(catfile(qw( t sql SQLite downgrade 2.0-1.0 )));
126 $dm->prepare_downgrade({
127 from_version => $version,
129 version_set => [$version, '1.0']
132 -f catfile(qw( t sql SQLite downgrade 2.0-1.0 001-auto.sql )),
133 '2.0-1.0 diff gets generated properly'
136 $s->resultset('Foo')->create({
140 } 'schema not deployed';
142 $s->resultset('Foo')->create({
146 } 'schema not uppgrayyed';
148 mkpath catfile(qw( t sql _common upgrade 1.0-2.0 ));
149 open my $common, '>',
150 catfile(qw( t sql _common upgrade 1.0-2.0 002-semiautomatic.sql ));
151 print {$common} qq<INSERT INTO Foo (bar, baz) VALUES ("hello", "world");\n\n>;
154 open my $common_pl, '>',
155 catfile(qw( t sql _common upgrade 1.0-2.0 003-semiautomatic.pl ));
156 print {$common_pl} q|
159 $schema->resultset('Foo')->create({
167 $dm->upgrade_single_step({ version_set => [qw( 1.0 2.0 )] });
168 is( $s->resultset('Foo')->search({
171 })->count, 1, '_common migration got run');
172 is( $s->resultset('Foo')->search({
174 #baz => 'blue skies',
175 })->count, 1, '_common perl migration got run');
177 $s->resultset('Foo')->create({
181 } 'schema is deployed';
182 $dm->downgrade_single_step({ version_set => [qw( 2.0 1.0 )] });
184 $s->resultset('Foo')->create({
188 } 'schema is downgrayyed';
189 $dm->upgrade_single_step({ version_set => [qw( 1.0 2.0 )] });
193 use_ok 'DBICVersion_v3';
194 my $s = DBICVersion::Schema->connect(@connection);
195 my $dm = Translator->new({
197 script_directory => $sql_dir,
198 databases => ['SQLite'],
199 sql_translator_args => { add_drop_table => 0 },
203 ok( $dm, 'DBIC::DH::SQL::Translator w/3.0 instantiates correctly');
205 my $version = $s->schema_version();
208 -f catfile(qw( t sql SQLite deploy 3.0 001-auto.sql )),
209 '2.0 schema gets generated properly'
211 $dm->prepare_downgrade({
212 from_version => $version,
214 version_set => [$version, '1.0']
217 -f catfile(qw( t sql SQLite downgrade 3.0-1.0 001-auto.sql )),
218 '3.0-1.0 diff gets generated properly'
220 $dm->prepare_upgrade({
221 from_version => '1.0',
222 to_version => $version,
223 version_set => ['1.0', $version]
226 -f catfile(qw( t sql SQLite upgrade 1.0-3.0 001-auto.sql )),
227 '1.0-3.0 diff gets generated properly'
229 $dm->prepare_upgrade({
230 from_version => '2.0',
231 to_version => $version,
232 version_set => ['2.0', $version]
235 $dm->prepare_upgrade({
236 from_version => '2.0',
237 to_version => $version,
238 version_set => ['2.0', $version]
241 'prepare_upgrade dies if you clobber an existing upgrade file' ;
243 -f catfile(qw( t sql SQLite upgrade 1.0-2.0 001-auto.sql )),
244 '2.0-3.0 diff gets generated properly'
247 $s->resultset('Foo')->create({
252 } 'schema not deployed';
253 $dm->upgrade_single_step({ version_set => [qw( 2.0 3.0 )] });
255 $s->resultset('Foo')->create({
260 } 'schema is deployed';
262 $dm->upgrade_single_step({ version_set => [qw( 2.0 3.0 )] });
263 } 'dies when sql dir does not exist';
266 my $stuff_that_ran = do { local( @ARGV, $/ ) = $stuffthatran_fn; <> };
282 ', '_any got ran the right amount of times with the right args';
285 #vim: ts=2 sw=2 expandtab