Commit | Line | Data |
02d58ac0 |
1 | #!perl |
2 | |
cbbd1b5f |
3 | use strict; |
4 | use warnings; |
5 | |
02d58ac0 |
6 | use Test::More; |
2482377b |
7 | use Test::Fatal qw(lives_ok dies_ok); |
02d58ac0 |
8 | |
9 | use lib 't/lib'; |
10 | use DBICDHTest; |
459a67e3 |
11 | use aliased 'DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator'; |
297e662f |
12 | use Path::Class qw(dir file); |
7b3d00f9 |
13 | use File::Temp qw(tempfile tempdir); |
459a67e3 |
14 | |
f3b5161e |
15 | my $dbh = DBICDHTest::dbh(); |
624e3018 |
16 | my @connection = (sub { $dbh }, { ignore_version => 1 }); |
7b3d00f9 |
17 | my $sql_dir = tempdir( CLEANUP => 1 ); |
2dfc27ba |
18 | my (undef, $stuffthatran_fn) = tempfile(OPEN => 0); |
459a67e3 |
19 | |
25c3bec3 |
20 | for (qw(initialize upgrade downgrade deploy)) { |
297e662f |
21 | dir($sql_dir, '_common', $_, '_any')->mkpath; |
25c3bec3 |
22 | open my $fh, '>', |
297e662f |
23 | file($sql_dir, '_common', $_, qw(_any 000-win.pl )); |
2dfc27ba |
24 | print {$fh} qq^sub {open my \$fh, ">>", '$stuffthatran_fn'; use Data::Dumper::Concise; print {\$fh} join(",", \@{\$_[1]||[]}) . "\\n"; }^; |
25c3bec3 |
25 | close $fh; |
26 | } |
27 | |
28 | for (qw(initialize upgrade downgrade deploy)) { |
297e662f |
29 | dir($sql_dir, 'SQLite', $_, '_any')->mkpath; |
25c3bec3 |
30 | open my $fh, '>', |
297e662f |
31 | file($sql_dir, 'SQLite', $_, qw(_any 000-win2.pl )); |
2dfc27ba |
32 | print {$fh} qq^sub {open my \$fh, ">>", '$stuffthatran_fn'; use Data::Dumper::Concise; print {\$fh} join(",", \@{\$_[1]||[]}) . "\\n"; }^; |
25c3bec3 |
33 | close $fh; |
34 | } |
459a67e3 |
35 | |
36 | VERSION1: { |
37 | use_ok 'DBICVersion_v1'; |
38 | my $s = DBICVersion::Schema->connect(@connection); |
39 | my $dm = Translator->new({ |
3b98a3a1 |
40 | schema => $s, |
91adde75 |
41 | script_directory => $sql_dir, |
3b98a3a1 |
42 | databases => ['SQLite'], |
02a7b8ac |
43 | sql_translator_args => { add_drop_table => 0 }, |
459a67e3 |
44 | }); |
45 | |
46 | ok( $dm, 'DBIC::DH::DM::SQL::Translator gets instantiated correctly' ); |
3b98a3a1 |
47 | |
91557c90 |
48 | $dm->prepare_deploy; |
fc4b7602 |
49 | |
297e662f |
50 | dir($sql_dir, qw(SQLite initialize 1.0 ))->mkpath; |
fc4b7602 |
51 | open my $prerun, '>', |
297e662f |
52 | file($sql_dir, qw(SQLite initialize 1.0 003-semiautomatic.pl )); |
2dfc27ba |
53 | my (undef, $fn) = tempfile(OPEN => 0); |
54 | print {$prerun} "sub { open my \$fh, '>', '$fn'}"; |
fc4b7602 |
55 | close $prerun; |
ff40cb1f |
56 | $dm->initialize({ version => '1.0' }); |
fc4b7602 |
57 | |
2dfc27ba |
58 | ok -e $fn, 'code got run in preinit'; |
fc4b7602 |
59 | |
92624ee5 |
60 | dies_ok {$dm->prepare_deploy} 'prepare_deploy dies if you run it twice' ; |
3b98a3a1 |
61 | |
62 | ok( |
297e662f |
63 | -f file($sql_dir, qw(SQLite deploy 1.0 001-auto.sql )), |
3b98a3a1 |
64 | '1.0 schema gets generated properly' |
65 | ); |
66 | |
67 | dies_ok { |
68 | $s->resultset('Foo')->create({ |
69 | bar => 'frew', |
70 | }) |
71 | } 'schema not deployed'; |
72 | |
026eaf0c |
73 | $dm->deploy; |
3b98a3a1 |
74 | |
75 | lives_ok { |
76 | $s->resultset('Foo')->create({ |
77 | bar => 'frew', |
78 | }) |
79 | } 'schema is deployed'; |
80 | } |
81 | |
82 | VERSION2: { |
83 | use_ok 'DBICVersion_v2'; |
84 | my $s = DBICVersion::Schema->connect(@connection); |
85 | my $dm = Translator->new({ |
86 | schema => $s, |
91adde75 |
87 | script_directory => $sql_dir, |
3b98a3a1 |
88 | databases => ['SQLite'], |
02a7b8ac |
89 | sql_translator_args => { add_drop_table => 0 }, |
91557c90 |
90 | txn_wrap => 1, |
3b98a3a1 |
91 | }); |
92 | |
93 | ok( $dm, 'DBIC::DH::SQL::Translator w/2.0 instantiates correctly'); |
94 | |
cbbd1b5f |
95 | my $version = $s->schema_version(); |
91557c90 |
96 | $dm->prepare_deploy; |
3b98a3a1 |
97 | ok( |
297e662f |
98 | -f file($sql_dir, qw(SQLite deploy 2.0 001-auto.sql )), |
3b98a3a1 |
99 | '2.0 schema gets generated properly' |
100 | ); |
297e662f |
101 | dir($sql_dir, qw(SQLite upgrade 1.0-2.0 ))->mkpath; |
be140a5f |
102 | $dm->prepare_upgrade({ |
103 | from_version => '1.0', |
104 | to_version => '2.0', |
105 | version_set => [qw(1.0 2.0)] |
106 | }); |
d50f2521 |
107 | |
108 | { |
109 | my $warned = 0; |
110 | local $SIG{__WARN__} = sub{$warned = 1}; |
be140a5f |
111 | $dm->prepare_upgrade({ |
112 | from_version => '0.0', |
113 | to_version => '1.0', |
114 | version_set => [qw(0.0 1.0)] |
115 | }); |
d50f2521 |
116 | ok( $warned, 'prepare_upgrade with a bogus preversion warns' ); |
117 | } |
3b98a3a1 |
118 | ok( |
297e662f |
119 | -f file($sql_dir, qw(SQLite upgrade 1.0-2.0 001-auto.sql )), |
d50f2521 |
120 | '1.0-2.0 diff gets generated properly and default start and end versions get set' |
3b98a3a1 |
121 | ); |
297e662f |
122 | dir($sql_dir, qw(SQLite downgrade 2.0-1.0 ))->mkpath; |
be140a5f |
123 | $dm->prepare_downgrade({ |
124 | from_version => $version, |
125 | to_version => '1.0', |
126 | version_set => [$version, '1.0'] |
127 | }); |
3b98a3a1 |
128 | ok( |
297e662f |
129 | -f file($sql_dir, qw(SQLite downgrade 2.0-1.0 001-auto.sql )), |
d50f2521 |
130 | '2.0-1.0 diff gets generated properly' |
3b98a3a1 |
131 | ); |
132 | dies_ok { |
133 | $s->resultset('Foo')->create({ |
134 | bar => 'frew', |
135 | baz => 'frew', |
136 | }) |
137 | } 'schema not deployed'; |
138 | dies_ok { |
139 | $s->resultset('Foo')->create({ |
140 | bar => 'frew', |
141 | baz => 'frew', |
142 | }) |
143 | } 'schema not uppgrayyed'; |
d50f2521 |
144 | |
297e662f |
145 | dir($sql_dir, qw(_common upgrade 1.0-2.0 ))->mkpath; |
d50f2521 |
146 | open my $common, '>', |
297e662f |
147 | file($sql_dir, qw(_common upgrade 1.0-2.0 002-semiautomatic.sql )); |
d50f2521 |
148 | print {$common} qq<INSERT INTO Foo (bar, baz) VALUES ("hello", "world");\n\n>; |
149 | close $common; |
150 | |
0841a743 |
151 | open my $common_pl, '>', |
297e662f |
152 | file($sql_dir, qw(_common upgrade 1.0-2.0 003-semiautomatic.pl )); |
0841a743 |
153 | print {$common_pl} q| |
5b5defbc |
154 | sub { |
91557c90 |
155 | my $schema = shift; |
156 | $schema->resultset('Foo')->create({ |
157 | bar => 'goodbye', |
158 | baz => 'blue skies', |
159 | }) |
160 | } |
161 | |; |
0841a743 |
162 | close $common_pl; |
163 | |
be140a5f |
164 | $dm->upgrade_single_step({ version_set => [qw( 1.0 2.0 )] }); |
d50f2521 |
165 | is( $s->resultset('Foo')->search({ |
166 | bar => 'hello', |
167 | baz => 'world', |
168 | })->count, 1, '_common migration got run'); |
0841a743 |
169 | is( $s->resultset('Foo')->search({ |
170 | bar => 'goodbye', |
171 | #baz => 'blue skies', |
172 | })->count, 1, '_common perl migration got run'); |
3b98a3a1 |
173 | lives_ok { |
174 | $s->resultset('Foo')->create({ |
175 | bar => 'frew', |
176 | baz => 'frew', |
177 | }) |
178 | } 'schema is deployed'; |
be140a5f |
179 | $dm->downgrade_single_step({ version_set => [qw( 2.0 1.0 )] }); |
d50f2521 |
180 | dies_ok { |
181 | $s->resultset('Foo')->create({ |
182 | bar => 'frew', |
183 | baz => 'frew', |
184 | }) |
fc4b7602 |
185 | } 'schema is downgrayyed'; |
be140a5f |
186 | $dm->upgrade_single_step({ version_set => [qw( 1.0 2.0 )] }); |
459a67e3 |
187 | } |
02d58ac0 |
188 | |
3b98a3a1 |
189 | VERSION3: { |
190 | use_ok 'DBICVersion_v3'; |
191 | my $s = DBICVersion::Schema->connect(@connection); |
192 | my $dm = Translator->new({ |
193 | schema => $s, |
91adde75 |
194 | script_directory => $sql_dir, |
3b98a3a1 |
195 | databases => ['SQLite'], |
02a7b8ac |
196 | sql_translator_args => { add_drop_table => 0 }, |
d50f2521 |
197 | txn_wrap => 0, |
3b98a3a1 |
198 | }); |
199 | |
200 | ok( $dm, 'DBIC::DH::SQL::Translator w/3.0 instantiates correctly'); |
201 | |
cbbd1b5f |
202 | my $version = $s->schema_version(); |
91557c90 |
203 | $dm->prepare_deploy; |
3b98a3a1 |
204 | ok( |
297e662f |
205 | -f file($sql_dir, qw(SQLite deploy 3.0 001-auto.sql )), |
3b98a3a1 |
206 | '2.0 schema gets generated properly' |
207 | ); |
be140a5f |
208 | $dm->prepare_downgrade({ |
209 | from_version => $version, |
210 | to_version => '1.0', |
211 | version_set => [$version, '1.0'] |
212 | }); |
3b98a3a1 |
213 | ok( |
297e662f |
214 | -f file($sql_dir, qw(SQLite downgrade 3.0-1.0 001-auto.sql )), |
d50f2521 |
215 | '3.0-1.0 diff gets generated properly' |
216 | ); |
be140a5f |
217 | $dm->prepare_upgrade({ |
218 | from_version => '1.0', |
219 | to_version => $version, |
220 | version_set => ['1.0', $version] |
221 | }); |
d50f2521 |
222 | ok( |
297e662f |
223 | -f file($sql_dir, qw(SQLite upgrade 1.0-3.0 001-auto.sql )), |
3b98a3a1 |
224 | '1.0-3.0 diff gets generated properly' |
225 | ); |
be140a5f |
226 | $dm->prepare_upgrade({ |
227 | from_version => '2.0', |
228 | to_version => $version, |
229 | version_set => ['2.0', $version] |
230 | }); |
92624ee5 |
231 | dies_ok { |
be140a5f |
232 | $dm->prepare_upgrade({ |
233 | from_version => '2.0', |
234 | to_version => $version, |
235 | version_set => ['2.0', $version] |
236 | }); |
92624ee5 |
237 | } |
238 | 'prepare_upgrade dies if you clobber an existing upgrade file' ; |
3b98a3a1 |
239 | ok( |
297e662f |
240 | -f file($sql_dir, qw(SQLite upgrade 1.0-2.0 001-auto.sql )), |
3b98a3a1 |
241 | '2.0-3.0 diff gets generated properly' |
242 | ); |
243 | dies_ok { |
244 | $s->resultset('Foo')->create({ |
245 | bar => 'frew', |
246 | baz => 'frew', |
247 | biff => 'frew', |
248 | }) |
249 | } 'schema not deployed'; |
be140a5f |
250 | $dm->upgrade_single_step({ version_set => [qw( 2.0 3.0 )] }); |
3b98a3a1 |
251 | lives_ok { |
252 | $s->resultset('Foo')->create({ |
253 | bar => 'frew', |
254 | baz => 'frew', |
255 | biff => 'frew', |
256 | }) |
5b766a24 |
257 | } 'schema is deployed'; |
d50f2521 |
258 | dies_ok { |
be140a5f |
259 | $dm->upgrade_single_step({ version_set => [qw( 2.0 3.0 )] }); |
d50f2521 |
260 | } 'dies when sql dir does not exist'; |
3b98a3a1 |
261 | } |
25c3bec3 |
262 | |
2dfc27ba |
263 | my $stuff_that_ran = do { local( @ARGV, $/ ) = $stuffthatran_fn; <> }; |
25c3bec3 |
264 | is $stuff_that_ran, |
265 | ' |
266 | |
267 | 1.0 |
268 | 1.0 |
269 | 1.0,2.0 |
270 | 1.0,2.0 |
271 | 2.0,1.0 |
272 | 2.0,1.0 |
273 | 1.0,2.0 |
274 | 1.0,2.0 |
275 | 2.0,3.0 |
276 | 2.0,3.0 |
277 | 2.0,3.0 |
278 | 2.0,3.0 |
279 | ', '_any got ran the right amount of times with the right args'; |
280 | |
02d58ac0 |
281 | done_testing; |
d50f2521 |
282 | #vim: ts=2 sw=2 expandtab |