Merge the relationship resolution rework
[dbsrgits/DBIx-Class.git] / t / cdbi / 24-meta_info.t
CommitLineData
c0329273 1BEGIN { do "./t/lib/ANFANG.pm" or die ( $@ || $! ) }
83eef562 2use DBIx::Class::Optional::Dependencies -skip_all_without => qw( cdbicompat Time::Piece>=0 );
3
a9c8094b 4use strict;
4a233f30 5use warnings;
83eef562 6
03dc7a51 7use Test::More;
a9c8094b 8use Test::Warn;
9
10package Temp::DBI;
11use base qw(DBIx::Class::CDBICompat);
12Temp::DBI->columns(All => qw(id date));
1097f5e4 13
8273e845 14my $strptime_inflate = sub {
15 Time::Piece->strptime(shift, "%Y-%m-%d")
1097f5e4 16};
17Temp::DBI->has_a(
18 date => 'Time::Piece',
19 inflate => $strptime_inflate
20);
a9c8094b 21
22
23package Temp::Person;
24use base 'Temp::DBI';
25Temp::Person->table('people');
26Temp::Person->columns(Info => qw(name pet));
27Temp::Person->has_a( pet => 'Temp::Pet' );
28
29package Temp::Pet;
30use base 'Temp::DBI';
31Temp::Pet->table('pets');
32Temp::Pet->columns(Info => qw(name));
33Temp::Pet->has_many(owners => 'Temp::Person');
34
35package 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' );
a9c8094b 58
1097f5e4 59 is_deeply $owners->args, {
60 foreign_key => 'pet',
61 mapping => [],
62 };
a9c8094b 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';
1097f5e4 70 is $date->args->{inflate}, $strptime_inflate;
a9c8094b 71}
d9bd5195 72
73done_testing;