Massive cleanup of DateTime test dependencies, other interim
[dbsrgits/DBIx-Class.git] / t / cdbi / 24-meta_info.t
CommitLineData
a9c8094b 1use strict;
03dc7a51 2use Test::More;
3
09d46657 4BEGIN {
68de9438 5 eval "use DBIx::Class::CDBICompat;use Time::Piece;";
6 plan skip_all => "Time::Piece, Class::Trigger and DBIx::ContextualFetch required: $@"
40f05175 7 if $@;
03dc7a51 8
40f05175 9 plan tests => 12;
09d46657 10}
11
a9c8094b 12use Test::Warn;
13
14package Temp::DBI;
15use base qw(DBIx::Class::CDBICompat);
16Temp::DBI->columns(All => qw(id date));
1097f5e4 17
18my $strptime_inflate = sub {
19 Time::Piece->strptime(shift, "%Y-%m-%d")
20};
21Temp::DBI->has_a(
22 date => 'Time::Piece',
23 inflate => $strptime_inflate
24);
a9c8094b 25
26
27package Temp::Person;
28use base 'Temp::DBI';
29Temp::Person->table('people');
30Temp::Person->columns(Info => qw(name pet));
31Temp::Person->has_a( pet => 'Temp::Pet' );
32
33package Temp::Pet;
34use base 'Temp::DBI';
35Temp::Pet->table('pets');
36Temp::Pet->columns(Info => qw(name));
37Temp::Pet->has_many(owners => 'Temp::Person');
38
39package main;
40
41{
42 my $pn_meta = Temp::Person->meta_info('has_a');
43 is_deeply [sort keys %$pn_meta], [qw/date pet/], "Person has Date and Pet";
44}
45
46{
47 my $pt_meta = Temp::Pet->meta_info;
48 is_deeply [keys %{$pt_meta->{has_a}}], [qw/date/], "Pet has Date";
49 is_deeply [keys %{$pt_meta->{has_many}}], [qw/owners/], "And owners";
50}
51
52{
53 my $pet = Temp::Person->meta_info( has_a => 'pet' );
54 is $pet->class, 'Temp::Person';
55 is $pet->foreign_class, 'Temp::Pet';
56 is $pet->accessor, 'pet';
57 is $pet->name, 'has_a';
58}
59
60{
61 my $owners = Temp::Pet->meta_info( has_many => 'owners' );
a9c8094b 62
1097f5e4 63 is_deeply $owners->args, {
64 foreign_key => 'pet',
65 mapping => [],
66 };
a9c8094b 67}
68
69{
70 my $date = Temp::Pet->meta_info( has_a => 'date' );
71 is $date->class, 'Temp::DBI';
72 is $date->foreign_class, 'Time::Piece';
73 is $date->accessor, 'date';
1097f5e4 74 is $date->args->{inflate}, $strptime_inflate;
a9c8094b 75}