App-MtAws

 view release on metacpan or  search on metacpan

t/unit/journal_add_delete.t  view on Meta::CPAN


{
	my $j = App::MtAws::Journal->new('journal_file' => '.');
	my $obj2 = { relfilename => 'file2', archive_id => 'a2', time => 42, mtime => undef };
	my $obj3 = { relfilename => 'file2', archive_id => 'a3', time => 43, mtime => undef };
	$j->_add_filename($obj2);
	$j->_add_filename($obj3);
	no warnings 'redefine';
	my $saved = undef;
	local *App::MtAws::FileVersions::latest = sub { $saved = shift; "TEST" };
	is $j->latest('file2'), 'TEST', "latest call FileVersions latest()";
	ok $saved->isa('App::MtAws::FileVersions'), 'latest call FileVersions latest() right';
}

{
	my $j = App::MtAws::Journal->new('journal_file' => '.');
	my $obj2 = { relfilename => 'file2', archive_id => 'a2', time => 42, mtime => undef };
	$j->_add_filename($obj2);
	ok ! defined eval { $j->latest('not-a-file'); 1 }, "should confess if file not found";
}

# _add_archive

{
	my $j = App::MtAws::Journal->new('journal_file' => '.');
	$j->_add_archive({ relfilename => 'file1', archive_id => 'abc123' });
	cmp_deeply $j->{archive_h}, {'abc123' => { relfilename => 'file1', archive_id => 'abc123' }}, "_add_archive should work";
}

{
	my $j = App::MtAws::Journal->new('journal_file' => '.');
	$j->_add_archive({ relfilename => 'file1', archive_id => 'abc123' });
	$j->_add_archive({ relfilename => 'file1', archive_id => 'def123' });
	cmp_deeply $j->{archive_h}, {
		'abc123' => { relfilename => 'file1', archive_id => 'abc123' },
		'def123' => { relfilename => 'file1', archive_id => 'def123' }
	}, "_add_archive should work with two archives";
}

{
	my $j = App::MtAws::Journal->new('journal_file' => '.');
	$j->_add_archive({ relfilename => 'file1', archive_id => 'abc123' });
	ok ! defined eval { $j->_add_archive({ relfilename => 'file2', archive_id => 'abc123' }); 1 }, "_add_archive should confess";
}

# _delete_archive


{
	for my $f ('abc123', 0) {
		my $j = App::MtAws::Journal->new('journal_file' => '.');
		$j->_add_archive({ relfilename => $f, archive_id => 'abc123' });
		$j->_delete_archive('abc123', $f);
		cmp_deeply $j->{archive_h}, {}, "_delete_archive should work";
	}
}

{
	my $j = App::MtAws::Journal->new('journal_file' => '.');
	$j->_add_archive({ relfilename => 'file1', archive_id => 'abc123' });
	ok ! eval { $j->_delete_archive('abc123'); 1 }, "_delete_archive should validate arguments";
	ok ! eval { $j->_delete_archive(); 1 }, "_delete_archive should validate arguments";
}

{
	my $j = App::MtAws::Journal->new('journal_file' => '.');
	$j->_add_archive({ relfilename => 'file1', archive_id => 'abc123' });
	$j->_add_archive({ relfilename => 'file1', archive_id => 'fff123' });
	$j->_delete_archive('abc123', 'file1');
	cmp_deeply $j->{archive_h}, { fff123 => { relfilename => 'file1', archive_id => 'fff123' }}, "_delete_archive should work with two archives";
}

{
	my $j = App::MtAws::Journal->new('journal_file' => '.');
	$j->_add_archive({ relfilename => 'file1', archive_id => 'abc123' });
	ok ! defined eval { $j->_delete_archive('zzzz', 'file1'); 1 }, "_delete_archive should confess";
}

{
	my $filter = App::MtAws::Filter->new();
	$filter->parse_filters('-file1');
	my $j = App::MtAws::Journal->new('journal_file' => '.', filter => $filter);
	$j->_add_archive({ relfilename => 'file1', archive_id => 'abc123' });
	cmp_deeply $j->{archive_h}, {}, "assume filter works";
	$j->_delete_archive('abc123', 'file1');
	ok 1, "delete archive should not die if arhive was previously excluded by filter";
}

{
	my $filter = App::MtAws::Filter->new();
	$filter->parse_filters('-wrongfilter');
	my $j = App::MtAws::Journal->new('journal_file' => '.', filter => $filter);
	$j->_add_archive({ relfilename => 'file1', archive_id => 'abc123' });
	cmp_deeply $j->{archive_h}, { abc123 => { 'archive_id' => 'abc123', 'relfilename' => 'file1' } }, "assume filter works";
	no warnings 'redefine';
	my $called = 0;
	local *App::MtAws::Filter::check_filenames = sub { $called = 1};
	$j->_delete_archive('abc123', 'fileZZZ');
	cmp_deeply $j->{archive_h}, {}, "deletion works";
	ok ! $called, "if archive found by id - filter routines should not be called (for perf. reasons)";
}

{
	my $filter = App::MtAws::Filter->new();
	$filter->parse_filters('-wrongfilter');
	my $j = App::MtAws::Journal->new('journal_file' => '.', filter => $filter);
	$j->_add_archive({ relfilename => 'file1', archive_id => 'abc123' });
	cmp_deeply $j->{archive_h}, { abc123 => { 'archive_id' => 'abc123', 'relfilename' => 'file1' } }, "assume filter works";
	ok ! eval { $j->_delete_archive('wrongarchive', 'file1'); 1}, "_delete_archive should confess even if filter exists";
}

# _add_archive - working with filter
{
	my $filter= App::MtAws::Filter->new();
	my $j = App::MtAws::Journal->new('journal_file' => '.', filter => $filter);
	my $called = 0;
	no warnings 'redefine';
	local *App::MtAws::Filter::check_filenames = sub {
		my ($self, $relfilename) = @_;
		++$called;
		is $self, $filter, "should filter usign right object";
		is $relfilename, 'file1', "should call filter with correct filename";



( run in 1.375 second using v1.01-cache-2.11-cpan-437f7b0c052 )