X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fmulti_create%2Fexisting_in_chain.t;h=292dd6b7c4a7adca3885fd3fc7165592bc8e1d8d;hb=97e130fa48aca5a1255b7014b4cbcb0c30c95328;hp=c4464a810763e250f2f00d2d3ba87ecac20019ca;hpb=9aa34b292cf1626113e60810d52e50798f87c806;p=dbsrgits%2FDBIx-Class.git diff --git a/t/multi_create/existing_in_chain.t b/t/multi_create/existing_in_chain.t index c4464a8..292dd6b 100644 --- a/t/multi_create/existing_in_chain.t +++ b/t/multi_create/existing_in_chain.t @@ -6,36 +6,57 @@ use Test::Exception; use lib qw(t/lib); use DBICTest; -plan 'no_plan'; - my $schema = DBICTest->init_schema(); +# For fully intuitive multicreate any relationships in a chain +# that do not exist for one reason or another should be created, +# even if the preceeding relationship already exists. +# +# To get this to work a minor rewrite of find() is necessary, and +# more importantly some sort of recursive_insert() call needs to +# be available. The way things will work then is: +# *) while traversing the hierarchy code calls find_or_create() +# *) this in turn calls find(%\nested_dataset) +# *) this should return not only the existing object, but must +# also attach all non-existing (in fact maybe existing) related +# bits of data to it, with in_storage => 0 +# *) then before returning the result of the succesful find(), we +# simply call $obj->recursive_insert and all is dandy +# +# Since this will not be a very clean solution, todoifying for the +# time being until an actual need arises +# +# ribasushi + +my $TODO_msg = "See comment at top of @{[ __FILE__ ]} for discussion of the TODO"; + { my $counts; $counts->{$_} = $schema->resultset($_)->count for qw/Track CD Genre/; - lives_ok (sub { - my $existing_nogen_cd = $schema->resultset('CD')->search ( - { 'genre.genreid' => undef }, - { join => 'genre' }, - )->first; - - $schema->resultset('Track')->create ({ - title => 'Sugar-coated', - cd => { - title => $existing_nogen_cd->title, - genre => { - name => 'sugar genre', - } + my $existing_nogen_cd = $schema->resultset('CD')->search ( + { 'genre.genreid' => undef }, + { join => 'genre' }, + )->first; + + $schema->resultset('Track')->create ({ + title => 'Sugar-coated', + cd => { + title => $existing_nogen_cd->title, + genre => { + name => 'sugar genre', } - }); + } + }); - is ($schema->resultset('Track')->count, $counts->{Track} + 1, '1 new track'); - is ($schema->resultset('CD')->count, $counts->{CD}, 'No new cds'); - is ($schema->resultset('Genre')->count, $counts->{Genre} + 1, '1 new genre'); + is ($schema->resultset('Track')->count, $counts->{Track} + 1, '1 new track'); + is ($schema->resultset('CD')->count, $counts->{CD}, 'No new cds'); + TODO: { + todo_skip $TODO_msg, 1; + is ($schema->resultset('Genre')->count, $counts->{Genre} + 1, '1 new genre'); is ($existing_nogen_cd->genre->title, 'sugar genre', 'Correct genre assigned to CD'); - }); + } } { @@ -70,6 +91,8 @@ my $schema = DBICTest->init_schema(); is ($schema->resultset('Artist')->count, $counts->{Artist}, 'No new artists'); is ($schema->resultset('Producer')->count, $counts->{Producer} + 1, '1 new producers'); + + local $TODO = $TODO_msg; is ($schema->resultset('CD')->count, $counts->{CD} + 2, '2 new cds'); is ($producer->cds->count, 2, 'CDs assigned to correct producer'); @@ -78,7 +101,7 @@ my $schema = DBICTest->init_schema(); [ qw/queen1 queen2/ ], 'Correct cd names', ); - }); + }, 'create() did not throw'); } -1; +done_testing;