Commit | Line | Data |
05c0614b |
1 | use strict; |
2 | use warnings; |
3 | no warnings qw/once/; |
4 | |
c052f3dd |
5 | my ($inc_before, $inc_after); |
be68095d |
6 | # DBIx::Class::Optional::Dependencies queries $ENV at compile time |
7 | # to build the optional requirements |
8 | BEGIN { |
9 | $ENV{DBICTEST_PG_DSN} = '1'; |
efee51b7 |
10 | delete $ENV{DBICTEST_ORA_DSN}; |
c052f3dd |
11 | |
12 | require Carp; # Carp is not used in the test, but in OptDeps, load for proper %INC comparison |
13 | |
14 | $inc_before = [ keys %INC ]; |
15 | require DBIx::Class::Optional::Dependencies; |
16 | $inc_after = [ keys %INC ]; |
be68095d |
17 | } |
18 | |
c052f3dd |
19 | use Test::More; |
20 | use Test::Exception; |
21 | use Scalar::Util; # load before we break require() |
05c0614b |
22 | |
c052f3dd |
23 | ok ( (! grep { $_ =~ m|DBIx/Class| } @$inc_before ), 'Nothing DBIC related was loaded before inc-test') |
24 | unless $ENV{PERL5OPT}; # a defined PERL5OPT may inject extra deps crashing this test |
3c3e76bd |
25 | |
26 | is_deeply ( |
27 | [ sort @$inc_after], |
28 | [ sort (@$inc_before, 'DBIx/Class/Optional/Dependencies.pm') ], |
29 | 'Nothing loaded other than DBIx::Class::OptDeps', |
30 | ); |
31 | |
05c0614b |
32 | my $sqlt_dep = DBIx::Class::Optional::Dependencies->req_list_for ('deploy'); |
33 | is_deeply ( |
34 | [ keys %$sqlt_dep ], |
35 | [ 'SQL::Translator' ], |
36 | 'Correct deploy() dependency list', |
37 | ); |
38 | |
39 | # make module loading impossible, regardless of actual libpath contents |
d8799bab |
40 | { |
41 | local @INC = (sub { die('Optional Dep Test') } ); |
42 | |
43 | ok ( |
44 | ! DBIx::Class::Optional::Dependencies->req_ok_for ('deploy'), |
45 | 'deploy() deps missing', |
46 | ); |
47 | |
48 | like ( |
49 | DBIx::Class::Optional::Dependencies->req_missing_for ('deploy'), |
34d2deae |
50 | qr/ |
51 | (?: \A|\s ) |
52 | " SQL::Translator \~ \>\= [\d\.]+ " |
53 | \s |
54 | .*? |
55 | \Q(see DBIx::Class::Optional::Dependencies documentation for details)\E |
56 | \z |
57 | /x, |
d8799bab |
58 | 'expected missing string contents', |
59 | ); |
60 | |
61 | like ( |
62 | DBIx::Class::Optional::Dependencies->req_errorlist_for ('deploy')->{'SQL::Translator'}, |
63 | qr/Optional Dep Test/, |
64 | 'custom exception found in errorlist', |
65 | ); |
66 | } |
05c0614b |
67 | |
68 | #make it so module appears loaded |
69 | $INC{'SQL/Translator.pm'} = 1; |
70 | $SQL::Translator::VERSION = 999; |
71 | |
72 | ok ( |
73 | ! DBIx::Class::Optional::Dependencies->req_ok_for ('deploy'), |
74 | 'deploy() deps missing cached properly', |
75 | ); |
76 | |
77 | #reset cache |
78 | %DBIx::Class::Optional::Dependencies::req_availability_cache = (); |
79 | |
80 | |
81 | ok ( |
82 | DBIx::Class::Optional::Dependencies->req_ok_for ('deploy'), |
83 | 'deploy() deps present', |
84 | ); |
85 | |
86 | is ( |
87 | DBIx::Class::Optional::Dependencies->req_missing_for ('deploy'), |
88 | '', |
89 | 'expected null missing string', |
90 | ); |
91 | |
92 | is_deeply ( |
93 | DBIx::Class::Optional::Dependencies->req_errorlist_for ('deploy'), |
94 | {}, |
95 | 'expected empty errorlist', |
96 | ); |
97 | |
be68095d |
98 | # test multiple times to find autovivification bugs |
99 | for (1..2) { |
100 | throws_ok { |
101 | DBIx::Class::Optional::Dependencies->req_list_for(); |
102 | } qr/\Qreq_list_for() expects a requirement group name/, |
103 | "req_list_for without groupname throws exception on run $_"; |
104 | |
105 | throws_ok { |
106 | DBIx::Class::Optional::Dependencies->req_list_for(''); |
107 | } qr/\Qreq_list_for() expects a requirement group name/, |
108 | "req_list_for with empty groupname throws exception on run $_"; |
109 | |
110 | throws_ok { |
111 | DBIx::Class::Optional::Dependencies->req_list_for('invalid_groupname'); |
112 | } qr/Requirement group 'invalid_groupname' does not exist/, |
113 | "req_list_for with invalid groupname throws exception on run $_"; |
114 | } |
115 | |
116 | is_deeply( |
117 | DBIx::Class::Optional::Dependencies->req_list_for('rdbms_pg'), |
118 | { |
119 | 'DBD::Pg' => '0', |
120 | }, 'optional dependencies for deploying to Postgres ok'); |
121 | |
122 | is_deeply( |
123 | DBIx::Class::Optional::Dependencies->req_list_for('test_rdbms_pg'), |
124 | { |
be68095d |
125 | 'DBD::Pg' => '2.009002', |
126 | }, 'optional dependencies for testing Postgres with ENV var ok'); |
127 | |
128 | is_deeply( |
129 | DBIx::Class::Optional::Dependencies->req_list_for('test_rdbms_oracle'), |
130 | {}, 'optional dependencies for testing Oracle without ENV var ok'); |
131 | |
05c0614b |
132 | done_testing; |