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