X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F96multi_create.t;h=356aae65a9d33c55d51bcce5ac4b21663ddd96dd;hb=2581038c9cf626bdf53a518429a1fe3ecbf42603;hp=4596cdac49a35d1f4e2d09ddf01669c4753a7a43;hpb=29cfcca227a84f62f8d11a7fc582430c84050d20;p=dbsrgits%2FDBIx-Class.git diff --git a/t/96multi_create.t b/t/96multi_create.t index 4596cda..356aae6 100644 --- a/t/96multi_create.t +++ b/t/96multi_create.t @@ -51,6 +51,23 @@ my $newartist2 = $schema->resultset('Artist')->find_or_create({ name => 'Fred 3' is($newartist2->name, 'Fred 3', 'Created new artist with cds via find_or_create'); +my $artist2 = $schema->resultset('Artist')->create({ artistid => 1000, + name => 'Fred 3', + cds => [ + { artist => 1000, + title => 'Music to code by', + year => 2007, + }, + ], + cds_unordered => [ + { artist => 1000, + title => 'Music to code by', + year => 2007, + }, + ] + }); + +is($artist2->in_storage, 1, 'artist with duplicate rels inserted okay'); CREATE_RELATED1 :{ @@ -177,3 +194,26 @@ is($cd->artist->id, 1, 'rel okay'); my $new_cd = $schema->resultset("CD")->create($new_cd_hashref); is($new_cd->artist->id, 17, 'new id retained okay'); + + +# Test find or create related functionality +my $new_artist = $schema->resultset("Artist")->create({ artistid => 18, name => 'larry' }); + +eval { + $schema->resultset("CD")->create({ + cdid => 28, + title => 'Boogie Wiggle', + year => '2007', + artist => { artistid => 18, name => 'larry' } + }); +}; +is($@, '', 'new cd created without clash on related artist'); + +# Make sure exceptions from errors in created rels propogate +eval { + my $t = $schema->resultset("Track")->new({}); + $t->cd($t->new_related('cd', { artist => undef } ) ); + $t->{_rel_in_storage} = 0; + $t->insert; +}; +like($@, qr/cd.artist may not be NULL/, "Exception propogated properly");