#!/usr/bin/env perl

use v5.12.5;
use warnings;

our $VERSION = '9999.99.99_99'; # VERSION

use Test::More tests => 4;
use Test::Warnings;
use Test::Deep;
use Test::Exception;

use Rex::Pkg::Test;
use Rex::Pkg::Redhat;

my $pkg = Rex::Pkg::Test->new;

subtest 'package list diffs' => sub {
  plan tests => 1;

  ## no critic (ProhibitDuplicateLiteral)

  my @plist1 = (
    { name => 'vim', version => '1.0' },
    { name => 'mc',  version => '2.0' },
    { name => 'rex', version => '0.51.0' },
  );

  my @plist2 = (
    { name => 'vim',       version => '1.0' },
    { name => 'rex',       version => '0.52.0' },
    { name => 'libssh2-1', version => '0.32.1' },
  );

  my @expected = (
    {
      action  => 'updated',
      name    => 'rex',
      version => '0.52.0',
    },
    {
      action  => 'removed',
      name    => 'mc',
      version => '2.0',
    },
    {
      action  => 'installed',
      name    => 'libssh2-1',
      version => '0.32.1',
    },
  );

  ## use critic

  my @mods = $pkg->diff_package_list( \@plist1, \@plist2 );

  cmp_deeply( \@mods, \@expected, 'expected package modifications' );
};

subtest 'local package installation' => sub {
  plan tests => 1;

  lives_ok { $pkg->update('test_package') }, 'update test package';
};

subtest 'redhat package list diffs' => sub {
  plan tests => 1;

  my $rh_pkg = Rex::Pkg::Redhat->new;

  ## no critic (ProhibitDuplicateLiteral)

  my @before = (
    {
      arch    => 'x86_64',
      epoch   => '0',
      name    => 'lzo',
      release => '8.el7',
      version => '2.06',
    },
    {
      arch    => 'x86_64',
      epoch   => '0',
      name    => 'postgresql-server',
      release => '1.el7',
      version => '9.2.18',
    },
    {
      arch    => 'x86_64',
      epoch   => '0',
      name    => 'kernel',
      release => '427.26.1.el9_4',
      version => '5.14.0',
    },
  );

  my @after = (
    {
      arch    => 'x86_64',
      epoch   => '0',
      name    => 'postgresql-server',
      release => '1.el7',
      version => '9.2.19',
    },
    {
      arch    => 'x86_64',
      epoch   => '0',
      name    => 'kernel',
      release => '427.28.1.el9_4',
      version => '5.14.0',
    },
    {
      arch    => 'x86_64',
      epoch   => '0',
      name    => 'kernel',
      release => '427.26.1.el9_4',
      version => '5.14.0',
    },
  );

  my @expected = (
    {
      action  => 'updated',
      arch    => 'x86_64',
      epoch   => '0',
      name    => 'postgresql-server',
      release => '1.el7',
      version => '9.2.19',
    },
    {
      action  => 'installed',
      arch    => 'x86_64',
      epoch   => '0',
      name    => 'kernel',
      release => '427.28.1.el9_4',
      version => '5.14.0',
    },
    {
      action  => 'removed',
      arch    => 'x86_64',
      epoch   => '0',
      name    => 'lzo',
      release => '8.el7',
      version => '2.06',
    },
  );

  ## use critic

  my @mods = $rh_pkg->diff_package_list( \@before, \@after );

  cmp_bag( \@mods, \@expected,
    'expected package modifications on Red Hat compatible distros' );
};

1;