8 use aliased 'DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator';
9 use File::Spec::Functions;
10 use File::Path qw(rmtree mkpath);
12 my $db = 'dbi:SQLite:db.db';
13 my @connection = ($db, '', '', { 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 upgrade_directory => $sql_dir,
24 databases => ['SQLite'],
25 sqltargs => { add_drop_table => 0 },
28 ok( $dm, 'DBIC::DH::DM::SQL::Translator gets instantiated correctly' );
33 local $SIG{__WARN__} = sub{$warned = 1};
35 ok( $warned, 'prepare_install warns if you run it twice' );
37 mkpath(catfile(qw( t sql _common schema 1.0 )));
39 catfile(qw( t sql _common schema 1.0 002-error.sql ));
40 print {$common} qq<syntax fail\n\n>;
44 -f catfile(qw( t sql SQLite schema 1.0 001-auto.sql )),
45 '1.0 schema gets generated properly'
49 $s->resultset('Foo')->create({
52 } 'schema not deployed';
54 mkpath catfile(qw( t sql _common schema 1.0 ));
56 catfile(qw( t sql _common schema 1.0 001-auto.sql ));
57 print {$common} qq<This will never get run>;
61 local $SIG{__WARN__} = sub{$warned = 1};
63 ok( $warned, 'deploy warns on sql errors' );
67 $s->resultset('Foo')->create({
70 } 'schema is deployed';
74 use_ok 'DBICVersion_v2';
75 my $s = DBICVersion::Schema->connect(@connection);
76 my $dm = Translator->new({
78 upgrade_directory => $sql_dir,
79 databases => ['SQLite'],
80 sqltargs => { add_drop_table => 0 },
83 ok( $dm, 'DBIC::DH::SQL::Translator w/2.0 instantiates correctly');
85 $version = $s->schema_version();
86 $dm->prepare_install();
88 -f catfile(qw( t sql SQLite schema 2.0 001-auto.sql )),
89 '2.0 schema gets generated properly'
91 mkpath(catfile(qw( t sql SQLite up 1.0-2.0 )));
96 local $SIG{__WARN__} = sub{$warned = 1};
97 $dm->prepare_upgrade('0.0', '1.0');
98 ok( $warned, 'prepare_upgrade with a bogus preversion warns' );
101 -f catfile(qw( t sql SQLite up 1.0-2.0 001-auto.sql )),
102 '1.0-2.0 diff gets generated properly and default start and end versions get set'
104 mkpath(catfile(qw( t sql SQLite down 2.0-1.0 )));
105 $dm->prepare_downgrade($version, '1.0');
107 -f catfile(qw( t sql SQLite down 2.0-1.0 001-auto.sql )),
108 '2.0-1.0 diff gets generated properly'
111 $s->resultset('Foo')->create({
115 } 'schema not deployed';
117 $s->resultset('Foo')->create({
121 } 'schema not uppgrayyed';
123 mkpath catfile(qw( t sql _common up 1.0-2.0 ));
124 open my $common, '>',
125 catfile(qw( t sql _common up 1.0-2.0 002-semiautomatic.sql ));
126 print {$common} qq<INSERT INTO Foo (bar, baz) VALUES ("hello", "world");\n\n>;
129 $dm->upgrade_single_step([qw( 1.0 2.0 )]);
130 is( $s->resultset('Foo')->search({
133 })->count, 1, '_common migration got run');
135 $s->resultset('Foo')->create({
139 } 'schema is deployed';
140 $dm->downgrade_single_step([qw( 2.0 1.0 )]);
142 $s->resultset('Foo')->create({
146 } 'schema is downpgrayyed';
147 $dm->upgrade_single_step([qw( 1.0 2.0 )]);
151 use_ok 'DBICVersion_v3';
152 my $s = DBICVersion::Schema->connect(@connection);
153 my $dm = Translator->new({
155 upgrade_directory => $sql_dir,
156 databases => ['SQLite'],
157 sqltargs => { add_drop_table => 0 },
161 ok( $dm, 'DBIC::DH::SQL::Translator w/3.0 instantiates correctly');
163 $version = $s->schema_version();
164 $dm->prepare_install;
166 -f catfile(qw( t sql SQLite schema 3.0 001-auto.sql )),
167 '2.0 schema gets generated properly'
169 $dm->prepare_downgrade($version, '1.0');
171 -f catfile(qw( t sql SQLite down 3.0-1.0 001-auto.sql )),
172 '3.0-1.0 diff gets generated properly'
174 $dm->prepare_upgrade( '1.0', $version, ['1.0', $version] );
176 -f catfile(qw( t sql SQLite up 1.0-3.0 001-auto.sql )),
177 '1.0-3.0 diff gets generated properly'
179 $dm->prepare_upgrade( '2.0', $version );
182 local $SIG{__WARN__} = sub{$warned = 1};
183 $dm->prepare_upgrade( '2.0', $version );
184 ok( $warned, 'prepare_upgrade warns if you clobber an existing upgrade file' );
187 -f catfile(qw( t sql SQLite up 1.0-2.0 001-auto.sql )),
188 '2.0-3.0 diff gets generated properly'
190 mkpath catfile(qw( t sql _generic up 2.0-3.0 ));
191 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 ));
192 rmtree(catfile(qw( t sql SQLite )));
193 warn 'how can this be' if -d catfile(qw( t sql SQLite ));
195 $s->resultset('Foo')->create({
200 } 'schema not deployed';
201 $dm->upgrade_single_step([qw( 2.0 3.0 )]);
203 $s->resultset('Foo')->create({
208 } 'schema is deployed using _generic';
209 rmtree(catfile(qw( t sql SQLite )));
210 rmtree(catfile(qw( t sql _generic )));
212 $dm->upgrade_single_step([qw( 2.0 3.0 )]);
213 } 'dies when sql dir does not exist';
216 #vim: ts=2 sw=2 expandtab