Merge branch 'master' into topic/constructor_rewrite
[dbsrgits/DBIx-Class.git] / t / cdbi / 24-meta_info.t
CommitLineData
a9c8094b 1use strict;
03dc7a51 2use Test::More;
a9c8094b 3use Test::Warn;
4
d9bd5195 5use lib 't/cdbi/testlib';
6use DBIC::Test::SQLite (); # this will issue the necessary SKIPs on missing reqs
7
8f82b042 8eval { require Time::Piece }
9 or plan skip_all => 'Time::Piece required for this test';
10
a9c8094b 11package Temp::DBI;
12use base qw(DBIx::Class::CDBICompat);
13Temp::DBI->columns(All => qw(id date));
1097f5e4 14
8273e845 15my $strptime_inflate = sub {
16 Time::Piece->strptime(shift, "%Y-%m-%d")
1097f5e4 17};
18Temp::DBI->has_a(
19 date => 'Time::Piece',
20 inflate => $strptime_inflate
21);
a9c8094b 22
23
24package Temp::Person;
25use base 'Temp::DBI';
26Temp::Person->table('people');
27Temp::Person->columns(Info => qw(name pet));
28Temp::Person->has_a( pet => 'Temp::Pet' );
29
30package Temp::Pet;
31use base 'Temp::DBI';
32Temp::Pet->table('pets');
33Temp::Pet->columns(Info => qw(name));
34Temp::Pet->has_many(owners => 'Temp::Person');
35
36package main;
37
38{
39 my $pn_meta = Temp::Person->meta_info('has_a');
40 is_deeply [sort keys %$pn_meta], [qw/date pet/], "Person has Date and Pet";
41}
42
43{
44 my $pt_meta = Temp::Pet->meta_info;
45 is_deeply [keys %{$pt_meta->{has_a}}], [qw/date/], "Pet has Date";
46 is_deeply [keys %{$pt_meta->{has_many}}], [qw/owners/], "And owners";
47}
48
49{
50 my $pet = Temp::Person->meta_info( has_a => 'pet' );
51 is $pet->class, 'Temp::Person';
52 is $pet->foreign_class, 'Temp::Pet';
53 is $pet->accessor, 'pet';
54 is $pet->name, 'has_a';
55}
56
57{
58 my $owners = Temp::Pet->meta_info( has_many => 'owners' );
a9c8094b 59
1097f5e4 60 is_deeply $owners->args, {
61 foreign_key => 'pet',
62 mapping => [],
63 };
a9c8094b 64}
65
66{
67 my $date = Temp::Pet->meta_info( has_a => 'date' );
68 is $date->class, 'Temp::DBI';
69 is $date->foreign_class, 'Time::Piece';
70 is $date->accessor, 'date';
1097f5e4 71 is $date->args->{inflate}, $strptime_inflate;
a9c8094b 72}
d9bd5195 73
74done_testing;