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