a9e63e6b688c87fa5041320940d9cefe2c8598c5
[dbsrgits/DBIx-Class.git] / t / 105view_deps.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More;
7 use Test::Exception;
8 use lib qw(t/lib);
9 use ViewDeps;
10 use Devel::Dwarn;
11
12 BEGIN {
13     use_ok('DBIx::Class::ResultSource::View');
14 }
15
16 ### SANITY
17
18 my $view = DBIx::Class::ResultSource::View->new( { name => 'Quux' } );
19
20 isa_ok( $view, 'DBIx::Class::ResultSource', 'A new view' );
21 isa_ok( $view, 'DBIx::Class', 'A new view also' );
22
23 can_ok( $view, $_ ) for qw/new from deploy_depends_on/;
24
25 ### DEPS
26
27 my $schema = ViewDeps->connect;
28 ok( $schema, 'Connected to ViewDeps schema OK' );
29 my $bar_rs = $schema->resultset('Bar');
30
31 #diag(DwarnS $bar_rs->result_source);
32
33 my @bar_deps
34     = keys %{ $schema->resultset('Bar')->result_source->deploy_depends_on };
35
36 my @foo_deps
37     = keys %{ $schema->resultset('Foo')->result_source->deploy_depends_on };
38
39 isa_ok( $schema->resultset('Bar')->result_source,
40     'DBIx::Class::ResultSource::View', 'Bar' );
41
42 is( $bar_deps[0], 'baz',   'which is reported to depend on baz...' );
43 is( $bar_deps[1], 'mixin', 'and on mixin.' );
44 is( $foo_deps[0], undef,   'Foo has no dependencies...' );
45
46 isa_ok(
47     $schema->resultset('Foo')->result_source,
48     'DBIx::Class::ResultSource::View',
49     'though Foo'
50 );
51 isa_ok(
52     $schema->resultset('Baz')->result_source,
53     'DBIx::Class::ResultSource::Table',
54     "Baz on the other hand"
55 );
56 dies_ok {
57     ViewDeps::Result::Baz->result_source_instance
58         ->deploy_depends_on("ViewDeps::Result::Mixin");
59 }
60 "...and you cannot use deploy_depends_on with that";
61
62 diag(
63     "ViewDeps::Foo view definition: ",
64     ViewDeps->source('Foo')->view_definition
65 );
66 diag( "schema->rs(Bar) view definition: ",
67     $schema->resultset('Bar')->result_source->view_definition );
68
69 my $dir = "t/sql";    # tempdir(CLEANUP => 0);
70 $schema->create_ddl_dir( ['PostgreSQL','SQLite'], 0.1, $dir );
71
72 done_testing;