X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F84serialize.t;h=ffe03687f519dfb534ad7d2e0c11ce811b7ec735;hb=b775fa8e88ff5a798e4b4a198b782c76edd93f6b;hp=55aa74bdb0630e1b4e08a6a5e6c8eebcc57a8af5;hpb=4216833287bb50577b00bd690f33cea88f38fab1;p=dbsrgits%2FDBIx-Class.git diff --git a/t/84serialize.t b/t/84serialize.t index 55aa74b..ffe0368 100644 --- a/t/84serialize.t +++ b/t/84serialize.t @@ -7,9 +7,10 @@ use lib qw(t/lib); use DBICTest; use Storable qw(dclone freeze nfreeze thaw); use Scalar::Util qw/refaddr/; +use Carp; sub ref_ne { - my ($refa, $refb) = map { refaddr $_ or die "$_ is not a reference!" } @_[0,1]; + my ($refa, $refb) = map { refaddr $_ or croak "$_ is not a reference!" } @_[0,1]; cmp_ok ( $refa, '!=', @@ -55,23 +56,37 @@ my %stores = ( return $fire; }, - ($ENV{DBICTEST_MEMCACHED}) - ? do { - require Cache::Memcached; - my $memcached = Cache::Memcached->new( - { servers => [ $ENV{DBICTEST_MEMCACHED} ] } ); - - my $key = 'tmp_dbic_84serialize_memcached_test'; - - ( memcached => sub { - $memcached->set( $key, $_[0], 60 ); - local $DBIx::Class::ResultSourceHandle::thaw_schema = $schema; - return $memcached->get($key); - }); - } : () - , ); +if ($ENV{DBICTEST_MEMCACHED}) { + if (DBIx::Class::Optional::Dependencies->req_ok_for ('test_memcached')) { + my $memcached = Cache::Memcached->new( + { servers => [ $ENV{DBICTEST_MEMCACHED} ] } + ); + + my $key = 'tmp_dbic_84serialize_memcached_test'; + + $stores{memcached} = sub { + $memcached->set( $key, $_[0], 60 ) + or die "Unable to insert into $ENV{DBICTEST_MEMCACHED} - is server running?"; + local $DBIx::Class::ResultSourceHandle::thaw_schema = $schema; + return $memcached->get($key); + }; + } + else { + SKIP: { + skip 'Memcached tests need ' . DBIx::Class::Optional::Dependencies->req_missing_for ('test_memcached'), 1; + } + } +} +else { + SKIP: { + skip 'Set $ENV{DBICTEST_MEMCACHED} to run the memcached serialization tests', 1; + } +} + + + for my $name (keys %stores) { my $store = $stores{$name}; @@ -151,4 +166,42 @@ for my $name (keys %stores) { $schema->storage->debugcb(undef); } +# test schema-less detached thaw +{ + my $artist = $schema->resultset('Artist')->find(1); + + $artist = dclone $artist; + + is( $artist->name, 'Caterwauler McCrae', 'getting column works' ); + + ok( $artist->update, 'Non-dirty update noop' ); + + ok( $artist->name( 'Beeeeeeees' ), 'setting works' ); + + ok( $artist->is_column_changed( 'name' ), 'Column dirtyness works' ); + ok( $artist->is_changed, 'object dirtyness works' ); + + my $rs = $artist->result_source->resultset; + $rs->set_cache([ $artist ]); + + is( $rs->count, 1, 'Synthetic resultset count works' ); + + my $exc = qr/Unable to perform storage-dependent operations with a detached result source.+use \$schema->thaw/; + + throws_ok { $artist->update } + $exc, + 'Correct exception on row op' + ; + + throws_ok { $artist->discard_changes } + $exc, + 'Correct exception on row op' + ; + + throws_ok { $rs->find(1) } + $exc, + 'Correct exception on rs op' + ; +} + done_testing;