Massive cleanup of DateTime test dependencies, other interim
[dbsrgits/DBIx-Class.git] / t / cdbi / 24-meta_info.t
1 use strict;
2 use Test::More;
3
4 BEGIN {
5   eval "use DBIx::Class::CDBICompat;use Time::Piece;";
6   plan skip_all => "Time::Piece, Class::Trigger and DBIx::ContextualFetch required: $@"
7     if $@;
8
9   plan tests => 12;
10 }
11
12 use Test::Warn;
13
14 package Temp::DBI;
15 use base qw(DBIx::Class::CDBICompat);
16 Temp::DBI->columns(All => qw(id date));
17
18 my $strptime_inflate = sub { 
19     Time::Piece->strptime(shift, "%Y-%m-%d") 
20 };
21 Temp::DBI->has_a(
22     date => 'Time::Piece',
23     inflate => $strptime_inflate
24 );
25
26
27 package Temp::Person;
28 use base 'Temp::DBI';
29 Temp::Person->table('people');
30 Temp::Person->columns(Info => qw(name pet));
31 Temp::Person->has_a( pet => 'Temp::Pet' );
32
33 package Temp::Pet;
34 use base 'Temp::DBI';
35 Temp::Pet->table('pets');
36 Temp::Pet->columns(Info => qw(name));
37 Temp::Pet->has_many(owners => 'Temp::Person');
38
39 package 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' );
62
63     is_deeply $owners->args, {
64         foreign_key     => 'pet',
65         mapping         => [],
66     };
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';
74     is $date->args->{inflate},  $strptime_inflate;
75 }