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