Commit | Line | Data |
70350518 |
1 | use strict; |
794b796f |
2 | use warnings; |
70350518 |
3 | |
4 | use Test::More; |
794b796f |
5 | use Test::Exception; |
70350518 |
6 | use lib qw(t/lib); |
7 | use DBICTest; |
8 | |
a47e1233 |
9 | my $schema = DBICTest->init_schema(); |
0567538f |
10 | |
11 | eval { require DateTime }; |
12 | plan skip_all => "Need DateTime for inflation tests" if $@; |
13 | |
c6e0ee83 |
14 | $schema->class('CD') ->inflate_column( 'year', |
0567538f |
15 | { inflate => sub { DateTime->new( year => shift ) }, |
16 | deflate => sub { shift->year } } |
17 | ); |
18 | |
19 | # inflation test |
f9db5527 |
20 | my $cd = $schema->resultset("CD")->find(3); |
0567538f |
21 | |
22 | is( ref($cd->year), 'DateTime', 'year is a DateTime, ok' ); |
23 | |
89279e9d |
24 | is( $cd->year->year, 1997, 'inflated year ok' ); |
25 | |
0567538f |
26 | is( $cd->year->month, 1, 'inflated month ok' ); |
27 | |
e81a6241 |
28 | eval { $cd->year(\'year +1'); }; |
29 | ok(!$@, 'updated year using a scalarref'); |
30 | $cd->update(); |
31 | $cd->discard_changes(); |
32 | |
33 | is( ref($cd->year), 'DateTime', 'year is still a DateTime, ok' ); |
34 | |
35 | is( $cd->year->year, 1998, 'updated year, bypassing inflation' ); |
36 | |
37 | is( $cd->year->month, 1, 'month is still 1' ); |
38 | |
39 | # get_inflated_column test |
40 | |
41 | is( ref($cd->get_inflated_column('year')), 'DateTime', 'get_inflated_column produces a DateTime'); |
42 | |
0567538f |
43 | # deflate test |
44 | my $now = DateTime->now; |
45 | $cd->year( $now ); |
46 | $cd->update; |
47 | |
ad5d0ee9 |
48 | $cd = $schema->resultset("CD")->find(3); |
0567538f |
49 | is( $cd->year->year, $now->year, 'deflate ok' ); |
50 | |
e81a6241 |
51 | # set_inflated_column test |
52 | eval { $cd->set_inflated_column('year', $now) }; |
53 | ok(!$@, 'set_inflated_column with DateTime object'); |
54 | $cd->update; |
55 | |
794b796f |
56 | $cd = $schema->resultset("CD")->find(3); |
e81a6241 |
57 | is( $cd->year->year, $now->year, 'deflate ok' ); |
58 | |
794b796f |
59 | $cd = $schema->resultset("CD")->find(3); |
ad5d0ee9 |
60 | my $before_year = $cd->year->year; |
e81a6241 |
61 | eval { $cd->set_inflated_column('year', \'year + 1') }; |
e81a6241 |
62 | ok(!$@, 'set_inflated_column to "year + 1"'); |
63 | $cd->update; |
e81a6241 |
64 | |
c6e0ee83 |
65 | TODO: { |
66 | local $TODO = 'this was left in without a TODO - should it work?'; |
67 | |
794b796f |
68 | lives_ok (sub { |
c6e0ee83 |
69 | $cd->store_inflated_column('year', \'year + 1'); |
70 | is_deeply( $cd->year, \'year + 1', 'deflate ok' ); |
794b796f |
71 | }, 'store_inflated_column to "year + 1"'); |
c6e0ee83 |
72 | } |
73 | |
794b796f |
74 | $cd = $schema->resultset("CD")->find(3); |
ad5d0ee9 |
75 | is( $cd->year->year, $before_year+1, 'deflate ok' ); |
e81a6241 |
76 | |
77 | # store_inflated_column test |
794b796f |
78 | $cd = $schema->resultset("CD")->find(3); |
e81a6241 |
79 | eval { $cd->store_inflated_column('year', $now) }; |
80 | ok(!$@, 'store_inflated_column with DateTime object'); |
81 | $cd->update; |
82 | |
83 | is( $cd->year->year, $now->year, 'deflate ok' ); |
84 | |
ad5d0ee9 |
85 | # update tests |
794b796f |
86 | $cd = $schema->resultset("CD")->find(3); |
ad5d0ee9 |
87 | eval { $cd->update({'year' => $now}) }; |
88 | ok(!$@, 'update using DateTime object ok'); |
89 | is($cd->year->year, $now->year, 'deflate ok'); |
90 | |
794b796f |
91 | $cd = $schema->resultset("CD")->find(3); |
ad5d0ee9 |
92 | $before_year = $cd->year->year; |
93 | eval { $cd->update({'year' => \'year + 1'}) }; |
94 | ok(!$@, 'update using scalarref ok'); |
95 | |
794b796f |
96 | $cd = $schema->resultset("CD")->find(3); |
ad5d0ee9 |
97 | is($cd->year->year, $before_year + 1, 'deflate ok'); |
98 | |
99 | # discard_changes test |
794b796f |
100 | $cd = $schema->resultset("CD")->find(3); |
ad5d0ee9 |
101 | # inflate the year |
102 | $before_year = $cd->year->year; |
103 | $cd->update({ year => \'year + 1'}); |
104 | $cd->discard_changes; |
105 | |
106 | is($cd->year->year, $before_year + 1, 'discard_changes clears the inflated value'); |
07d4fb20 |
107 | |
108 | my $copy = $cd->copy({ year => $now, title => "zemoose" }); |
109 | |
110 | isnt( $copy->year->year, $before_year, "copy" ); |
794b796f |
111 | |
112 | done_testing; |