Commit | Line | Data |
0331d9cd |
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/"); |
576b4278 |
7 | my @reports = $source->generate(['Packages::Apt::ByHost', { |
8 | include_uninstalled => 1, |
9 | }]); |
0331d9cd |
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; |