Commit | Line | Data |
6ebf5cbb |
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); |
6ebf5cbb |
9 | use ViewDeps; |
51b31bbe |
10 | use ViewDepsBad; |
6ebf5cbb |
11 | |
12 | BEGIN { |
13 | use_ok('DBIx::Class::ResultSource::View'); |
14 | } |
15 | |
b7b008a2 |
16 | #################### SANITY |
d40f513f |
17 | |
51b31bbe |
18 | my $view = DBIx::Class::ResultSource::View->new; |
66fb15b6 |
19 | |
9efcc79f |
20 | isa_ok( $view, 'DBIx::Class::ResultSource', 'A new view' ); |
21 | isa_ok( $view, 'DBIx::Class', 'A new view also' ); |
6ebf5cbb |
22 | |
e55d9d89 |
23 | can_ok( $view, $_ ) for qw/new from deploy_depends_on/; |
6ebf5cbb |
24 | |
b7b008a2 |
25 | #################### DEPS |
26 | |
8a8525be |
27 | my $schema |
28 | = ViewDeps->connect( 'dbi:SQLite::memory:', { quote_char => '"', } ); |
1e70d9dc |
29 | ok( $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 |
37 | my $sqlt_object = $schema->{sqlt}; |
38 | |
39 | my @keys = keys %{ $sqlt_object->{views} }; |
b7b008a2 |
40 | |
51b31bbe |
41 | my @sqlt_sources = sort { |
42 | $sqlt_object->{views}->{$a}->{order} |
43 | cmp $sqlt_object->{views}->{$b}->{order} |
44 | } @keys; |
b7b008a2 |
45 | |
51b31bbe |
46 | my @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 |
49 | is_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 |
54 | lives_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 | |
62 | my $schema2 |
63 | = ViewDepsBad->connect( 'dbi:SQLite::memory:', { quote_char => '"', } ); |
64 | ok( $schema2, 'Connected to ViewDepsBad schema OK' ); |
65 | |
66 | #################### DEPLOY2 |
67 | |
68 | $schema2->deploy( { add_drop_table => 1 } ); |
69 | |
70 | #################### DOES ORDERING WORK 2? |
71 | |
72 | my $sqlt_object2 = $schema2->{sqlt}; |
73 | |
74 | my @keys2 = keys %{ $sqlt_object->{views} }; |
75 | |
76 | my @sqlt_sources2 = sort { |
77 | $sqlt_object->{views}->{$a}->{order} |
78 | cmp $sqlt_object->{views}->{$b}->{order} |
79 | } @keys2; |
80 | |
81 | my @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 | |
84 | is_deeply( \@expected2, \@sqlt_sources2, |
85 | "SQLT view order triumphantly matches our order." ); |
86 | |
87 | #################### AND WHAT ABOUT USING THE SCHEMA2? |
88 | |
89 | lives_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 | |
96 | dies_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 |
103 | throws_ok { |
104 | $schema2->resultset('AbaNameArtistsAnd2010CDsWithManyTracks')->next; |
105 | } |
106 | qr/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 |
109 | done_testing; |