fix dynamic generation skip bug
[scpubgit/System-Introspector-Report.git] / t / builder_packages-apt-bypackage.t
CommitLineData
0331d9cd 1use strictures 1;
2use Test::More;
3use FindBin;
4use aliased 'System::Introspector::Report::Source';
5
6my $source = Source->new(root => "$FindBin::Bin/data/json/");
7my @reports = $source->generate(['Packages::Apt::ByPackage', {}]);
8
9is scalar(@reports), 4, 'four reports received';
10
11my $_test_columns = sub {
12 my ($rep, @columns) = @_;
13 my %cols = map { ($_->{key}, 1) } @{$rep->{columns}};
14 ok $cols{$_}, "$_ column exists"
15 for @columns;
16};
17
18my $_test_rows = sub {
19 my ($rep, @rows) = @_;
20 is scalar(@{$rep->{rows}}), scalar(@rows), 'matching number of rows';
21 for my $idx (0 .. $#rows) {
22 is $rep->{rows}[$idx]{$_}, $rows[$idx]{$_}, "row $idx $_ value"
23 for sort keys %{$rows[$idx]};
24 }
25};
26
27subtest "first report" => sub {
28 my $rep = shift @reports;
29 is_deeply $rep->{id}, ['packages-apt-by-package', 'bar'], 'report id';
30 like $rep->{title}, qr{bar}, 'report title contains package';
31 is_deeply $rep->{meta}, { package => 'bar' }, 'meta data';
32 is_deeply $rep->{rowid}, ['remote'], 'correct rowid';
33 $rep->$_test_columns(qw( hostname remote version upgrade ));
34 $rep->$_test_rows(
35 { remote => 'hostA',
36 hostname => 'a.example.com',
37 version => 17,
38 upgrade => 18,
39 },
40 { remote => 'hostB',
41 hostname => 'b.example.com',
42 version => 18,
43 upgrade => undef,
44 },
45 );
46};
47
48subtest "second report" => sub {
49 my $rep = shift @reports;
50 is_deeply $rep->{id}, ['packages-apt-by-package', 'baz'], 'report id';
51 like $rep->{title}, qr{baz}, 'report title contains package';
52 is_deeply $rep->{meta}, { package => 'baz' }, 'meta data';
53 is_deeply $rep->{rowid}, ['remote'], 'correct rowid';
54 $rep->$_test_columns(qw( hostname remote version upgrade ));
55 $rep->$_test_rows(
56 { remote => 'hostB',
57 hostname => 'b.example.com',
58 version => 99,
59 upgrade => undef,
60 },
61 );
62};
63
64subtest "third report" => sub {
65 my $rep = shift @reports;
66 is_deeply $rep->{id}, ['packages-apt-by-package', 'foo'], 'report id';
67 like $rep->{title}, qr{foo}, 'report title contains package';
68 is_deeply $rep->{meta}, { package => 'foo' }, 'meta data';
69 is_deeply $rep->{rowid}, ['remote'], 'correct rowid';
70 $rep->$_test_columns(qw( hostname remote version upgrade ));
71 $rep->$_test_rows(
72 { remote => 'hostA',
73 hostname => 'a.example.com',
74 version => 23,
75 upgrade => undef,
76 },
77 { remote => 'hostB',
78 hostname => 'b.example.com',
79 version => 23,
80 upgrade => 'unparsable',
81 },
82 );
83};
84
85subtest "fourth report" => sub {
86 my $rep = shift @reports;
87 is_deeply $rep->{id}, ['packages-apt-by-package', 'qux'], 'report id';
88 like $rep->{title}, qr{qux}, 'report title contains package';
89 is_deeply $rep->{meta}, { package => 'qux' }, 'meta data';
90 is_deeply $rep->{rowid}, ['remote'], 'correct rowid';
91 $rep->$_test_columns(qw( hostname remote version upgrade ));
92 $rep->$_test_rows(
93 { remote => 'hostA',
94 hostname => 'a.example.com',
95 version => 77,
96 upgrade => 80,
97 },
98 );
99};
100
101done_testing;