working deprecated bundle
[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                 ok($s, 'DBICVersion::Schema 1.0 instantiates correctly');
30                 my $handler = $bundle->new({
31                         upgrade_directory => $sql_dir,
32                         schema => $s,
33                         databases => 'SQLite',
34                         sqltargs => { add_drop_table => 0 },
35                 });
36
37                 ok($handler, 'DBIx::Class::DeploymentHandler w/1.0 instantiates correctly');
38
39                 my $version = $s->schema_version();
40                 $handler->prepare_install();
41
42                 dies_ok {
43                         $s->resultset('Foo')->create({
44                                 bar => 'frew',
45                         })
46                 } 'schema not deployed';
47                 $handler->install;
48                 dies_ok {
49                   $handler->install;
50                 } 'cannot install twice';
51                 lives_ok {
52                         $s->resultset('Foo')->create({
53                                 bar => 'frew',
54                         })
55                 } 'schema is deployed';
56         }
57
58         VERSION2: {
59                 use_ok 'DBICVersion_v2';
60                 my $s = DBICVersion::Schema->connect(@connection);
61                 ok($s, 'DBICVersion::Schema 2.0 instantiates correctly');
62                 my $handler = $bundle->new({
63                         upgrade_directory => $sql_dir,
64                         schema => $s,
65                         databases => 'SQLite',
66                 });
67
68                 ok($handler, 'DBIx::Class::DeploymentHandler w/2.0 instantiates correctly');
69
70                 my $version = $s->schema_version();
71                 $handler->prepare_install();
72                 $handler->prepare_upgrade('1.0', $version);
73                 $handler->prepare_upgrade($version, '1.0');
74                 dies_ok {
75                         $s->resultset('Foo')->create({
76                                 bar => 'frew',
77                                 baz => 'frew',
78                         })
79                 } 'schema not deployed';
80                 dies_ok {
81                         $s->resultset('Foo')->create({
82                                 bar => 'frew',
83                                 baz => 'frew',
84                         })
85                 } 'schema not uppgrayyed';
86                 $handler->upgrade;
87                 lives_ok {
88                         $s->resultset('Foo')->create({
89                                 bar => 'frew',
90                                 baz => 'frew',
91                         })
92                 } 'schema is deployed';
93         }
94
95         VERSION3: {
96                 use_ok 'DBICVersion_v3';
97                 my $s = DBICVersion::Schema->connect(@connection);
98                 ok($s, 'DBICVersion::Schema 3.0 instantiates correctly');
99                 my $handler = $bundle->new({
100                         upgrade_directory => $sql_dir,
101                         schema => $s,
102                         databases => 'SQLite',
103                 });
104
105                 ok($handler, 'DBIx::Class::DeploymentHandler w/3.0 instantiates correctly');
106
107                 my $version = $s->schema_version();
108                 $handler->prepare_install;
109                 $handler->prepare_upgrade( '1.0', $version );
110                 $handler->prepare_upgrade( '2.0', $version );
111                 dies_ok {
112                         $s->resultset('Foo')->create({
113                                         bar => 'frew',
114                                         baz => 'frew',
115                                         biff => 'frew',
116                                 })
117                 } 'schema not deployed';
118                 $handler->upgrade;
119                 lives_ok {
120                         $s->resultset('Foo')->create({
121                                 bar => 'frew',
122                                 baz => 'frew',
123                                 biff => 'frew',
124                         })
125                 } 'schema is deployed';
126         }
127 }
128
129
130 1;