X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fdelete%2Frelated.t;h=49cd88fa7ee8281eb2ee907d8ece6bcc9c3f4170;hb=97c96475ed1bdd955ba0e6c4f22087ca05c64162;hp=f3c8d9b140f08a3ce5961f9ff19c03cfc8174387;hpb=157fdb0cae2758f6f97dbe33c25f469fea0c777e;p=dbsrgits%2FDBIx-Class.git diff --git a/t/delete/related.t b/t/delete/related.t index f3c8d9b..49cd88f 100644 --- a/t/delete/related.t +++ b/t/delete/related.t @@ -4,37 +4,58 @@ use warnings; use lib qw(t/lib); use DBICTest; -plan tests => 3; +plan tests => 4; my $schema = DBICTest->init_schema(); my $ars = $schema->resultset('Artist'); my $cdrs = $schema->resultset('CD'); +my $cd2pr_rs = $schema->resultset('CD_to_Producer'); # create some custom entries -$ars->create ({ artistid => 9, name => 'dead man walking' }); +$ars->populate ([ + [qw/artistid name/], + [qw/71 a1/], + [qw/72 a2/], + [qw/73 a3/], +]); + $cdrs->populate ([ [qw/cdid artist title year/], - [qw/70 2 delete0 2005/], - [qw/71 3 delete1 2005/], - [qw/72 3 delete2 2005/], - [qw/73 3 delete3 2006/], - [qw/74 3 delete4 2007/], - [qw/75 9 delete5 2008/], + [qw/70 71 delete0 2005/], + [qw/71 72 delete1 2005/], + [qw/72 72 delete2 2005/], + [qw/73 72 delete3 2006/], + [qw/74 72 delete4 2007/], + [qw/75 73 delete5 2008/], ]); +my $prod = $schema->resultset('Producer')->create ({ name => 'deleter' }); +my $prod_cd = $cdrs->find (70); +my $cd2pr = $cd2pr_rs->create ({ + producer => $prod, + cd => $prod_cd, +}); + my $total_cds = $cdrs->count; # test that delete_related w/o conditions deletes all related records only -$ars->find (9)->delete_related ('cds'); +$ars->search ({name => 'a3' })->search_related ('cds')->delete; is ($cdrs->count, $total_cds -= 1, 'related delete ok'); -my $a3_cds = $ars->find(3)->cds; +my $a2_cds = $ars->search ({ name => 'a2' })->search_related ('cds'); # test that related deletion w/conditions deletes just the matched related records only -$a3_cds->search ({ year => 2005 })->delete; +$a2_cds->search ({ year => 2005 })->delete; is ($cdrs->count, $total_cds -= 2, 'related + condition delete ok'); # test that related deletion with limit condition works -$a3_cds->search ({}, { rows => 1})->delete; +$a2_cds->search ({}, { rows => 1})->delete; is ($cdrs->count, $total_cds -= 1, 'related + limit delete ok'); + +TODO: { + local $TODO = 'delete_related is based on search_related which is based on search which does not understand object arguments'; + my $cd2pr_count = $cd2pr_rs->count; + $prod_cd->delete_related('cd_to_producer', { producer => $prod } ); + is ($cd2pr_rs->count, $cd2pr_count -= 1, 'm2m link deleted succesfully'); +}