c68356164559c7ed0fce09bda5e55de21a306ff3
[dbsrgits/DBIx-Class-DeploymentHandler.git] / t / version_storages / standard.t
1 #!perl
2
3 use strict;
4 use warnings;
5
6 use Test::More;
7 use Test::Exception;
8
9 use lib 't/lib';
10 use DBICDHTest;
11 use aliased 'DBIx::Class::DeploymentHandler::VersionStorage::Standard';
12 use aliased 'DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator';
13
14 use DBICVersion_v1;
15 use DBIx::Class::DeploymentHandler;
16 my $dbh = DBI->connect('dbi:SQLite::memory:');
17 my @connection = (sub { $dbh }, { ignore_version => 1 });
18 my $sql_dir = 't/sql';
19
20 my $s = DBICVersion::Schema->connect(@connection);
21 {
22    my $warning;
23    local $SIG{__WARN__} = sub {$warning = shift};
24    my $t = DBICVersion::Schema->connect('frewfrew', '', '');
25    like( $warning, qr/Your DB is currently unversioned. Please call upgrade on your schema to sync the DB/, 'warning when database is unversioned');
26 }
27
28 DBICDHTest::ready;
29
30 my $dm = Translator->new({
31    schema            => $s,
32    script_directory => $sql_dir,
33    databases         => ['SQLite'],
34    sql_translator_args          => { add_drop_table => 0 },
35 });
36
37 my $vs = Standard->new({ schema => $s });
38
39 $dm->prepare_resultsource_install({
40    result_source => $vs->version_rs->result_source
41 });
42
43 ok( $vs, 'DBIC::DH::VersionStorage::Standard instantiates correctly' );
44
45 ok( !$vs->version_storage_is_installed, 'VersionStorage is not yet installed' );
46
47 $dm->install_resultsource({
48    result_source => $vs->version_rs->result_source,
49    version => '1.0',
50 });
51
52 ok( $vs->version_storage_is_installed, 'VersionStorage is now installed' );
53
54
55 $vs->add_database_version({
56    version => '1.0',
57 });
58
59 ok(
60    eq_array(
61       [ $vs->version_rs->search(undef, {order_by => 'id'})->get_column('version')->all],
62       [ '1.0' ],
63    ),
64    'initial version works correctly'
65 );
66
67 is( $vs->database_version, '1.0', 'database version is 1.0');
68 $vs->add_database_version({
69    version => '2.0',
70 });
71 is( $vs->database_version, '2.0', 'database version is 2.0');
72
73 ok(
74    eq_array(
75       [ $vs->version_rs->search(undef, {order_by => 'id'})->get_column('version')->all],
76       [ '1.0', '2.0', ],
77    ),
78    'adding another version works correctly'
79 );
80
81 my $u;
82 {
83    my $warning;
84    local $SIG{__WARN__} = sub {$warning = shift};
85    $u = DBICVersion::Schema->connect(sub { $dbh });
86    like( $warning, qr/Versions out of sync. This is 1\.0, your database contains version 2\.0, please call upgrade on your Schema\./, 'warning when database/schema mismatch');
87 }
88
89
90 $vs->version_rs->delete;
91
92 ok( $vs->version_storage_is_installed, 'VersionStorage is still installed even if all versions are deleted' );
93 done_testing;