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