1#!perl
2
3use strict;
4use warnings;
5
6use lib 't/version-table-rename-lib';
7use DBICDHTest;
8use DBIx::Class::DeploymentHandler;
9use aliased 'DBIx::Class::DeploymentHandler', 'DH';
10
11use Test::More;
12use File::Temp 'tempdir';
13use Test::Fatal qw(lives_ok dies_ok);
14use IO::All;
15
16my $dbh = DBICDHTest::dbh();
17my @connection = (sub { $dbh }, { ignore_version => 1 });
18my $sql_dir = tempdir( CLEANUP => 1 );
19
20VERSION1: {
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    script_directory => $sql_dir,
27    schema => $s,
28    databases => 'SQLite',
29    sql_translator_args => { add_drop_table => 0 },
30  });
31
32  ok($handler, 'DBIx::Class::DeploymentHandler w/1 instantiates correctly');
33
34  my $version = $s->schema_version;
35  $handler->prepare_install;
36
37  dies_ok {
38    $s->resultset('Foo')->create({
39      bar => 'frew',
40    })
41  } 'schema not deployed';
42  $handler->install;
43  lives_ok {
44    $s->resultset('Foo')->create({
45      bar => 'frew',
46    })
47  } 'schema is deployed';
48}
49
50VERSION2: {
51  use_ok 'DBICVersion_v2';
52  my $s = DBICVersion::Schema->connect(@connection);
53  $DBICVersion::Schema::VERSION = 2;
54  $s->unregister_source('__VERSION'); # remove leftover version source
55  ok($s, 'DBICVersion::Schema 2 instantiates correctly');
56
57  my $handler = DH->new({
58    initial_version => 1,
59    script_directory => $sql_dir,
60    schema => $s,
61    databases => 'SQLite',
62    version_source => 'DBICDHVersion',
63    version_class => 'DBICVersion::Version',
64  });
65  ok($handler, 'DBIx::Class::DeploymentHandler w/2 instantiates correctly');
66
67  my $version = $s->schema_version();
68  $handler->prepare_install;
69  $handler->prepare_upgrade({ from_version => 1, to_version => $version} );
70
71  # manually add SQL to rename the version table
72  io->file($sql_dir, qw(SQLite upgrade 1-2 002-version-table-rename.sql))->print(<<SQL);
73    ALTER TABLE dbix_class_deploymenthandler_versions RENAME TO dbic_version;
74SQL
75
76  dies_ok {
77    $s->resultset('Foo')->create({
78      bar => 'frew',
79      baz => 'frew',
80    })
81  } 'schema not deployed';
82  $handler->upgrade;
83  lives_ok {
84    $s->resultset('Foo')->create({
85      bar => 'frew',
86      baz => 'frew',
87    })
88  } 'schema is deployed';
89
90  is $handler->database_version, 2, 'correct schema version is set';
91}
92
93done_testing;
94