Commit | Line | Data |
0f21885a |
1 | # test for loading additional methods from file-defined packages |
2 | # by Mark Hedges ( hedges -at| scriptdolphin.com ) |
3 | |
4 | use strict; |
5 | use Test::More tests => 7 * 5; |
6 | use Test::Exception; |
7 | |
8 | use lib 't/lib'; |
9 | |
10 | use make_dbictest_db; |
11 | |
12 | use DBIx::Class::Schema::Loader; |
13 | |
14 | $ENV{SCHEMA_LOADER_BACKCOMPAT} = 1; |
15 | |
16 | # In the first test run, then, Foo should be a DBICTestMethods::Namespaces::Schema::Result::Foo |
17 | |
18 | run_test_sequence( |
19 | testname => "naming => 'current'", |
20 | schema_class => 'DBICTestMethods::Namespaces::Schema', |
21 | foo_class => 'DBICTestMethods::Namespaces::Schema::Result::Foo', |
22 | schema_opts => { |
23 | naming => 'current', |
24 | }, |
25 | ); |
26 | |
27 | # In the second test run with use_namespaces => 0 (backcompat), Foo should be a DBICTestMethods::Backcompat::Schema |
28 | |
29 | run_test_sequence( |
30 | testname => "naming => 'current', use_namespaces => 0", |
31 | schema_class => 'DBICTestMethods::Backcompat::Schema', |
32 | foo_class => 'DBICTestMethods::Backcompat::Schema::Foo', |
33 | schema_opts => { |
34 | naming => 'current', |
35 | use_namespaces => 0, |
36 | }, |
37 | ); |
38 | |
39 | # In the third test, with use_namespaces => 1, Foo gets the explicit Result class again |
40 | |
41 | run_test_sequence( |
42 | testname => "naming => 'current', use_namespaces => 1", |
43 | schema_class => 'DBICTestMethods::Namespaces::Schema', |
44 | foo_class => 'DBICTestMethods::Namespaces::Schema::Result::Foo', |
45 | schema_opts => { |
46 | naming => 'current', |
47 | use_namespaces => 1, |
48 | }, |
49 | ); |
50 | |
51 | # try it in full backcompat 0.04006 mode with no schema options |
52 | |
53 | run_test_sequence( |
54 | testname => "no naming or namespaces options (0.04006 mode)", |
55 | schema_class => 'DBICTestMethods::Backcompat::Schema', |
56 | foo_class => 'DBICTestMethods::Backcompat::Schema::Foo', |
57 | schema_opts => { |
58 | }, |
59 | ); |
60 | |
61 | # try it in backcompat mode (no naming option) but with use_namespaces => 1 |
62 | |
63 | run_test_sequence( |
64 | testname => "no naming, but with use_namespaces options (0.04006 mode)", |
65 | schema_class => 'DBICTestMethods::Namespaces::Schema', |
66 | foo_class => 'DBICTestMethods::Namespaces::Schema::Result::Foo', |
67 | schema_opts => { |
68 | use_namespaces => 1, |
69 | }, |
70 | ); |
71 | |
72 | sub run_test_sequence { |
73 | my %p = @_; |
74 | die "specify a $_ test param" for grep !$p{$_}, |
75 | qw( testname schema_opts schema_class foo_class ); |
76 | |
77 | my $schema; |
78 | lives_ok { $schema = make_schema_with(%p) } "($p{testname}) get schema"; |
79 | |
80 | SKIP: { |
81 | skip 'no point in checking if schema could not be connected', 6 unless defined $schema; |
82 | |
83 | # well, if that worked, try to get a ResultSet |
84 | my $foo_rs; |
85 | lives_ok { |
86 | $foo_rs = $schema->resultset('Foo')->search(); |
87 | } "($p{testname}) get a ResultSet for Foo"; |
88 | |
89 | # get a foo |
90 | my $foo; |
91 | lives_ok { |
92 | $foo = $foo_rs->first(); |
93 | } "($p{testname}) get the first foo"; |
94 | |
95 | ok(defined $foo, "($p{testname}) \$foo is defined"); |
96 | |
97 | SKIP: { |
98 | skip 'foo is not defined', 3 unless defined $foo; |
99 | |
100 | isa_ok $foo, $p{foo_class}; |
101 | |
102 | # call the file-defined method |
103 | my $biz; |
104 | lives_ok { |
105 | $biz = $foo->biz(); |
106 | } "($p{testname}) call the file-defined Foo->biz method"; |
107 | |
108 | SKIP: { |
109 | skip 'no point in checking value if method was not found', 1 unless defined $biz; |
110 | |
111 | ok( |
112 | $biz eq 'foo bar biz baz boz noz schnozz', |
113 | "($p{testname}) biz() method returns correct string" |
114 | ); |
115 | } |
116 | } |
117 | } |
118 | } |
119 | |
120 | sub make_schema_with { |
121 | my %p = @_; |
122 | return DBIx::Class::Schema::Loader::make_schema_at( |
123 | $p{schema_class}, |
124 | $p{schema_opts}, |
125 | [ $make_dbictest_db::dsn ], |
126 | ); |
127 | } |