Commit | Line | Data |
02d58ac0 |
1 | package DBICDHTest; |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
6 | use File::Path 'remove_tree'; |
fe3b6dff |
7 | use Test::More; |
8 | use Test::Exception; |
02d58ac0 |
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 | |
fe3b6dff |
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); |
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 | |
169 | 1; |