Remove extraneous include in parser; replace loop with map in parser; add throws_ok...
[dbsrgits/DBIx-Class.git] / t / 105view_deps.t
CommitLineData
6ebf5cbb 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6use Test::More;
7use Test::Exception;
8use lib qw(t/lib);
6ebf5cbb 9use ViewDeps;
51b31bbe 10use ViewDepsBad;
6ebf5cbb 11
12BEGIN {
13 use_ok('DBIx::Class::ResultSource::View');
14}
15
b7b008a2 16#################### SANITY
d40f513f 17
51b31bbe 18my $view = DBIx::Class::ResultSource::View->new;
66fb15b6 19
9efcc79f 20isa_ok( $view, 'DBIx::Class::ResultSource', 'A new view' );
21isa_ok( $view, 'DBIx::Class', 'A new view also' );
6ebf5cbb 22
e55d9d89 23can_ok( $view, $_ ) for qw/new from deploy_depends_on/;
6ebf5cbb 24
b7b008a2 25#################### DEPS
26
8a8525be 27my $schema
28 = ViewDeps->connect( 'dbi:SQLite::memory:', { quote_char => '"', } );
1e70d9dc 29ok( $schema, 'Connected to ViewDeps schema OK' );
9efcc79f 30
b7b008a2 31#################### DEPLOY
bf5c3a3f 32
2446dc59 33$schema->deploy( { add_drop_table => 1 } );
34
b7b008a2 35#################### DOES ORDERING WORK?
36
51b31bbe 37my $sqlt_object = $schema->{sqlt};
38
39my @keys = keys %{ $sqlt_object->{views} };
b7b008a2 40
51b31bbe 41my @sqlt_sources = sort {
42 $sqlt_object->{views}->{$a}->{order}
43 cmp $sqlt_object->{views}->{$b}->{order}
44} @keys;
b7b008a2 45
51b31bbe 46my @expected
47 = qw/a_name_artists track_number_fives year_2010_cds ab_name_artists year_2010_cds_with_many_tracks aba_name_artists aba_name_artists_and_2010_cds_with_many_tracks/;
2446dc59 48
51b31bbe 49is_deeply( \@expected, \@sqlt_sources,
8a8525be 50 "SQLT view order triumphantly matches our order." );
bf5c3a3f 51
339f7f5d 52#################### AND WHAT ABOUT USING THE SCHEMA?
53
8a8525be 54lives_ok( sub { $schema->resultset($_)->next }, "Query on $_ succeeds" )
55 for grep {
56 $schema->resultset($_)
57 ->result_source->isa('DBIx::Class::ResultSource::View')
58 } @{ [ $schema->sources ] };
339f7f5d 59
51b31bbe 60#################### AND WHAT ABOUT A BAD DEPS CHAIN IN A VIEW?
61
62my $schema2
63 = ViewDepsBad->connect( 'dbi:SQLite::memory:', { quote_char => '"', } );
64ok( $schema2, 'Connected to ViewDepsBad schema OK' );
65
66#################### DEPLOY2
67
68$schema2->deploy( { add_drop_table => 1 } );
69
70#################### DOES ORDERING WORK 2?
71
72my $sqlt_object2 = $schema2->{sqlt};
73
74my @keys2 = keys %{ $sqlt_object->{views} };
75
76my @sqlt_sources2 = sort {
77 $sqlt_object->{views}->{$a}->{order}
78 cmp $sqlt_object->{views}->{$b}->{order}
79} @keys2;
80
81my @expected2
82 = qw/a_name_artists track_number_fives year_2010_cds ab_name_artists year_2010_cds_with_many_tracks aba_name_artists aba_name_artists_and_2010_cds_with_many_tracks/;
83
84is_deeply( \@expected2, \@sqlt_sources2,
85 "SQLT view order triumphantly matches our order." );
86
87#################### AND WHAT ABOUT USING THE SCHEMA2?
88
89lives_ok( sub { $schema2->resultset($_)->next }, "Query on $_ succeeds" )
90 for grep {
91 $schema2->resultset($_)
92 ->result_source->isa('DBIx::Class::ResultSource::View')
93 } grep { !/AbaNameArtistsAnd2010CDsWithManyTracks/ }
94 @{ [ $schema2->sources ] };
95
96dies_ok(
97 sub {
98 $schema2->resultset('AbaNameArtistsAnd2010CDsWithManyTracks')->next;
99 },
c418c5cc 100 "Query on AbaNameArtistsAnd2010CDsWithManyTracks dies, because of incorrect deploy_depends_on in AbaNameArtists"
51b31bbe 101);
102
c418c5cc 103throws_ok {
104 $schema2->resultset('AbaNameArtistsAnd2010CDsWithManyTracks')->next;
105}
106qr/no such table: aba_name_artists_and_2010_cds_with_many_tracks/,
107 "Query on AbaNameArtistsAnd2010CDsWithManyTracks throws, because the table does not exist";
108
6ebf5cbb 109done_testing;