Merge the relationship resolution rework
[dbsrgits/DBIx-Class.git] / t / cdbi / 24-meta_info.t
1 BEGIN { do "./t/lib/ANFANG.pm" or die ( $@ || $! ) }
2 use DBIx::Class::Optional::Dependencies -skip_all_without => qw( cdbicompat Time::Piece>=0 );
3
4 use strict;
5 use warnings;
6
7 use Test::More;
8 use Test::Warn;
9
10 package Temp::DBI;
11 use base qw(DBIx::Class::CDBICompat);
12 Temp::DBI->columns(All => qw(id date));
13
14 my $strptime_inflate = sub {
15     Time::Piece->strptime(shift, "%Y-%m-%d")
16 };
17 Temp::DBI->has_a(
18     date => 'Time::Piece',
19     inflate => $strptime_inflate
20 );
21
22
23 package Temp::Person;
24 use base 'Temp::DBI';
25 Temp::Person->table('people');
26 Temp::Person->columns(Info => qw(name pet));
27 Temp::Person->has_a( pet => 'Temp::Pet' );
28
29 package Temp::Pet;
30 use base 'Temp::DBI';
31 Temp::Pet->table('pets');
32 Temp::Pet->columns(Info => qw(name));
33 Temp::Pet->has_many(owners => 'Temp::Person');
34
35 package main;
36
37 {
38     my $pn_meta = Temp::Person->meta_info('has_a');
39     is_deeply [sort keys %$pn_meta], [qw/date pet/], "Person has Date and Pet";
40 }
41
42 {
43     my $pt_meta = Temp::Pet->meta_info;
44     is_deeply [keys %{$pt_meta->{has_a}}], [qw/date/], "Pet has Date";
45     is_deeply [keys %{$pt_meta->{has_many}}], [qw/owners/], "And owners";
46 }
47
48 {
49     my $pet = Temp::Person->meta_info( has_a => 'pet' );
50     is $pet->class,         'Temp::Person';
51     is $pet->foreign_class, 'Temp::Pet';
52     is $pet->accessor,      'pet';
53     is $pet->name,          'has_a';
54 }
55
56 {
57     my $owners = Temp::Pet->meta_info( has_many => 'owners' );
58
59     is_deeply $owners->args, {
60         foreign_key     => 'pet',
61         mapping         => [],
62     };
63 }
64
65 {
66     my $date = Temp::Pet->meta_info( has_a => 'date' );
67     is $date->class,            'Temp::DBI';
68     is $date->foreign_class,    'Time::Piece';
69     is $date->accessor,         'date';
70     is $date->args->{inflate},  $strptime_inflate;
71 }
72
73 done_testing;