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;

# This test was created in response to a bug that caused only one table to
# get loaded when calling fixtures_ok, without errors or warnings.

SKIP: {
  eval {require DBIx::Class::Schema::PopulateMore};
  if($@) {
    plan skip_all => "Optional module DBIx::Class::Schema::PopulateMore not installed.";
  }
  else {
    # Hard-code a plan to verify Test::DBIx::Class's fixtures_ok behavior.
    plan tests => 8;
  }

  use Test::DBIx::Class {
    schema_class => 'Test::DBIx::Class::Example::Schema',
    connect_info => ['dbi:SQLite:dbname=:memory:','',''],
    fixture_class => '::PopulateMore',
  }, 'Person', 'Company';

  fixtures_ok { 
    Company => {
      fields => ['name'],
      data   => {
        sprockets => ['Sprockets'],
        rockets   => ['Rockets'],
      },
    },
    Person => {
      fields => [qw/name age email/],
      data   => {
        mommy => ['Mommy', 55, 'mom@moms.com'],
        tommy => ['Tommy', 8,  'tommy@toms.com'],
      }
    },
  }, 'Install some fixtures';

  is_resultset Company;
  is_resultset Person;

  is_fields [qw/name/], Company, [
    ['Rockets'],
    ['Sprockets'],
  ], "Companies loaded ok";

  is_fields [qw/name age email/], Person, [
      ['Mommy', 55, 'mom@moms.com'],
      ['Tommy', 8,  'tommy@toms.com'],
  ], "Persons ALSO loaded ok.  The key here being that both Companies and Persons were loaded";

  fixtures_ok { 
    Company => {
      fields => ['name'],
      data   => {
        lockets   => ['Lockets'],
      },
    },
    Person => {
      fields => [qw/name age email/],
      data   => {
        salami => ['Salami', 1, 'sal@ami.com'],
      }
    }
  }, 'Install more fixtures to the same table.  This time as a hashref to test a different code path';

  is_fields [qw/name/], Company, [
    ['Lockets'],
    ['Rockets'],
    ['Sprockets'],
  ], "Second Company fixture loaded appended data, not replacing it";

  is_fields [qw/name age email/], Person, [
      ['Mommy', 55, 'mom@moms.com'],
      ['Tommy', 8,  'tommy@toms.com'],
      ['Salami', 1, 'sal@ami.com'],
  ], "Second Person fixture ALSO loaded appended data, not replacing it";
}