857129ebd9013f8137290e702f1f733fcbe1ee85
[dbsrgits/DBIx-Class-DeploymentHandler.git] / t / deploy_methods / sql_translator.t
1 #!perl
2
3 use Test::More;
4 use Test::Exception;
5
6 use lib 't/lib';
7 use DBICDHTest;
8 use aliased 'DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator';
9 use File::Spec::Functions;
10
11 my $db = 'dbi:SQLite:db.db';
12 my @connection = ($db, '', '', { ignore_version => 1 });
13 my $sql_dir = 't/sql';
14
15 DBICDHTest::ready;
16
17 VERSION1: {
18    use_ok 'DBICVersion_v1';
19    my $s = DBICVersion::Schema->connect(@connection);
20    my $dm = Translator->new({
21       schema            => $s,
22       upgrade_directory => $sql_dir,
23       databases         => ['SQLite'],
24       sqltargs          => { add_drop_table => 0 },
25    });
26
27    ok( $dm, 'DBIC::DH::DM::SQL::Translator gets instantiated correctly' );
28
29    $dm->prepare_install;
30
31    ok(
32       -f catfile(qw( t sql SQLite schema 1.0 001-auto.sql )),
33       '1.0 schema gets generated properly'
34    );
35
36    dies_ok {
37       $s->resultset('Foo')->create({
38          bar => 'frew',
39       })
40    } 'schema not deployed';
41
42    $dm->_deploy;
43
44    lives_ok {
45       $s->resultset('Foo')->create({
46          bar => 'frew',
47       })
48    } 'schema is deployed';
49 }
50
51 VERSION2: {
52    use_ok 'DBICVersion_v2';
53    my $s = DBICVersion::Schema->connect(@connection);
54    my $dm = Translator->new({
55       schema            => $s,
56       upgrade_directory => $sql_dir,
57       databases         => ['SQLite'],
58       sqltargs          => { add_drop_table => 0 },
59    });
60
61    ok( $dm, 'DBIC::DH::SQL::Translator w/2.0 instantiates correctly');
62
63    $version = $s->schema_version();
64    $dm->prepare_install();
65    ok(
66       -f catfile(qw( t sql SQLite schema 2.0 001-auto.sql )),
67       '2.0 schema gets generated properly'
68    );
69    $dm->prepare_upgrade('1.0', $version);
70    ok(
71       -f catfile(qw( t sql SQLite up 1.0-2.0 001-auto.sql )),
72       '1.0-2.0 diff gets generated properly'
73    );
74    $dm->prepare_downgrade($version, '1.0');
75    ok(
76       -f catfile(qw( t sql SQLite down 2.0-1.0 001-auto.sql )),
77       '1.0-2.0 diff gets generated properly'
78    );
79    dies_ok {
80       $s->resultset('Foo')->create({
81          bar => 'frew',
82          baz => 'frew',
83       })
84    } 'schema not deployed';
85    dies_ok {
86       $s->resultset('Foo')->create({
87          bar => 'frew',
88          baz => 'frew',
89       })
90    } 'schema not uppgrayyed';
91    $dm->_upgrade_single_step([qw( 1.0 2.0 )]);
92    lives_ok {
93       $s->resultset('Foo')->create({
94          bar => 'frew',
95          baz => 'frew',
96       })
97    } 'schema is deployed';
98 }
99
100 VERSION3: {
101    use_ok 'DBICVersion_v3';
102    my $s = DBICVersion::Schema->connect(@connection);
103    my $dm = Translator->new({
104       schema            => $s,
105       upgrade_directory => $sql_dir,
106       databases         => ['SQLite'],
107       sqltargs          => { add_drop_table => 0 },
108    });
109
110    ok( $dm, 'DBIC::DH::SQL::Translator w/3.0 instantiates correctly');
111
112    $version = $s->schema_version();
113    $dm->prepare_install;
114    ok(
115       -f catfile(qw( t sql SQLite schema 3.0 001-auto.sql )),
116       '2.0 schema gets generated properly'
117    );
118    $dm->prepare_upgrade( '1.0', $version );
119    ok(
120       -f catfile(qw( t sql SQLite up 1.0-2.0 001-auto.sql )),
121       '1.0-3.0 diff gets generated properly'
122    );
123    $dm->prepare_upgrade( '2.0', $version );
124    ok(
125       -f catfile(qw( t sql SQLite up 1.0-2.0 001-auto.sql )),
126       '2.0-3.0 diff gets generated properly'
127    );
128    dies_ok {
129       $s->resultset('Foo')->create({
130             bar => 'frew',
131             baz => 'frew',
132             biff => 'frew',
133          })
134    } 'schema not deployed';
135    $dm->_upgrade_single_step([qw( 2.0 3.0 )]);
136    lives_ok {
137       $s->resultset('Foo')->create({
138          bar => 'frew',
139          baz => 'frew',
140          biff => 'frew',
141       })
142    } 'schema is deployed';
143 }
144 done_testing;