Correctly set the version deployed to the version requested on install
[dbsrgits/DBIx-Class-DeploymentHandler.git] / t / 02-instantiation-wo-component.t
1 #!perl
2
3 use strict;
4 use warnings;
5
6 use lib 't/no-component-lib';
7 use DBICDHTest;
8 use DBIx::Class::DeploymentHandler;
9 use aliased 'DBIx::Class::DeploymentHandler', 'DH';
10
11 use File::Path 'remove_tree';
12 use Test::More;
13 use Test::Exception;
14
15 DBICDHTest::ready;
16
17 my $dbh = DBICDHTest::dbh();
18 my @connection = (sub { $dbh }, { ignore_version => 1 });
19 my $sql_dir = 't/sql';
20
21 VERSION1: {
22   use_ok 'DBICVersion_v1';
23   my $s = DBICVersion::Schema->connect(@connection);
24   $DBICVersion::Schema::VERSION = 1;
25   ok($s, 'DBICVersion::Schema 1 instantiates correctly');
26   my $handler = DH->new({
27     script_directory => $sql_dir,
28     schema => $s,
29     databases => 'SQLite',
30     sql_translator_args => { add_drop_table => 0 },
31   });
32
33   ok($handler, 'DBIx::Class::DeploymentHandler w/1 instantiates correctly');
34
35   my $version = $s->schema_version;
36   $handler->prepare_install;
37
38   dies_ok {
39     $s->resultset('Foo')->create({
40       bar => 'frew',
41     })
42   } 'schema not deployed';
43   $handler->install({ version => 1 });
44   dies_ok {
45     $handler->install;
46   } 'cannot install twice';
47   lives_ok {
48     $s->resultset('Foo')->create({
49       bar => 'frew',
50     })
51   } 'schema is deployed';
52 }
53
54 VERSION2: {
55   use_ok 'DBICVersion_v2';
56   my $s = DBICVersion::Schema->connect(@connection);
57   $DBICVersion::Schema::VERSION = 2;
58   subtest 'bug deploying first version' => sub {
59     my $dbh = DBICDHTest::dbh();
60     my @connection = (sub { $dbh }, { ignore_version => 1 });
61     my $s = DBICVersion::Schema->connect(@connection);
62
63     my $handler = DH->new({
64       script_directory => $sql_dir,
65       schema => $s,
66       databases => 'SQLite',
67     });
68     $handler->install({ version => 1 });
69     is($handler->database_version, 1, 'correctly set version to 1');
70   };
71
72   ok($s, 'DBICVersion::Schema 2 instantiates correctly');
73   my $handler = DH->new({
74     script_directory => $sql_dir,
75     schema => $s,
76     databases => 'SQLite',
77   });
78
79   ok($handler, 'DBIx::Class::DeploymentHandler w/2 instantiates correctly');
80
81   my $version = $s->schema_version();
82   $handler->prepare_install;
83   $handler->prepare_upgrade({ from_version => 1, to_version => $version });
84   dies_ok {
85     $s->resultset('Foo')->create({
86       bar => 'frew',
87       baz => 'frew',
88     })
89   } 'schema not deployed';
90   dies_ok {
91     $s->resultset('Foo')->create({
92       bar => 'frew',
93       baz => 'frew',
94     })
95   } 'schema not uppgrayyed';
96   $handler->upgrade;
97   lives_ok {
98     $s->resultset('Foo')->create({
99       bar => 'frew',
100       baz => 'frew',
101     })
102   } 'schema is deployed';
103 }
104
105 VERSION3: {
106   use_ok 'DBICVersion_v3';
107   my $s = DBICVersion::Schema->connect(@connection);
108   $DBICVersion::Schema::VERSION = 3;
109   ok($s, 'DBICVersion::Schema 3 instantiates correctly');
110   my $handler = DH->new({
111     script_directory => $sql_dir,
112     schema => $s,
113     databases => 'SQLite',
114   });
115
116   ok($handler, 'DBIx::Class::DeploymentHandler w/3 instantiates correctly');
117
118   my $version = $s->schema_version();
119   $handler->prepare_install;
120   $handler->prepare_upgrade({ from_version => 2, to_version => $version });
121   dies_ok {
122     $s->resultset('Foo')->create({
123         bar => 'frew',
124         baz => 'frew',
125         biff => 'frew',
126       })
127   } 'schema not deployed';
128   $handler->upgrade;
129   lives_ok {
130     $s->resultset('Foo')->create({
131       bar => 'frew',
132       baz => 'frew',
133       biff => 'frew',
134     })
135   } 'schema is deployed';
136 }
137
138 DOWN2: {
139   use_ok 'DBICVersion_v4';
140   my $s = DBICVersion::Schema->connect(@connection);
141   $DBICVersion::Schema::VERSION = 2;
142   ok($s, 'DBICVersion::Schema 2 instantiates correctly');
143   my $handler = DH->new({
144     script_directory => $sql_dir,
145     schema => $s,
146     databases => 'SQLite',
147   });
148
149   ok($handler, 'DBIx::Class::DeploymentHandler w/2 instantiates correctly');
150
151   my $version = $s->schema_version();
152   $handler->prepare_downgrade({ from_version => 3, to_version => $version });
153   lives_ok {
154     $s->resultset('Foo')->create({
155       bar => 'frew',
156       baz => 'frew',
157       biff => 'frew',
158     })
159   } 'schema at version 3';
160   $handler->downgrade;
161   dies_ok {
162     $s->resultset('Foo')->create({
163       bar => 'frew',
164       baz => 'frew',
165       biff => 'frew',
166     })
167   } 'schema not at version 3';
168   lives_ok {
169     $s->resultset('Foo')->create({
170       bar => 'frew',
171       baz => 'frew',
172     })
173   } 'schema is at version 2';
174 }
175
176 done_testing;