4 use aliased 'System::Introspector::Report::Source';
6 my $source = Source->new(root => "$FindBin::Bin/data/json/");
7 my @reports = $source->generate(['Packages::Apt::ByPackage', {}]);
9 is scalar(@reports), 4, 'four reports received';
11 my $_test_columns = sub {
12 my ($rep, @columns) = @_;
13 my %cols = map { ($_->{key}, 1) } @{$rep->{columns}};
14 ok $cols{$_}, "$_ column exists"
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]};
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 ));
36 hostname => 'a.example.com',
41 hostname => 'b.example.com',
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 ));
57 hostname => 'b.example.com',
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 ));
73 hostname => 'a.example.com',
78 hostname => 'b.example.com',
80 upgrade => 'unparsable',
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 ));
94 hostname => 'a.example.com',