App-migrate
view release on metacpan or search on metacpan
t/no-restore-optimization.t view on Meta::CPAN
use strict;
use POSIX qw(locale_h); BEGIN { setlocale(LC_MESSAGES,'en_US.UTF-8') } # avoid UTF-8 in $!
use Test::More;
use Test::Exception;
use Path::Tiny qw( path tempfile );
use App::migrate;
my @steps;
my @versions;
my $migrate = App::migrate->new;
$migrate->on(VERSION => sub { push @versions, $_[0]->{version} });
$migrate->on(BACKUP => sub {});
$migrate->on(RESTORE => sub {});
$migrate->on(error => sub {die});
my $file = tempfile('migrate.XXXXXX');
$file->spew_utf8(<<'MIGRATE');
VERSION 0.0.0
VERSION 0.1.0
VERSION 0.2.0
upgrade true
RESTORE
VERSION 0.3.0
VERSION 0.4.0
VERSION 0.5.0
MIGRATE
lives_ok { $migrate->load($file) } 'load';
# bug was:
# optimization which skip all steps before RESTORE wasn't update
# "prev_version" of related steps
for my $from (qw( 0.5.0 0.3.0 0.4.0 )) {
is_deeply [$migrate->get_steps($migrate->find_paths($from,'0.0.0'))], [
($from ge '0.5.0' ? {
prev_version => '0.5.0',
next_version => '0.4.0',
type => 'VERSION',
version => '0.4.0'
} : ()),
($from ge '0.4.0' ? {
prev_version => '0.4.0',
next_version => '0.3.0',
type => 'VERSION',
version => '0.3.0'
} : ()),
{
prev_version => '0.3.0',
next_version => '0.2.0',
type => 'RESTORE',
version => '0.2.0'
},
{
prev_version => '0.3.0',
next_version => '0.2.0',
type => 'VERSION',
version => '0.2.0'
},
{
prev_version => '0.2.0',
next_version => '0.1.0',
( run in 0.609 second using v1.01-cache-2.11-cpan-ceb78f64989 )