762b962759fd24c258b9b5c9b9f36273f7e2d5f4
[dbsrgits/DBIx-Class.git] / t / multi_create / find_or_multicreate.t
1 use strict;
2 use warnings;
3
4 use Test::More;
5 use lib qw(t/lib);
6 use DBICTest;
7
8 my $schema = DBICTest->init_schema( no_populate => 1 );
9
10 my $t11 = $schema->resultset('Track')->find_or_create({
11   trackid => 1,
12   title => 'Track one cd one',
13   cd => {
14     year => 1,
15     title => 'CD one',
16     very_long_artist_relationship => {
17       name => 'Artist one',
18     }
19   }
20 });
21
22 my $t12 = $schema->resultset('Track')->find_or_create({
23   trackid => 2,
24   title => 'Track two cd one',
25   cd => {
26     title => 'CD one',
27     very_long_artist_relationship => {
28       name => 'Artist one',
29     }
30   }
31 });
32
33 # FIXME - MC should be smart enough to infer this on its own...
34 $schema->resultset('Artist')->create({ name => 'Artist two' });
35
36 my $t2 = $schema->resultset('Track')->find_or_create({
37   trackid => 3,
38   title => 'Track one cd one',
39   cd => {
40     year => 1,
41     title => 'CD one',
42     very_long_artist_relationship => {
43       name => 'Artist two',
44     }
45   }
46 });
47
48 is_deeply(
49   $schema->resultset('Artist')->search({}, {
50     prefetch => { cds => 'tracks' },
51     order_by => 'tracks.title',
52   })->all_hri,
53   [
54     { artistid => 1, charfield => undef, name => "Artist one", rank => 13, cds => [
55       { artist => 1, cdid => 1, genreid => undef, single_track => undef, title => "CD one", year => 1, tracks => [
56         { cd => 1, last_updated_at => undef, last_updated_on => undef, position => 1, title => "Track one cd one", trackid => 1 },
57         { cd => 1, last_updated_at => undef, last_updated_on => undef, position => 2, title => "Track two cd one", trackid => 2 },
58       ]},
59     ]},
60     { artistid => 2, charfield => undef, name => "Artist two", rank => 13, cds => [
61       { artist => 2, cdid => 2, genreid => undef, single_track => undef, title => "CD one", year => 1, tracks => [
62         { cd => 2, last_updated_at => undef, last_updated_on => undef, position => 1, title => "Track one cd one", trackid => 3 },
63       ]},
64     ]},
65   ],
66   'Expected state of database after several find_or_create rounds'
67 );
68
69
70 done_testing;
71