allow usage of a pool of mediawiki updaters instead of just single-process
[scpubgit/System-Introspector-Report.git] / t / builder_packages-apt-bypackage.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::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;