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