Commit | Line | Data |
cc7c22d9 |
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 | |
cc7c22d9 |
11 | use Test::More; |
7b3d00f9 |
12 | use File::Temp 'tempdir'; |
2482377b |
13 | use Test::Fatal qw(lives_ok dies_ok); |
624e3018 |
14 | use DBI; |
cc7c22d9 |
15 | |
f3b5161e |
16 | my $dbh = DBICDHTest::dbh(); |
624e3018 |
17 | my @connection = (sub { $dbh }, { ignore_version => 1 }); |
7b3d00f9 |
18 | my $sql_dir = tempdir( CLEANUP => 1 ); |
cc7c22d9 |
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 | ignore_ddl => 1, |
27 | script_directory => $sql_dir, |
28 | schema => $s, |
38857f30 |
29 | databases => [], |
cc7c22d9 |
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; |
5761fe02 |
36 | $handler->prepare_install; |
cc7c22d9 |
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::Schema->connect(@connection); |
57 | $DBICVersion::Schema::VERSION = 2; |
58 | ok($s, 'DBICVersion::Schema 2 instantiates correctly'); |
59 | my $handler = DH->new({ |
60 | ignore_ddl => 1, |
61 | script_directory => $sql_dir, |
62 | schema => $s, |
38857f30 |
63 | databases => [], |
cc7c22d9 |
64 | }); |
65 | |
66 | ok($handler, 'DBIx::Class::DeploymentHandler w/2 instantiates correctly'); |
67 | |
68 | my $version = $s->schema_version(); |
5761fe02 |
69 | $handler->prepare_install; |
cc7c22d9 |
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::Schema->connect(@connection); |
94 | $DBICVersion::Schema::VERSION = 3; |
95 | ok($s, 'DBICVersion::Schema 3 instantiates correctly'); |
96 | my $handler = DH->new({ |
97 | ignore_ddl => 1, |
98 | script_directory => $sql_dir, |
99 | schema => $s, |
38857f30 |
100 | databases => [], |
cc7c22d9 |
101 | }); |
102 | |
103 | ok($handler, 'DBIx::Class::DeploymentHandler w/3 instantiates correctly'); |
104 | |
105 | my $version = $s->schema_version(); |
5761fe02 |
106 | $handler->prepare_install; |
cc7c22d9 |
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 = DBICVersion::Schema->connect(@connection); |
127 | $DBICVersion::Schema::VERSION = 2; |
128 | ok($s, 'DBICVersion::Schema 2 instantiates correctly'); |
129 | my $handler = DH->new({ |
130 | ignore_ddl => 1, |
131 | script_directory => $sql_dir, |
132 | schema => $s, |
38857f30 |
133 | databases => [], |
cc7c22d9 |
134 | }); |
135 | |
136 | ok($handler, 'DBIx::Class::DeploymentHandler w/2 instantiates correctly'); |
137 | |
138 | my $version = $s->schema_version(); |
139 | lives_ok { |
140 | $s->resultset('Foo')->create({ |
141 | bar => 'frew', |
142 | baz => 'frew', |
143 | biff => 'frew', |
144 | }) |
145 | } 'schema at version 3'; |
146 | $handler->downgrade; |
147 | dies_ok { |
148 | $s->resultset('Foo')->create({ |
149 | bar => 'frew', |
150 | baz => 'frew', |
151 | biff => 'frew', |
152 | }) |
153 | } 'schema not at version 3'; |
154 | lives_ok { |
155 | $s->resultset('Foo')->create({ |
156 | bar => 'frew', |
157 | baz => 'frew', |
158 | }) |
159 | } 'schema is at version 2'; |
2e3cccff |
160 | |
7b3d00f9 |
161 | is $handler->version_storage->database_version => 2, |
2e3cccff |
162 | 'database version is down to 2'; |
163 | |
cc7c22d9 |
164 | } |
165 | |
166 | done_testing; |