The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;

use Test::More;
use lib qw(t/lib);
use DBICTest;

my $schema = DBICTest->init_schema( no_populate => 1 );

my $t11 = $schema->resultset('Track')->find_or_create({
  trackid => 1,
  title => 'Track one cd one',
  cd => {
    year => 1,
    title => 'CD one',
    very_long_artist_relationship => {
      name => 'Artist one',
    }
  }
});

my $t12 = $schema->resultset('Track')->find_or_create({
  trackid => 2,
  title => 'Track two cd one',
  cd => {
    title => 'CD one',
    very_long_artist_relationship => {
      name => 'Artist one',
    }
  }
});

# FIXME - MC should be smart enough to infer this on its own...
$schema->resultset('Artist')->create({ name => 'Artist two' });

my $t2 = $schema->resultset('Track')->find_or_create({
  trackid => 3,
  title => 'Track one cd one',
  cd => {
    year => 1,
    title => 'CD one',
    very_long_artist_relationship => {
      name => 'Artist two',
    }
  }
});

is_deeply(
  $schema->resultset('Artist')->search({}, {
    prefetch => { cds => 'tracks' },
    order_by => 'tracks.title',
  })->all_hri,
  [
    { artistid => 1, charfield => undef, name => "Artist one", rank => 13, cds => [
      { artist => 1, cdid => 1, genreid => undef, single_track => undef, title => "CD one", year => 1, tracks => [
        { cd => 1, last_updated_at => undef, last_updated_on => undef, position => 1, title => "Track one cd one", trackid => 1 },
        { cd => 1, last_updated_at => undef, last_updated_on => undef, position => 2, title => "Track two cd one", trackid => 2 },
      ]},
    ]},
    { artistid => 2, charfield => undef, name => "Artist two", rank => 13, cds => [
      { artist => 2, cdid => 2, genreid => undef, single_track => undef, title => "CD one", year => 1, tracks => [
        { cd => 2, last_updated_at => undef, last_updated_on => undef, position => 1, title => "Track one cd one", trackid => 3 },
      ]},
    ]},
  ],
  'Expected state of database after several find_or_create rounds'
);


done_testing;