The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl

use strict;
use warnings;

use lib 't/lib';
use Test::More;
use Test::Deep;

use TestSchema;
my $schema = TestSchema->deploy_or_connect();
$schema->prepopulate;

{
   my $bar_rs = TestSchema->resultset('Foo_Bar');

   is $bar_rs->result_source->from, 'Foo_Bar', 'set table works';

   relationships: {
      my $bar_info = $bar_rs->result_source->relationship_info('bar');
      is $bar_info->{class}, 'TestSchema::Result::Bar',
         'namespace correctly defaulted';

      my $foo_info = $bar_rs->result_source->relationship_info('foo');
      is $foo_info->{class}, 'TestSchema::Result::Foo',
         'namespace and method name correctly defaulted';
   }

   cmp_deeply [ $bar_rs->result_source->primary_columns ], [qw{foo_id bar_id}],
      'set primary keys works';

   cmp_deeply $bar_rs->result_source->column_info('bar_id'), {
      data_type => 'integer',
      size => 12,
   }, 'bar_id infers column info correctly';

}

{
   relationships: {
      my $g_rs = $schema->resultset('Gnarly');
      my $s_rs = $schema->resultset('Station');
      my $g_s_rs = $schema->resultset('Gnarly_Station');

      cmp_deeply $g_s_rs->result_source->column_info('gnarly_id'), {
         data_type => 'integer',
         is_nullable => 0,
         is_numeric => 1,
      }, 'gnarly_id defaults column info correctly';

      is $s_rs->result_source->relationship_info('gnarly_stations')->{class},
         'TestSchema::Result::Gnarly_Station',
         'Left has_many defaulted correctly';

      is $g_rs->result_source->relationship_info('gnarly_stations')->{class},
         'TestSchema::Result::Gnarly_Station',
         'Right has_many defaulted correctly';

      cmp_deeply [ map $_->id, $s_rs->find(1)->gnarlies ],
         [ 1, 2, 3 ],
         'Left many_to_many defaulted correctly';

      cmp_deeply [ map $_->id, $g_rs->find(1)->stations ],
         [ 1, 3 ],
         'Right many_to_many defaulted correctly';

   }
}

done_testing;