testing for when resources are nested
John Napiorkowski [Fri, 6 Mar 2015 00:17:29 +0000 (18:17 -0600)]
t/07-dump-all.t
t/19-complex-hierarchy.t [new file with mode: 0644]
t/lib/DBICTest.pm
t/lib/DBICTest/Schema.pm
t/lib/DBICTest/Schema/Artist.pm
t/lib/DBICTest/Schema/Artist/WashedUp.pm
t/lib/mysql.sql
t/lib/sqlite.sql

index 6a070c4..498a4db 100644 (file)
@@ -8,7 +8,7 @@ use Path::Class;
 use Data::Dumper; 
 use IO::All;
 use if $^O eq 'MSWin32','Devel::Confess';
-plan tests => 16;
+plan tests => 18;
 
 # set up and populate schema
 ok(my $schema = DBICTest->init_schema( ), 'got schema');
diff --git a/t/19-complex-hierarchy.t b/t/19-complex-hierarchy.t
new file mode 100644 (file)
index 0000000..4da70a5
--- /dev/null
@@ -0,0 +1,88 @@
+#!perl
+
+use DBIx::Class::Fixtures;
+use Test::More tests => 4;
+use lib qw(t/lib);
+use DBICTest;
+use Path::Class;
+use Data::Dumper;
+use IO::All;
+
+use if $^O eq 'MSWin32','Devel::Confess';
+# set up and populate schema
+ok(my $schema = DBICTest->init_schema(), 'got schema');
+
+my $config_dir = io->catfile(qw't var configs')->name;
+
+# Add washedup
+
+ok my $artist = $schema->resultset("Artist")->find(1);
+ok my $washed_up = $artist->create_related('washed_up', +{});
+ok $washed_up->fk_artistid;
+
+__END__
+
+{
+    # do dump
+    ok(my $fixtures = DBIx::Class::Fixtures->new({ config_dir => $config_dir, debug => 0 }), 'object created with correct config dir');
+    ok($fixtures->dump({ config => 'simple.json', schema => $schema, directory => io->catfile(qw't var fixtures')->name }), 'simple dump executed okay');
+
+    # check dump is okay
+    my $dir = dir(io->catfile(qw't var fixtures artist')->name);
+    ok(-e io->catfile(qw't var fixtures artist')->name, 'artist directory created');
+
+    my @children = $dir->children;
+    is(scalar(@children), 1, 'right number of fixtures created');
+
+    my $fix_file = $children[0];
+    my $HASH1; eval($fix_file->slurp());
+    is(ref $HASH1, 'HASH', 'fixture evals into hash');
+
+    is_deeply([sort $schema->source('Artist')->columns], [sort keys %{$HASH1}], 'fixture has correct keys');
+
+    my $artist = $schema->resultset('Artist')->find($HASH1->{artistid});
+    is_deeply({$artist->get_columns}, $HASH1, 'dumped fixture is equivalent to artist row');
+
+    $schema->resultset('Artist')->delete; # so we can create the row again on the next line
+    ok($schema->resultset('Artist')->create($HASH1), 'new dbic row created from fixture');
+}
+
+{
+    # do dump with hashref config
+    ok(my $fixtures = DBIx::Class::Fixtures->new({ config_dir => $config_dir, debug => 0 }), 'object created with correct config dir');
+    ok($fixtures->dump({
+        config => {
+            "might_have" => {
+                "fetch" => 0
+            },
+            "has_many" => {
+                "fetch" => 0
+            },
+            "sets" => [{
+                "class" => "Artist",
+                "quantity" => 1
+            }]
+        },
+        schema => $schema, 
+        directory => io->catfile(qw't var fixtures')->name,
+    }), 'simple dump executed okay');
+
+    # check dump is okay
+    my $dir = dir(io->catfile(qw't var fixtures artist')->name);
+    ok(-e io->catfile(qw't var fixtures artist')->name, 'artist directory created');
+
+    my @children = $dir->children;
+    is(scalar(@children), 1, 'right number of fixtures created');
+
+    my $fix_file = $children[0];
+    my $HASH1; eval($fix_file->slurp());
+    is(ref $HASH1, 'HASH', 'fixture evals into hash');
+
+    is_deeply([sort $schema->source('Artist')->columns], [sort keys %{$HASH1}], 'fixture has correct keys');
+
+    my $artist = $schema->resultset('Artist')->find($HASH1->{artistid});
+    is_deeply({$artist->get_columns}, $HASH1, 'dumped fixture is equivalent to artist row');
+
+    $schema->resultset('Artist')->delete; # so we can create the row again on the next line
+    ok($schema->resultset('Artist')->create($HASH1), 'new dbic row created from fixture');
+}
index 08c0e27..8f5dca3 100755 (executable)
@@ -152,6 +152,11 @@ sub populate_schema {
         [ 32948, 'Big PK' ],
     ]);
 
+    $schema->populate('Artist::WashedUp', [
+        [ qw/fk_artistid/ ],
+        [ 2 ],
+    ]);
+
     $schema->populate('CD', [
         [ qw/cdid artist title year/ ],
         [ 1, 1, "Spoonful of bees", 1999 ],
index 350eecc..23e03d6 100644 (file)
@@ -5,6 +5,6 @@ use base qw/DBIx::Class::Schema/;
 
 no warnings qw/qw/;
 
-__PACKAGE__->load_classes(qw/Artist CD Track Tag Producer CD_to_Producer/);
+__PACKAGE__->load_classes(qw/Artist Artist::WashedUp CD Track Tag Producer CD_to_Producer/);
 
 1;
index f6d8180..3925cd6 100644 (file)
@@ -22,6 +22,11 @@ __PACKAGE__->has_many(
     { order_by => 'year' },
 );
 
+__PACKAGE__->might_have(
+    washed_up => 'DBICTest::Schema::Artist::WashedUp',
+    {'foreign.fk_artistid' => 'self.artistid'},
+);
+
 sub new {
        my ( $class, $args ) = @_;
 
index 1bbc218..998139f 100644 (file)
@@ -1,5 +1,5 @@
 package # hide from PAUSE 
-    DBICTest::Schema::Artist;
+    DBICTest::Schema::Artist::WashedUp;
 
 use base 'DBIx::Class::Core';
 
@@ -7,7 +7,6 @@ __PACKAGE__->table('artist_washed_up');
 __PACKAGE__->add_columns(
   'fk_artistid' => {
     data_type => 'integer',
-    is_auto_increment => 1,
   },
 );
 
index ca1b034..47bad04 100644 (file)
@@ -17,6 +17,13 @@ CREATE TABLE artist (
   name varchar(100)
 );
 
+--
+-- Table: artist_washed_up
+--
+DROP TABLE IF EXISTS artist_washed_up;
+CREATE TABLE artist_washed_up (
+  fk_artistid INTEGER PRIMARY KEY NOT NULL
+);
 
 --
 -- Table: cd
index 1e21627..f863b03 100644 (file)
@@ -21,6 +21,12 @@ CREATE TABLE artist (
   name varchar(100)
 );
 
+--
+-- Table: artist_washed_up
+--
+CREATE TABLE artist_washed_up (
+  fk_artistid INTEGER PRIMARY KEY NOT NULL
+);
 
 --
 -- Table: cd