Added failing tests for `external`, fix for tests
Charlie Garrison [Wed, 19 Oct 2016 02:43:42 +0000 (13:43 +1100)]
If config follows has_many to dump a set, the set’s config is not used, so attrs such as `external` are not honoured. Even using `rules` does not solve the problem. Using unsorted `sets` array to specify dump order solves the problem.

Signed-off-by: Charlie Garrison <cngarrison@gmail.com>

lib/DBIx/Class/Fixtures.pm
t/18-extra.t
t/lib/ExtraTest/Schema.pm
t/var/configs/extra.json

index c979849..5c5dc04 100644 (file)
@@ -644,7 +644,7 @@ sub dump {
   $tmp_output_dir->file('_config_set')->print( Dumper $config );
 
   $config->{rules} ||= {};
-  my @sources = sort { $a->{class} cmp $b->{class} } @{delete $config->{sets}};
+  my @sources = @{delete $config->{sets}};
 
   while ( my ($k,$v) = each %{ $config->{rules} } ) {
     if ( my $source = eval { $schema->source($k) } ) {
index 75528d5..7af4518 100644 (file)
@@ -18,7 +18,8 @@ open(my $fh, '<', io->catfile(qw't 18-extra.t')->name) ||
 ok my $row = $schema
   ->resultset('Photo')
   ->create({
-    photographer=>'john',
+    album=> {name=>'masterpiece'},
+    photographer=> {name=>'john'},
     file=>$fh,
   });
 
@@ -42,6 +43,8 @@ ok my $key = $schema->resultset('Photo')->first->file;
 ok -e $key, 'File Created';
 
 ok $schema->resultset('Photo')->delete;
+ok $schema->resultset('Photographer')->delete;
+ok $schema->resultset('Album')->delete;
 
 ok ! -e $key, 'File Deleted';
 
index e43643b..5484f9e 100644 (file)
@@ -1,3 +1,52 @@
+package ExtraTest::Schema::Result::Album;
+
+use base 'DBIx::Class::Core';
+
+__PACKAGE__->table('album');
+__PACKAGE__->add_columns(
+  'albumid' => {
+    data_type => 'integer',
+    is_auto_increment => 1,
+  },
+  'name' => {
+    data_type => 'varchar',
+    size      => 100,
+    is_nullable => 1,
+  },
+);
+__PACKAGE__->set_primary_key('albumid');
+
+__PACKAGE__->has_many(
+    photos => 'ExtraTest::Schema::Result::Photo'
+);
+
+1;
+
+package ExtraTest::Schema::Result::Photographer;
+
+use base 'DBIx::Class::Core';
+
+__PACKAGE__->table('photographer');
+__PACKAGE__->add_columns(
+  'photographerid' => {
+    data_type => 'integer',
+    is_auto_increment => 1,
+  },
+  'name' => {
+    data_type => 'varchar',
+    size      => 100,
+    is_nullable => 1,
+  },
+);
+__PACKAGE__->set_primary_key('photographerid');
+
+__PACKAGE__->has_many(
+    photos => 'ExtraTest::Schema::Result::Photo'
+);
+
+1;
+
+
 package ExtraTest::Schema::Result::Photo;
 
 use strict;
@@ -13,9 +62,11 @@ __PACKAGE__->add_columns(
        data_type => 'integer',
        is_auto_increment => 1,
   },
+  album => {
+    data_type => 'integer',
+  },
   photographer => {
-    data_type => 'varchar',
-    size => 40,
+    data_type => 'integer',
   },
   file => {
        data_type => 'varchar',
@@ -26,6 +77,9 @@ __PACKAGE__->add_columns(
 
 __PACKAGE__->set_primary_key('photo_id');
 
+__PACKAGE__->belongs_to( photographer => 'ExtraTest::Schema::Result::Photographer' );
+__PACKAGE__->belongs_to( album => 'ExtraTest::Schema::Result::Album' );
+
 package ExtraTest::Schema;
 
 use strict;
@@ -34,6 +88,10 @@ use warnings;
 use base 'DBIx::Class::Schema';
 
 __PACKAGE__->register_class(
+  Album => 'ExtraTest::Schema::Result::Album');
+__PACKAGE__->register_class(
+  Photographer => 'ExtraTest::Schema::Result::Photographer');
+__PACKAGE__->register_class(
   Photo => 'ExtraTest::Schema::Result::Photo');
 
 sub load_sql {
@@ -53,9 +111,18 @@ sub init_schema {
 1;
 
 __DATA__
+CREATE TABLE album (
+  albumid INTEGER PRIMARY KEY NOT NULL,
+  name varchar(100) NOT NULL
+);
+CREATE TABLE photographer (
+  photographerid INTEGER PRIMARY KEY NOT NULL,
+  name varchar(100) NOT NULL
+);
 CREATE TABLE photo (
   photo_id INTEGER PRIMARY KEY NOT NULL,
-  photographer varchar(40) NOT NULL,
+  album INTEGER NOT NULL,
+  photographer INTEGER NOT NULL,
   file varchar(255) NOT NULL
 )
 
index 53408c3..beb6083 100644 (file)
@@ -8,5 +8,17 @@
                 "args": {"path":"__ATTR(photo_dir)__"}
             }
         }
+       },{
+               "class": "Album",
+               "quantity": "all",
+         "fetch" : [
+            {
+               "quantity" : "all",
+               "rel" : "photos"
+            }
+         ]
+       },{
+               "class": "Photographer",
+               "quantity": "all"
        }]
 }