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/"); |
7 | my @reports = $source->generate(['Packages::Apt::ByPackage', {}]); |
8 | |
9 | is scalar(@reports), 4, 'four reports received'; |
10 | |
11 | my $_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 | |
18 | my $_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 | |
27 | subtest "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 | |
48 | subtest "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 | |
64 | subtest "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 | |
85 | subtest "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 | |
101 | done_testing; |