working downgrades!
[dbsrgits/DBIx-Class-DeploymentHandler.git] / t / lib / DBICDHTest.pm
CommitLineData
02d58ac0 1package DBICDHTest;
2
3use strict;
4use warnings;
5
6use File::Path 'remove_tree';
fe3b6dff 7use Test::More;
8use Test::Exception;
02d58ac0 9
10sub 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
fe3b6dff 18sub 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);
f344dd91 29 is $s->schema_version, '1.0', 'schema version is at 1.0';
fe3b6dff 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);
f344dd91 62 is $s->schema_version, '2.0', 'schema version is at 2.0';
fe3b6dff 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);
fe3b6dff 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);
f344dd91 99 is $s->schema_version, '3.0', 'schema version is at 3.0';
fe3b6dff 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;
fe3b6dff 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 }
f344dd91 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 }
fe3b6dff 166}
167
02d58ac0 168
1691;