X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Finflate%2Fcore.t;h=3b105cecb40c38aa9ff093dcc5c35662f0eda4ed;hb=68de943862f06cabd397d2e74d12cd9cdc999779;hp=b98801ef4f1ffc638b97dbd2018e0d4bd85aa31e;hpb=794b796ffd739a4fcf27285c5b52c5a365fe0f19;p=dbsrgits%2FDBIx-Class.git diff --git a/t/inflate/core.t b/t/inflate/core.t index b98801e..3b105ce 100644 --- a/t/inflate/core.t +++ b/t/inflate/core.t @@ -8,16 +8,18 @@ use DBICTest; my $schema = DBICTest->init_schema(); -eval { require DateTime }; -plan skip_all => "Need DateTime for inflation tests" if $@; +plan skip_all => 'Inflation tests need ' . DBIx::Class::Optional::Dependencies->req_missing_for ('test_dt') + unless DBIx::Class::Optional::Dependencies->req_ok_for ('test_dt'); $schema->class('CD') ->inflate_column( 'year', { inflate => sub { DateTime->new( year => shift ) }, deflate => sub { shift->year } } ); +my $rs = $schema->resultset('CD'); + # inflation test -my $cd = $schema->resultset("CD")->find(3); +my $cd = $rs->find(3); is( ref($cd->year), 'DateTime', 'year is a DateTime, ok' ); @@ -25,8 +27,10 @@ is( $cd->year->year, 1997, 'inflated year ok' ); is( $cd->year->month, 1, 'inflated month ok' ); -eval { $cd->year(\'year +1'); }; -ok(!$@, 'updated year using a scalarref'); +lives_ok ( + sub { $cd->year(\'year +1') }, + 'updated year using a scalarref' +); $cd->update(); $cd->discard_changes(); @@ -45,59 +49,63 @@ my $now = DateTime->now; $cd->year( $now ); $cd->update; -$cd = $schema->resultset("CD")->find(3); +$cd = $rs->find(3); is( $cd->year->year, $now->year, 'deflate ok' ); # set_inflated_column test -eval { $cd->set_inflated_column('year', $now) }; -ok(!$@, 'set_inflated_column with DateTime object'); +lives_ok ( + sub { $cd->set_inflated_column('year', $now) }, + 'set_inflated_column with DateTime object' +); $cd->update; -$cd = $schema->resultset("CD")->find(3); +$cd = $rs->find(3); is( $cd->year->year, $now->year, 'deflate ok' ); -$cd = $schema->resultset("CD")->find(3); +$cd = $rs->find(3); my $before_year = $cd->year->year; -eval { $cd->set_inflated_column('year', \'year + 1') }; -ok(!$@, 'set_inflated_column to "year + 1"'); +lives_ok ( + sub { $cd->set_inflated_column('year', \'year + 1') }, + 'set_inflated_column to "year + 1"', +); $cd->update; -TODO: { - local $TODO = 'this was left in without a TODO - should it work?'; - - lives_ok (sub { - $cd->store_inflated_column('year', \'year + 1'); - is_deeply( $cd->year, \'year + 1', 'deflate ok' ); - }, 'store_inflated_column to "year + 1"'); -} +$cd->store_inflated_column('year', \'year + 1'); +is_deeply( $cd->year, \'year + 1', 'scalarref deflate passthrough ok' ); -$cd = $schema->resultset("CD")->find(3); +$cd = $rs->find(3); is( $cd->year->year, $before_year+1, 'deflate ok' ); # store_inflated_column test -$cd = $schema->resultset("CD")->find(3); -eval { $cd->store_inflated_column('year', $now) }; -ok(!$@, 'store_inflated_column with DateTime object'); +$cd = $rs->find(3); +lives_ok ( + sub { $cd->store_inflated_column('year', $now) }, + 'store_inflated_column with DateTime object' +); $cd->update; is( $cd->year->year, $now->year, 'deflate ok' ); # update tests -$cd = $schema->resultset("CD")->find(3); -eval { $cd->update({'year' => $now}) }; -ok(!$@, 'update using DateTime object ok'); +$cd = $rs->find(3); +lives_ok ( + sub { $cd->update({'year' => $now}) }, + 'update using DateTime object ok' +); is($cd->year->year, $now->year, 'deflate ok'); -$cd = $schema->resultset("CD")->find(3); +$cd = $rs->find(3); $before_year = $cd->year->year; -eval { $cd->update({'year' => \'year + 1'}) }; -ok(!$@, 'update using scalarref ok'); +lives_ok ( + sub { $cd->update({'year' => \'year + 1'}) }, + 'update using scalarref ok' +); -$cd = $schema->resultset("CD")->find(3); +$cd = $rs->find(3); is($cd->year->year, $before_year + 1, 'deflate ok'); # discard_changes test -$cd = $schema->resultset("CD")->find(3); +$cd = $rs->find(3); # inflate the year $before_year = $cd->year->year; $cd->update({ year => \'year + 1'}); @@ -107,6 +115,45 @@ is($cd->year->year, $before_year + 1, 'discard_changes clears the inflated value my $copy = $cd->copy({ year => $now, title => "zemoose" }); -isnt( $copy->year->year, $before_year, "copy" ); +is( $copy->year->year, $now->year, "copy" ); + + + +my $artist = $cd->artist; +my $sval = \ '2012'; + +$cd = $rs->create ({ + artist => $artist, + year => $sval, + title => 'create with scalarref', +}); + +is ($cd->year, $sval, 'scalar value retained'); +my $cd2 = $cd->copy ({ title => 'copy with scalar in coldata' }); +is ($cd2->year, $sval, 'copied scalar value retained'); + +$cd->discard_changes; +is ($cd->year->year, 2012, 'infation upon reload'); + +$cd2->discard_changes; +is ($cd2->year->year, 2012, 'infation upon reload of copy'); + + +my $precount = $rs->count; +$cd = $rs->update_or_create ({artist => $artist, title => 'nonexisting update/create test row', year => $sval }); +is ($rs->count, $precount + 1, 'Row created'); + +is ($cd->year, $sval, 'scalar value retained on creating update_or_create'); +$cd->discard_changes; +is ($cd->year->year, 2012, 'infation upon reload'); + +my $sval2 = \ '2013'; + +$cd = $rs->update_or_create ({artist => $artist, title => 'nonexisting update/create test row', year => $sval2 }); +is ($rs->count, $precount + 1, 'No more rows created'); + +is ($cd->year, $sval2, 'scalar value retained on updating update_or_create'); +$cd->discard_changes; +is ($cd->year->year, 2013, 'infation upon reload'); done_testing;