0a44fb54947af64b7d2a8fd6315d67439d075378
[dbsrgits/DBIx-Class.git] / t / cdbi / 24-meta_info.t
1 use strict;
2 use Test::More;
3 use Test::Warn;
4
5 use lib 't/cdbi/testlib';
6 use DBIC::Test::SQLite (); # this will issue the necessary SKIPs on missing reqs
7
8 eval { require Time::Piece }
9   or plan skip_all => 'Time::Piece required for this test';
10
11 package Temp::DBI;
12 use base qw(DBIx::Class::CDBICompat);
13 Temp::DBI->columns(All => qw(id date));
14
15 my $strptime_inflate = sub {
16     Time::Piece->strptime(shift, "%Y-%m-%d")
17 };
18 Temp::DBI->has_a(
19     date => 'Time::Piece',
20     inflate => $strptime_inflate
21 );
22
23
24 package Temp::Person;
25 use base 'Temp::DBI';
26 Temp::Person->table('people');
27 Temp::Person->columns(Info => qw(name pet));
28 Temp::Person->has_a( pet => 'Temp::Pet' );
29
30 package Temp::Pet;
31 use base 'Temp::DBI';
32 Temp::Pet->table('pets');
33 Temp::Pet->columns(Info => qw(name));
34 Temp::Pet->has_many(owners => 'Temp::Person');
35
36 package 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' );
59
60     is_deeply $owners->args, {
61         foreign_key     => 'pet',
62         mapping         => [],
63     };
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';
71     is $date->args->{inflate},  $strptime_inflate;
72 }
73
74 done_testing;