Add import-time-skip support to OptDeps, switch most tests over to that
[dbsrgits/DBIx-Class.git] / t / inflate / core.t
CommitLineData
cb551b07 1use DBIx::Class::Optional::Dependencies -skip_all_without => 'test_dt';
2
70350518 3use strict;
794b796f 4use warnings;
70350518 5
6use Test::More;
794b796f 7use Test::Exception;
70350518 8use lib qw(t/lib);
9use DBICTest;
10
a47e1233 11my $schema = DBICTest->init_schema();
0567538f 12
c6e0ee83 13$schema->class('CD') ->inflate_column( 'year',
0567538f 14 { inflate => sub { DateTime->new( year => shift ) },
15 deflate => sub { shift->year } }
16);
17
f92b166e 18my $rs = $schema->resultset('CD');
19
0567538f 20# inflation test
f92b166e 21my $cd = $rs->find(3);
0567538f 22
23is( ref($cd->year), 'DateTime', 'year is a DateTime, ok' );
24
89279e9d 25is( $cd->year->year, 1997, 'inflated year ok' );
26
0567538f 27is( $cd->year->month, 1, 'inflated month ok' );
28
68de9438 29lives_ok (
30 sub { $cd->year(\'year +1') },
31 'updated year using a scalarref'
32);
e81a6241 33$cd->update();
34$cd->discard_changes();
35
36is( ref($cd->year), 'DateTime', 'year is still a DateTime, ok' );
37
38is( $cd->year->year, 1998, 'updated year, bypassing inflation' );
39
8273e845 40is( $cd->year->month, 1, 'month is still 1' );
e81a6241 41
42# get_inflated_column test
43
44is( ref($cd->get_inflated_column('year')), 'DateTime', 'get_inflated_column produces a DateTime');
45
0567538f 46# deflate test
47my $now = DateTime->now;
48$cd->year( $now );
49$cd->update;
50
f92b166e 51$cd = $rs->find(3);
0567538f 52is( $cd->year->year, $now->year, 'deflate ok' );
53
e81a6241 54# set_inflated_column test
68de9438 55lives_ok (
56 sub { $cd->set_inflated_column('year', $now) },
57 'set_inflated_column with DateTime object'
58);
e81a6241 59$cd->update;
60
f92b166e 61$cd = $rs->find(3);
e81a6241 62is( $cd->year->year, $now->year, 'deflate ok' );
63
f92b166e 64$cd = $rs->find(3);
ad5d0ee9 65my $before_year = $cd->year->year;
68de9438 66lives_ok (
67 sub { $cd->set_inflated_column('year', \'year + 1') },
68 'set_inflated_column to "year + 1"',
69);
e81a6241 70$cd->update;
e81a6241 71
7d409be1 72$cd->store_inflated_column('year', \'year + 1');
73is_deeply( $cd->year, \'year + 1', 'scalarref deflate passthrough ok' );
c6e0ee83 74
f92b166e 75$cd = $rs->find(3);
ad5d0ee9 76is( $cd->year->year, $before_year+1, 'deflate ok' );
e81a6241 77
78# store_inflated_column test
f92b166e 79$cd = $rs->find(3);
68de9438 80lives_ok (
81 sub { $cd->store_inflated_column('year', $now) },
82 'store_inflated_column with DateTime object'
83);
e81a6241 84$cd->update;
85
86is( $cd->year->year, $now->year, 'deflate ok' );
87
ad5d0ee9 88# update tests
f92b166e 89$cd = $rs->find(3);
68de9438 90lives_ok (
91 sub { $cd->update({'year' => $now}) },
92 'update using DateTime object ok'
93);
ad5d0ee9 94is($cd->year->year, $now->year, 'deflate ok');
95
f92b166e 96$cd = $rs->find(3);
ad5d0ee9 97$before_year = $cd->year->year;
68de9438 98lives_ok (
99 sub { $cd->update({'year' => \'year + 1'}) },
100 'update using scalarref ok'
101);
ad5d0ee9 102
f92b166e 103$cd = $rs->find(3);
ad5d0ee9 104is($cd->year->year, $before_year + 1, 'deflate ok');
105
106# discard_changes test
f92b166e 107$cd = $rs->find(3);
ad5d0ee9 108# inflate the year
109$before_year = $cd->year->year;
110$cd->update({ year => \'year + 1'});
111$cd->discard_changes;
112
113is($cd->year->year, $before_year + 1, 'discard_changes clears the inflated value');
07d4fb20 114
115my $copy = $cd->copy({ year => $now, title => "zemoose" });
116
f92b166e 117is( $copy->year->year, $now->year, "copy" );
118
119
120
121my $artist = $cd->artist;
122my $sval = \ '2012';
123
124$cd = $rs->create ({
125 artist => $artist,
126 year => $sval,
127 title => 'create with scalarref',
128});
129
130is ($cd->year, $sval, 'scalar value retained');
131my $cd2 = $cd->copy ({ title => 'copy with scalar in coldata' });
132is ($cd2->year, $sval, 'copied scalar value retained');
133
134$cd->discard_changes;
135is ($cd->year->year, 2012, 'infation upon reload');
136
137$cd2->discard_changes;
138is ($cd2->year->year, 2012, 'infation upon reload of copy');
139
140
141my $precount = $rs->count;
142$cd = $rs->update_or_create ({artist => $artist, title => 'nonexisting update/create test row', year => $sval });
143is ($rs->count, $precount + 1, 'Row created');
144
145is ($cd->year, $sval, 'scalar value retained on creating update_or_create');
146$cd->discard_changes;
147is ($cd->year->year, 2012, 'infation upon reload');
148
149my $sval2 = \ '2013';
150
151$cd = $rs->update_or_create ({artist => $artist, title => 'nonexisting update/create test row', year => $sval2 });
152is ($rs->count, $precount + 1, 'No more rows created');
153
154is ($cd->year, $sval2, 'scalar value retained on updating update_or_create');
155$cd->discard_changes;
156is ($cd->year->year, 2013, 'infation upon reload');
794b796f 157
158done_testing;