Finish ViewDeps: fix a join in test class, put attribs on Parser, add resultset tests...
[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 @sql_files = glob("t/sql/ViewDeps*.sql");
27 for (@sql_files) {
28     ok( unlink($_), "Deleted old SQL $_ OK" );
29 }
30
31 my $schema = ViewDeps->connect( 'dbi:SQLite::memory:',
32     { quote_char => '"', } );
33 ok( $schema, 'Connected to ViewDeps schema OK' );
34
35 my $deps_ref = {
36     map {
37         $schema->resultset($_)->result_source->name =>
38             $schema->resultset($_)->result_source->deploy_depends_on
39         }
40         grep {
41         $schema->resultset($_)
42             ->result_source->isa('DBIx::Class::ResultSource::View')
43         } @{ [ $schema->sources ] }
44 };
45
46 my @sorted_sources =
47     sort {
48         keys %{ $deps_ref->{$a} || {} }
49         <=>
50         keys %{ $deps_ref->{$b} || {} }
51         || $a cmp $b
52     }
53     keys %$deps_ref;
54
55 #################### DEPLOY
56
57 my $ddl_dir = "t/sql";
58 $schema->create_ddl_dir( [ 'PostgreSQL', 'MySQL', 'SQLite' ], 0.1, $ddl_dir );
59
60 ok( -e $_, "$_ was created successfully" ) for @sql_files;
61
62 $schema->deploy( { add_drop_table => 1 } );
63
64 #################### DOES ORDERING WORK?
65
66 my $tr = $schema->{sqlt};
67
68 my @keys = keys %{$tr->{views}};
69
70 my @sqlt_sources = 
71     sort {
72         $tr->{views}->{$a}->{order}
73         cmp
74         $tr->{views}->{$b}->{order}
75     }
76     @keys;
77
78 is_deeply(\@sorted_sources,\@sqlt_sources,"SQLT view order triumphantly matches our order.");
79
80 #################### AND WHAT ABOUT USING THE SCHEMA?
81
82 my $a_name_rs = $schema->resultset('ANameArtists');
83 my $ab_name_rs = $schema->resultset('AbNameArtists');
84 my $aba_name_rs = $schema->resultset('AbaNameArtists');
85 my $aba_name_cds_rs = $schema->resultset('AbaNameArtistsAnd2010CDsWithManyTracks');
86 my $track_five_rs = $schema->resultset('TrackNumberFives');
87 my $year_2010_rs = $schema->resultset('Year2010CDs');
88 my $year_2010_cds_rs = $schema->resultset('Year2010CDsWithManyTracks');
89
90 ok($a_name_rs, "ANameArtists resultset is OK");
91 ok($ab_name_rs, "AbNameArtists resultset is OK");
92 ok($aba_name_rs, "AbaNameArtists resultset is OK");
93 ok($aba_name_cds_rs, "AbaNameArtistsAnd2010CDsWithManyTracks resultset is OK");
94 ok($track_five_rs, "TrackNumberFives resultset is OK");
95 ok($year_2010_rs, "Year2010CDs resultset is OK");
96 ok($year_2010_cds_rs, "Year2010CDsWithManyTracks resultset is OK");
97
98 done_testing;