X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F100populate.t;h=0bd49da3d75f64eafe759080d0c51638e533e595;hb=90cfe42b94a798be8ee5498fd57e2e76adff5156;hp=994524e814cbe13288524a258772533340efe85c;hpb=c0d8cb1fa36945ace1bb09bba48a5e9ee60ddc6e;p=dbsrgits%2FDBIx-Class.git diff --git a/t/100populate.t b/t/100populate.t index 994524e..0bd49da 100644 --- a/t/100populate.t +++ b/t/100populate.t @@ -6,6 +6,7 @@ use Test::Exception; use lib qw(t/lib); use DBICTest; use Path::Class::File (); +use List::Util qw/shuffle/; my $schema = DBICTest->init_schema(); @@ -18,10 +19,10 @@ my $schema = DBICTest->init_schema(); # [ 10000, "ntn" ], my $start_id = 'populateXaaaaaa'; -my $rows = 10; +my $rows = 10_000; my $offset = 3; -$schema->populate('Artist', [ [ qw/artistid name/ ], map { [ ($_ + $offset) => $start_id++ ] } ( 1 .. $rows ) ] ); +$schema->populate('Artist', [ [ qw/artistid name/ ], map { [ ($_ + $offset) => $start_id++ ] } shuffle ( 1 .. $rows ) ] ); is ( $schema->resultset ('Artist')->search ({ name => { -like => 'populateX%' } })->count, $rows, @@ -115,47 +116,46 @@ is($link7->id, 7, 'Link 7 id'); is($link7->url, undef, 'Link 7 url'); is($link7->title, 'gtitle', 'Link 7 title'); -my $rs = $schema->resultset('Artist'); -$rs->delete; +# populate with literals +{ + my $rs = $schema->resultset('Link'); + $rs->delete; -# test _execute_array_empty (insert_bulk with all literal sql) + # test _execute_array_empty (insert_bulk with all literal sql) -$rs->populate([ + $rs->populate([ (+{ - name => \"'DT'", - rank => \500, - charfield => \"'mtfnpy'", + url => \"'cpan.org'", + title => \"'The ''best of'' cpan'", }) x 5 -]); + ]); -is((grep { - $_->name eq 'DT' && - $_->rank == 500 && - $_->charfield eq 'mtfnpy' -} $rs->all), 5, 'populate with all literal SQL'); + is((grep { + $_->url eq 'cpan.org' && + $_->title eq "The 'best of' cpan", + } $rs->all), 5, 'populate with all literal SQL'); -$rs->delete; + $rs->delete; -# test mixed binds with literal sql + # test mixed binds with literal sql -$rs->populate([ + $rs->populate([ (+{ - name => \"'DT'", - rank => 500, - charfield => \"'mtfnpy'", + url => \"'cpan.org'", + title => "The 'best of' cpan", }) x 5 -]); - -is((grep { - $_->name eq 'DT' && - $_->rank == 500 && - $_->charfield eq 'mtfnpy' -} $rs->all), 5, 'populate with all literal SQL'); + ]); -$rs->delete; + is((grep { + $_->url eq 'cpan.org' && + $_->title eq "The 'best of' cpan", + } $rs->all), 5, 'populate with all literal SQL'); -### + $rs->delete; +} +my $rs = $schema->resultset('Artist'); +$rs->delete; throws_ok { $rs->populate([ { @@ -258,4 +258,68 @@ for ( ok ($row, "Stringification test row '$_' properly inserted"); } +$rs->delete; + +# test stringification with ->create rather than Storage::insert_bulk as well + +lives_ok { + my @dummy = $rs->populate([ + { + name => 'supplied before stringifying object', + }, + { + name => $fn, + } + ]); +} 'stringifying objects pass through'; + +# ... and vice-versa. + +lives_ok { + my @dummy = $rs->populate([ + { + name => $fn2, + }, + { + name => 'supplied after stringifying object', + }, + ]); +} 'stringifying objects pass through'; + +for ( + $fn, + $fn2, + 'supplied after stringifying object', + 'supplied before stringifying object' +) { + my $row = $rs->find ({name => $_}); + ok ($row, "Stringification test row '$_' properly inserted"); +} + +lives_ok { + $schema->resultset('TwoKeys')->populate([{ + artist => 1, + cd => 5, + fourkeys_to_twokeys => [{ + f_foo => 1, + f_bar => 1, + f_hello => 1, + f_goodbye => 1, + autopilot => 'a', + },{ + f_foo => 2, + f_bar => 2, + f_hello => 2, + f_goodbye => 2, + autopilot => 'b', + }] + }]) +} 'multicol-PK has_many populate works'; + +lives_ok ( sub { + $schema->populate('CD', [ + {cdid => 10001, artist => $artist->id, title => 'Pretty Much Empty', year => 2011, tracks => []}, + ]) +}, 'empty has_many relationship accepted by populate'); + done_testing;