X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Frun%2F01core.tl;h=05e4dd3fd63076f318c855f412c13fb35474d3d8;hb=e6a8b3fc4dc400af1a7ed827eaf9752ec99ad289;hp=68d34aae73629656a63e7917d81b8c5a7bc166d8;hpb=9c2c91ea7f94d7981cd1c8d212a4b04751fcd023;p=dbsrgits%2FDBIx-Class.git diff --git a/t/run/01core.tl b/t/run/01core.tl index 68d34aa..05e4dd3 100644 --- a/t/run/01core.tl +++ b/t/run/01core.tl @@ -1,7 +1,7 @@ sub run_tests { my $schema = shift; -plan tests => 47; +plan tests => 58; # figure out if we've got a version of sqlite that is older than 3.2.6, in # which case COUNT(DISTINCT()) doesn't work @@ -86,8 +86,33 @@ is($new_again->name, 'Man With A Spoon', 'Retrieved correctly'); is($new_again->ID, 'DBICTest::Artist|artist|artistid=4', 'unique object id generated correctly'); +# Test backwards compatibility +{ + my $artist_by_hash = $schema->resultset('Artist')->find(artistid => 4); + is($artist_by_hash->name, 'Man With A Spoon', 'Retrieved correctly'); + is($artist_by_hash->ID, 'DBICTest::Artist|artist|artistid=4', 'unique object id generated correctly'); +} + is($schema->resultset("Artist")->count, 4, 'count ok'); +# test find_or_new +{ + my $existing_obj = $schema->resultset('Artist')->find_or_new({ + artistid => 4, + }); + + is($existing_obj->name, 'Man With A Spoon', 'find_or_new: found existing artist'); + ok($existing_obj->in_storage, 'existing artist is in storage'); + + my $new_obj = $schema->resultset('Artist')->find_or_new({ + artistid => 5, + name => 'find_or_new', + }); + + is($new_obj->name, 'find_or_new', 'find_or_new: instantiated a new artist'); + ok(! $new_obj->in_storage, 'new artist is not in storage'); +} + my $cd = $schema->resultset("CD")->find(1); my %cols = $cd->get_columns; @@ -140,7 +165,7 @@ is($schema->class("Artist")->field_name_for->{name}, 'artist name', 'mk_classdat my $search = [ { 'tags.tag' => 'Cheesy' }, { 'tags.tag' => 'Blue' } ]; -my $or_rs = $schema->resultset("CD")->search($search, { join => 'tags', +my( $or_rs ) = $schema->resultset("CD")->search_rs($search, { join => 'tags', order_by => 'cdid' }); cmp_ok($or_rs->count, '==', 5, 'Search with OR ok'); @@ -200,18 +225,17 @@ ok($schema->storage(), 'Storage available'); is($art->name, 'Test _cond_for_update_delete', 'updated second artist name'); } -#test cascade_delete thru many_many relations -my $art_del = $schema->resultset("Artist")->find({ artistid => 1 }); -$art_del->delete; -cmp_ok( $schema->resultset("CD")->search({artist => 1}), '==', 0, 'Cascading through has_many top level.'); -cmp_ok( $schema->resultset("CD_to_Producer")->search({cd => 1}), '==', 0, 'Cascading through has_many children.'); +# test source_name +{ + # source_name should be set for normal modules + is($schema->source('CD')->source_name, 'CD', 'source_name is set to moniker'); -$schema->source("Artist")->{_columns}{'artistid'} = {}; + # test the result source that sets source_name explictly + ok($schema->source('SourceNameArtists'), 'SourceNameArtists result source exists'); -my $typeinfo = $schema->source("Artist")->column_info('artistid'); -is($typeinfo->{data_type}, 'INTEGER', 'column_info ok'); -$schema->source("Artist")->column_info('artistid'); -ok($schema->source("Artist")->{_columns_info_loaded} == 1, 'Columns info flag set'); + my @artsn = $schema->resultset('SourceNameArtists')->search({}, { order_by => 'name DESC' }); + cmp_ok(@artsn, '==', 4, "Four artists returned"); +} my $newbook = $schema->resultset( 'Bookmark' )->find(1); @@ -221,6 +245,31 @@ my $newlink = $newbook->link; }; ok(!$@, "stringify to false value doesn't cause error"); +# test cascade_delete through many_to_many relations +{ + my $art_del = $schema->resultset("Artist")->find({ artistid => 1 }); + $art_del->delete; + cmp_ok( $schema->resultset("CD")->search({artist => 1}), '==', 0, 'Cascading through has_many top level.'); + cmp_ok( $schema->resultset("CD_to_Producer")->search({cd => 1}), '==', 0, 'Cascading through has_many children.'); +} + +# test column_info +{ + $schema->source("Artist")->{_columns}{'artistid'} = {}; + + my $typeinfo = $schema->source("Artist")->column_info('artistid'); + is($typeinfo->{data_type}, 'INTEGER', 'column_info ok'); + $schema->source("Artist")->column_info('artistid'); + ok($schema->source("Artist")->{_columns_info_loaded} == 1, 'Columns info flag set'); +} + +# test remove_columns +{ + is_deeply([$schema->source('CD')->columns], [qw/cdid artist title year/]); + $schema->source('CD')->remove_columns('year'); + is_deeply([$schema->source('CD')->columns], [qw/cdid artist title/]); +} + } 1;