make reporting of known but uninstalled packages optional
[scpubgit/System-Introspector-Report.git] / t / builder_packages-apt-byhost.t
1 use strictures 1;
2 use Test::More;
3 use FindBin;
4 use aliased 'System::Introspector::Report::Source';
5
6 my $source  = Source->new(root => "$FindBin::Bin/data/json/");
7 my @reports = $source->generate(['Packages::Apt::ByHost', {
8   include_uninstalled => 1,
9 }]);
10
11 is scalar(@reports), 2, 'two reports received';
12
13 my $_test_columns = sub {
14   my ($rep, @columns) = @_;
15   my %cols = map { ($_->{key}, 1) } @{$rep->{columns}};
16   ok $cols{$_}, "$_ column exists"
17     for @columns;
18 };
19
20 my $_test_rows = sub {
21   my ($rep, @rows) = @_;
22   is scalar(@{$rep->{rows}}), scalar(@rows), 'matching number of rows';
23   for my $idx (0 .. $#rows) {
24     is $rep->{rows}[$idx]{$_}, $rows[$idx]{$_}, "row $idx $_ value"
25       for sort keys %{$rows[$idx]};
26   }
27 };
28
29 subtest "first report" => sub {
30   my $rep = $reports[0];
31   is_deeply $rep->{id}, ['packages-apt-by-remote', 'hostA'], 'report id';
32   like $rep->{title}, qr{hostA}, 'report title contains remote';
33   is_deeply $rep->{meta}, { remote => 'hostA' }, 'meta data';
34   is_deeply $rep->{rowid}, ['package'], 'correct rowid';
35   $rep->$_test_columns(qw( package version upgrade ));
36   $rep->$_test_rows(
37     { package => 'bar', version => 17, upgrade => '18' },
38     { package => 'baz', version => undef, upgrade => undef, },
39     { package => 'foo', version => 23, upgrade => undef },
40     { package => 'qux', version => 77, upgrade => '80' },
41   );
42 };
43
44 subtest "second report" => sub {
45   my $rep = $reports[1];
46   is_deeply $rep->{id}, ['packages-apt-by-remote', 'hostB'], 'report id';
47   like $rep->{title}, qr{hostB}, 'report title contains remote';
48   is_deeply $rep->{meta}, { remote => 'hostB' }, 'meta data';
49   is_deeply $rep->{rowid}, ['package'], 'correct rowid';
50   $rep->$_test_columns(qw( package version upgrade ));
51   $rep->$_test_rows(
52     { package => 'bar', version => 18, upgrade => undef },
53     { package => 'baz', version => 99, upgrade => undef, },
54     { package => 'foo', version => 23, upgrade => 'unparsable' },
55     { package => 'qux', version => undef, upgrade => undef },
56   );
57 };
58
59 done_testing;