Include nanoseconds in timestamps
[dbsrgits/DBIx-Class-Schema-Loader.git] / t / 50rt59849.t
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 }