skip prereq tests on some problematic modules and know broken modules
[gitmo/Moo.git] / xt / test-my-dependents.t
1 use Test::More;
2 BEGIN {
3   plan skip_all => <<'END_HELP' unless $ENV{MOO_TEST_MD};
4 This test will not run unless you set MOO_TEST_MD to a true value.
5
6   Valid values are:
7
8      all                  Test every dist which depends on Moose except those
9                           that we know cannot be tested. This is a lot of
10                           distros (hundreds).
11
12      Dist::1,Dist::2,...  Test the individual dists listed.
13
14      MooX                 Test all Moo extension distros.
15
16      1                    Run the default tests. We pick 200 random dists and
17                           test them.
18 END_HELP
19 }
20
21 use Test::DependentModules qw( test_modules );
22 use MetaCPAN::API;
23 use List::Util ();
24
25 # avoid any modules that depend on these
26 my @bad_prereqs = qw(Gtk2 Padre Wx);
27
28 my $mcpan = MetaCPAN::API->new;
29 my $res = $mcpan->post(
30   '/search/reverse_dependencies/Moo' => {
31     query => {
32       filtered => {
33         query => { "match_all" => {} },
34         filter => {
35           and => [
36             { term => { 'release.status' => 'latest' } },
37             { term => { 'release.authorized' => \1 } },
38             { not => { filter => {
39               or => [
40                 map { { term => { 'dependency.module' => $_ } } } @bad_prereqs,
41               ],
42             } } }
43           ],
44         },
45       },
46     },
47     size => 5000,
48     fields => ['distribution', 'provides', 'metadata.provides'],
49   },
50 );
51
52 my %bad_module;
53 foreach my $line (<DATA>) {
54   chomp $line;
55   if ($line =~ /^\s*(\S+)?\s*(#|$)/) {
56     $bad_module{$1}++
57       if $1;
58   }
59   else {
60     die "Invalid entry in DATA section: $line";
61   }
62 }
63
64 my @modules = sort grep !/^(?:Task|Bundle|Acme)::/, grep !$bad_module{$_}, map {
65   if (my $provides = $_->{fields}{provides}) {
66     ref $provides ? (sort @$provides)[0] : $provides;
67   }
68   elsif (my $provides = $_->{fields}{'metadata.provides'}) {
69     (sort keys %$provides)[0];
70   }
71   else {
72     my $dist = $_->{fields}{distribution};
73     $dist =~ s/-/::/g;
74     $dist;
75   }
76 } @{ $res->{hits}{hits} };
77
78 if ( $ENV{MOO_TEST_MD} eq 'MooX' ) {
79   @modules = grep /^MooX(?:$|::)/, @modules;
80 }
81 elsif ( $ENV{MOO_TEST_MD} eq '1' ) {
82   diag(<<'EOF');
83   Picking 200 random dependents to test. Set MOO_TEST_MD=all to test all
84   dependents or MOO_TEST_MD=MooX to test extension modules only.
85 EOF
86   @modules = (List::Util::shuffle(@modules))[0..199];
87 }
88 elsif ( $ENV{MOO_TEST_MD} ne 'all' ) {
89   my @chosen = split /,/, $ENV{MOO_TEST_MD};
90   my %modules = map { $_ => 1 } @modules;
91   if (my @unknown = grep { !$modules{$_} } @chosen) {
92       die "Unknown modules: @unknown";
93   }
94   @modules = @chosen;
95 }
96
97 plan tests => scalar @modules;
98 test_modules(@modules);
99
100 __DATA__
101 # no tests
102 CPAN::Mirror::Finder
103 Catmandu::AlephX
104 Device::Hue
105 Novel::Robot
106 Novel::Robot::Browser
107 Novel::Robot::Parser
108 Thrift::API::HiveClient
109 Tiezi::Robot::Parser
110
111 # broken
112 App::Presto
113 Catmandu::Store::Lucy
114 Dancer2::Session::Sereal
115 Data::Localize
116 HTML::Zoom::Parser::HH5P
117 Message::Passing::ZeroMQ
118 Tak
119
120 # broken tests
121 Template::Flute
122 Uninets::Check::Modules::HTTP
123 Uninets::Check::Modules::MongoDB
124 Uninets::Check::Modules::Redis
125
126 # missing prereqs
127 Catmandu::Z3950
128 Tiezi::Robot
129
130 # bad prereq version listed
131 Dancer2::Session::Cookie
132 Dancer2::Session::JSON
133
134 # broken, pending release
135 Hg::Lib
136 P9Y::ProcessTable
137 Net::Easypost
138
139 # OS specific
140 Linux::AtaSmart
141
142 # broken by Moo change, reported rt#84035
143 Math::Rational::Approx
144