The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#!/usr/bin/perl
# $Id: test.t 2348 2011-05-15 16:15:39Z pterjan $

use strict;
use Test::More tests => 10;
use Youri::Package::RPM::Test;

BEGIN {
    use_ok('Youri::Repository::Test');
}

my $repository = Youri::Repository::Test->new(
    cleanup => 0,
    extra_arches => [ 'i586' ]
);
isa_ok($repository, 'Youri::Repository::Test');

my $foo1 = Youri::Package::RPM::Test->new(tags => {
    name => 'foo', version => 1, release => 1, arch => 'i586'
});
is_deeply(
    [
        map { $_->as_file() }
        $repository->get_replaced_packages($foo1)
    ],
    [ ],
    'first package release replaces nothing'
);

my $dir = $repository->get_install_dir($foo1);
my $foo1_path = $dir . '/' . $foo1->get_tag('filename');
system("touch $foo1_path");

my $foo2 = Youri::Package::RPM::Test->new(tags => {
    name => 'foo', version => 2, release => 1, arch => 'i586'
});
is_deeply(
    [
        map { $_->as_file() }
        $repository->get_replaced_packages($foo2)
    ],
    [ $foo1_path ],
    'second package release replaces first one'
);
my $foo2_path = $dir . '/' . $foo2->get_tag('filename');
system("touch $foo2_path");

my $foo3 = Youri::Package::RPM::Test->new(tags => {
    name => 'foo', version => 3, release => 1, arch => 'i586'
});
is_deeply(
    [
        map { $_->as_file() }
        $repository->get_replaced_packages($foo3)
    ],
    [ $foo2_path, $foo1_path ],
    'third package release replaces first ones'
);

my $libfoo1 = Youri::Package::RPM::Test->new(tags => {
    name => 'libfoo1', version => 1, release => 1, arch => 'i586'
});
is_deeply(
    [
        map { $_->as_file() }
        $repository->get_replaced_packages($libfoo1)
    ],
    [ ],
    'first libified package release replaces nothing'
);

my $libfoo1_path = $dir . '/' . $libfoo1->get_tag('filename');
system("touch $libfoo1_path");
my $libfoo2 = Youri::Package::RPM::Test->new(tags => {
    name => 'libfoo2', version => 2, release => 1, arch => 'i586'
});
is_deeply(
    [
        map { $_->as_file() }
        $repository->get_replaced_packages($libfoo2)
    ],
    [ ],
    'second libified package release replaces nothing'
);

my $libfoo2_path = $dir . '/' . $libfoo2->get_tag('filename');
system("touch $libfoo2_path");
my $libfoo3 = Youri::Package::RPM::Test->new(tags => {
    name => 'libfoo3', version => 3, release => 1, arch => 'i586'
});
is_deeply(
    [
        map { $_->as_file() }
        $repository->get_replaced_packages($libfoo3)
    ],
    [ ],
    'third libified package release replaces nothing'
);

my $noarchfoo4 = Youri::Package::RPM::Test->new(tags => {
    name => 'foo', version => 4, release => 1, arch => 'noarch'
});
is_deeply(
    [
        map { $_->as_file() }
        $repository->get_replaced_packages($noarchfoo4)
    ],
    [ $foo2_path, $foo1_path ],
    'noarch package replaces i586 ones'
);

my $noarchfoo4_path = $dir . '/' . $noarchfoo4->get_tag('filename');
system("touch $noarchfoo4_path");

my $foo5 = Youri::Package::RPM::Test->new(tags => {
    name => 'foo', version => 5, release => 1, arch => 'i586'
});
is_deeply(
    [
        map { $_->as_file() }
        $repository->get_replaced_packages($foo5)
    ],
    [ $noarchfoo4_path, $foo2_path, $foo1_path ],
    'fifth package replaces all the ones with same name'
);