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