Unit test for deriving from result classes
[dbsrgits/DBIx-Class.git] / t / 105_compose_namespace.t
1 use lib qw(t/lib);
2 use DBICTest;
3 use Test::More;
4
5 my $db_file = "t/var/NSplain.db";
6
7 unlink($db_file) if -e $db_file;
8 unlink($db_file . "-journal") if -e $db_file . "-journal";
9 mkdir("t/var") unless -d "t/var";
10
11 my $dsn = "dbi:SQLite:${db_file}";
12
13 eval {
14     local $SIG{__WARN__} = sub {};
15     package DBICNSTest;
16     use base qw/DBIx::Class::Schema/;
17     __PACKAGE__->load_namespaces;
18 };
19 ok(!$@, 'load_namespaces does not die') or diag $@;
20
21 eval {
22     package Derived::Schema::Result::A;
23     use base qw/DBICNSTest::Result::A/;
24     sub whoami { 'derived result' }
25 };
26 ok(!$@, 'Deriving result does not die') or diag $@;
27
28
29 my $model         = DBICNSTest->connect($dsn);
30 $model->storage->dbh_do(sub { $_[1]->do('CREATE TABLE a (a INT)')});
31 $model->populate('A', [ [ 'a' ], [  17 ] ]);
32
33 my $derived_model = DBICNSTest->compose_namespace('Derived::Schema')->connect($dsn);
34
35 my $rset   = DBICNSTest->resultset('A');
36 isa_ok($rset, 'DBICNSTest::ResultSet::A');
37
38 my $rset   = $derived_model->resultset('A');
39 isa_ok($rset, 'Derived::Schema::ResultSet::A','Derived resultset');
40
41 my $result = $rset->search({})->first;
42 is($result->a(), 17, 'Value of base result seen in derived result');
43 isa_ok($result, 'Derived::Schema::Result::A', 'Derived schema result');
44 can_ok($result, 'whoami');
45
46 done_testing();