X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Frelationship%2Fcustom.t;h=5bc52d4fea84cf2b8c1616f6ba36c6d940ede9e9;hb=bad0b73b680b041ca8ce677365ca1f6387232e61;hp=899b244a1864f41f3ab7cf892e490c87625113af;hpb=209a20649200c6885697ced98d8499022c2e9eeb;p=dbsrgits%2FDBIx-Class.git diff --git a/t/relationship/custom.t b/t/relationship/custom.t index 899b244..5bc52d4 100644 --- a/t/relationship/custom.t +++ b/t/relationship/custom.t @@ -273,21 +273,43 @@ is_deeply ( 'Prefetched singles in proper order' ); -# test set_from_related with a belongs_to custom condition -my $cd = $schema->resultset("CD")->find(4); -$artist = $cd->search_related('artist'); -my $track = $schema->resultset("Track")->create( { - trackid => 1, - cd => 3, - position => 99, - title => 'Some Track' -} ); -$track->set_from_related( cd_cref_cond => $cd ); -is ($track->get_column('cd'), 4, 'set from related via coderef cond'); -is_deeply ( - { $track->cd->get_columns }, - { $cd->get_columns }, +# test set_from_related/find_related with a belongs_to custom condition +my $preexisting_cd = $schema->resultset('CD')->find(1); + +my $cd_single_track = $schema->resultset('CD')->create({ + artist => $artist, + title => 'one one one', + year => 2001, + tracks => [{ title => 'uno uno uno' }] +}); + +my $single_track = $cd_single_track->tracks->next; + +is_deeply + { $schema->resultset('Track')->find({ cd_cref_cond => { cdid => $cd_single_track->id } })->get_columns }, + { $single_track->get_columns }, + 'Proper find with related via coderef cond', +; + +$single_track->set_from_related( cd_cref_cond => undef ); +ok $single_track->is_column_changed('cd'); +is $single_track->get_column('cd'), undef, 'UNset from related via coderef cond'; +is $single_track->cd, undef, 'UNset related object via coderef cond'; + +$single_track->discard_changes; + +$single_track->set_from_related( cd_cref_cond => $preexisting_cd ); +ok $single_track->is_column_changed('cd'); +is $single_track->get_column('cd'), 1, 'set from related via coderef cond'; +is_deeply + { $single_track->cd->get_columns }, + { $preexisting_cd->get_columns }, 'set from related via coderef cond inflates properly', -); +; + +throws_ok { + local $schema->source('Track')->relationship_info('cd_cref_cond')->{cond} = sub { 1,2,3 }; + $schema->resultset('Track')->find({ cd_cref_cond => {} }); +} qr/\QA custom condition coderef can return at most 2 conditions, but relationship 'cd_cref_cond' on source 'Track' returned extra values: 3/; done_testing;