handle column accessor collisions with UNIVERSAL methods
[dbsrgits/DBIx-Class-Schema-Loader.git] / t / 45relationships.t
1 use strict;
2 use Test::More tests => 6;
3 use Test::Exception;
4 use lib qw(t/lib);
5 use make_dbictest_db;
6
7 use DBIx::Class::Schema::Loader;
8
9 # test skip_relationships
10 my $regular = schema_with();
11 is( ref($regular->source('Bar')->relationship_info('fooref')), 'HASH',
12     'regularly-made schema has fooref rel',
13   );
14 my $skip_rel = schema_with( skip_relationships => 1 );
15 is_deeply( $skip_rel->source('Bar')->relationship_info('fooref'), undef,
16     'skip_relationships blocks generation of fooref rel',
17   );
18
19
20 # test relationship_attrs
21 throws_ok {
22     schema_with( relationship_attrs => 'laughably invalid!!!' );
23 } qr/relationship_attrs/, 'throws error for invalid relationship_attrs';
24
25
26 {
27     my $nodelete = schema_with( relationship_attrs =>
28                                 {
29                                  all        => { cascade_delete => 0 },
30                                  belongs_to => { cascade_delete => 1 },
31                                 },
32                               );
33
34     my $bars_info   = $nodelete->source('Foo')->relationship_info('bars');
35     #use Data::Dumper;
36     #die Dumper([ $nodelete->source('Foo')->relationships() ]);
37     my $fooref_info = $nodelete->source('Bar')->relationship_info('fooref');
38     is( ref($fooref_info), 'HASH',
39         'fooref rel is present',
40       );
41     is( $bars_info->{attrs}->{cascade_delete}, 0,
42         'relationship_attrs settings seem to be getting through to the generated rels',
43       );
44     is( $fooref_info->{attrs}->{cascade_delete}, 1,
45         'belongs_to in relationship_attrs overrides all def',
46       );
47 }
48
49
50 #### generates a new schema with the given opts every time it's called
51 my $schema_counter = 0;
52 sub schema_with {
53     $schema_counter++;
54     DBIx::Class::Schema::Loader::make_schema_at(
55             'DBICTest::Schema::'.$schema_counter,
56             { naming => 'current', @_ },
57             [ $make_dbictest_db::dsn ],
58     );
59     "DBICTest::Schema::$schema_counter"->clone;
60 }