Committing thing for move to git.
[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
11 BEGIN {
12     use_ok('DBIx::Class::ResultSource::View');
13 }
14
15 #################### SANITY
16
17 my $view = DBIx::Class::ResultSource::View->new( { name => 'Quux' } );
18
19 isa_ok( $view, 'DBIx::Class::ResultSource', 'A new view' );
20 isa_ok( $view, 'DBIx::Class', 'A new view also' );
21
22 can_ok( $view, $_ ) for qw/new from deploy_depends_on/;
23
24 #################### DEPS
25
26 my $schema
27     = ViewDeps->connect( 'dbi:SQLite::memory:', { quote_char => '"', } );
28 ok( $schema, 'Connected to ViewDeps schema OK' );
29
30 my $deps_ref = {
31     map {
32         $schema->resultset($_)->result_source->name =>
33             $schema->resultset($_)->result_source->deploy_depends_on
34         }
35         grep {
36         $schema->resultset($_)
37             ->result_source->isa('DBIx::Class::ResultSource::View')
38         } @{ [ $schema->sources ] }
39 };
40
41 my @sorted_sources = sort {
42     keys %{ $deps_ref->{$a} || {} } <=> keys %{ $deps_ref->{$b} || {} }
43         || $a cmp $b
44     }
45     keys %$deps_ref;
46
47 #################### DEPLOY
48
49 $schema->deploy( { add_drop_table => 1 } );
50
51 #################### DOES ORDERING WORK?
52
53 my $tr = $schema->{sqlt};
54
55 my @keys = keys %{ $tr->{views} };
56
57 my @sqlt_sources
58     = sort { $tr->{views}->{$a}->{order} cmp $tr->{views}->{$b}->{order} }
59     @keys;
60
61 is_deeply( \@sorted_sources, \@sqlt_sources,
62     "SQLT view order triumphantly matches our order." );
63
64 #################### AND WHAT ABOUT USING THE SCHEMA?
65
66 lives_ok( sub { $schema->resultset($_)->next }, "Query on $_ succeeds" )
67     for grep {
68     $schema->resultset($_)
69         ->result_source->isa('DBIx::Class::ResultSource::View')
70     } @{ [ $schema->sources ] };
71
72 done_testing;