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