how did I miss this?
[dbsrgits/DBIx-Class-DeploymentHandler.git] / t / 02-instantiation.t
1 #!perl
2
3 use strict;
4 use warnings;
5
6 use lib 't/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::Schema1->connect(@connection);
24   $DBICVersion::Schema1::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;
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::Schema2->connect(@connection);
57   $DBICVersion::Schema2::VERSION = 2;
58   ok($s, 'DBICVersion::Schema 2 instantiates correctly');
59   my $handler = DH->new({
60     script_directory => $sql_dir,
61     schema => $s,
62     databases => 'SQLite',
63   });
64
65   ok($handler, 'DBIx::Class::DeploymentHandler w/2 instantiates correctly');
66
67   my $version = $s->schema_version();
68   $handler->prepare_install;
69   $handler->prepare_upgrade({ from_version => 1, to_version => $version} );
70   dies_ok {
71     $s->resultset('Foo')->create({
72       bar => 'frew',
73       baz => 'frew',
74     })
75   } 'schema not deployed';
76   dies_ok {
77     $s->resultset('Foo')->create({
78       bar => 'frew',
79       baz => 'frew',
80     })
81   } 'schema not uppgrayyed';
82   $handler->upgrade;
83   lives_ok {
84     $s->resultset('Foo')->create({
85       bar => 'frew',
86       baz => 'frew',
87     })
88   } 'schema is deployed';
89 }
90
91 VERSION3: {
92   use_ok 'DBICVersion_v3';
93   my $s = DBICVersion::Schema3->connect(@connection);
94   $DBICVersion::Schema3::VERSION = 3;
95   ok($s, 'DBICVersion::Schema 3 instantiates correctly');
96   my $handler = DH->new({
97     script_directory => $sql_dir,
98     schema => $s,
99     databases => 'SQLite',
100   });
101
102   ok($handler, 'DBIx::Class::DeploymentHandler w/3 instantiates correctly');
103
104   my $version = $s->schema_version();
105   $handler->prepare_install;
106   $handler->prepare_upgrade({ from_version => 2, to_version => $version });
107   dies_ok {
108     $s->resultset('Foo')->create({
109         bar => 'frew',
110         baz => 'frew',
111         biff => 'frew',
112       })
113   } 'schema not deployed';
114   $handler->upgrade;
115   lives_ok {
116     $s->resultset('Foo')->create({
117       bar => 'frew',
118       baz => 'frew',
119       biff => 'frew',
120     })
121   } 'schema is deployed';
122 }
123
124 DOWN2: {
125   use_ok 'DBICVersion_v4';
126   my $s_old = DBICVersion::Schema3->connect(@connection);
127   my $s_new = DBICVersion::Schema4->connect(@connection);
128   $DBICVersion::Schema4::VERSION = 2;
129   ok($s_new, 'DBICVersion::Schema 2 instantiates correctly');
130   my $handler = DH->new({
131     script_directory => $sql_dir,
132     schema => $s_new,
133     databases => 'SQLite',
134   });
135
136   ok($handler, 'DBIx::Class::DeploymentHandler w/2 instantiates correctly');
137
138   my $version = $s_new->schema_version();
139   $handler->prepare_downgrade({ from_version => 3, to_version => $version });
140   lives_ok {
141     $s_old->resultset('Foo')->create({
142       bar => 'frew',
143       baz => 'frew',
144       biff => 'frew',
145     })
146   } 'schema at version 3';
147   $handler->downgrade;
148   dies_ok {
149     $s_old->resultset('Foo')->create({
150       bar => 'frew',
151       baz => 'frew',
152       biff => 'frew',
153     })
154   } 'schema not at version 3';
155   lives_ok {
156     $s_new->resultset('Foo')->create({
157       bar => 'frew',
158       baz => 'frew',
159     })
160   } 'schema is at version 2';
161 }
162
163 done_testing;