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