1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
#!perl
use strict;
use warnings;
use Test::More;
use lib 't/lib';
use DBICDHTest;
use aliased 'DBIx::Class::DeploymentHandler::VersionStorage::Standard';
use aliased 'DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator';
use File::Temp 'tempdir';
use File::Find;
use DBICVersion_v1;
use DBIx::Class::DeploymentHandler;
my $dbh = DBICDHTest::dbh();
my @connection = (sub { $dbh }, { ignore_version => 1 });
my $sql_dir = tempdir( CLEANUP => 1 );
my $s = DBICVersion::Schema->connect(@connection);
{
my $warning;
local $SIG{__WARN__} = sub {$warning = shift};
my $t = DBICVersion::Schema->connect('frewfrew', '', '');
like( $warning, qr/Your DB is currently unversioned. Please call upgrade on your schema to sync the DB/, 'warning when database is unversioned');
}
my $dm = Translator->new({
schema => $s,
script_directory => $sql_dir,
databases => ['SQLite'],
sql_translator_args => { add_drop_table => 0 },
});
my $vs = Standard->new({ schema => $s });
$dm->prepare_resultsource_install({
result_source => $vs->version_rs->result_source
});
ok( $vs, 'DBIC::DH::VersionStorage::Standard instantiates correctly' );
ok( !$vs->version_storage_is_installed, 'VersionStorage is not yet installed' );
$dm->install_resultsource({
result_source => $vs->version_rs->result_source,
version => '1.0',
});
ok( $vs->version_storage_is_installed, 'VersionStorage is now installed' );
$vs->add_database_version({
version => '1.0',
});
ok(
eq_array(
[ $vs->version_rs->search(undef, {order_by => 'id'})->get_column('version')->all],
[ '1.0' ],
),
'initial version works correctly'
);
is( $vs->database_version, '1.0', 'database version is 1.0');
$vs->add_database_version({
version => '2.0',
});
is( $vs->database_version, '2.0', 'database version is 2.0');
ok(
eq_array(
[ $vs->version_rs->search(undef, {order_by => 'id'})->get_column('version')->all],
[ '1.0', '2.0', ],
),
'adding another version works correctly'
);
my $u;
{
my $warning;
local $SIG{__WARN__} = sub {$warning = shift};
$u = DBICVersion::Schema->connect(sub { $dbh });
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');
}
$vs->version_rs->delete;
ok( $vs->version_storage_is_installed, 'VersionStorage is still installed even if all versions are deleted' );
my @resulting_files;
find(sub { -f and push @resulting_files, $File::Find::name }, $sql_dir);
for (@resulting_files) {
my $contents = do {
local $/;
open my $fh, $_ or die;
binmode $fh, ':raw';
<$fh>
};
is index($contents, "\015\012"), -1, "$_ no CRLF";
}
done_testing;
|