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