Nick Travis script improvements from DBIC
[dbsrgits/DBIx-Class-Schema-Loader.git] / t / 50rt59849.t
CommitLineData
0f21885a 1# test for loading additional methods from file-defined packages
2# by Mark Hedges ( hedges -at| scriptdolphin.com )
3
4use strict;
5use Test::More tests => 7 * 5;
6use Test::Exception;
7
8use lib 't/lib';
9
10use make_dbictest_db;
11
12use 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
18run_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
29run_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
41run_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
53run_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
63run_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
72sub 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
120sub 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}