more dumper tests added
Luke Saunders [Thu, 31 Jan 2008 00:28:19 +0000 (00:28 +0000)]
lib/DBIx/Class/Fixtures.pm
t/03-dump-quantity.t [new file with mode: 0644]
t/04-dump-fetch.t [new file with mode: 0644]
t/05-dump-rules.t [new file with mode: 0644]
t/lib/DBICTest.pm

index ee4fbeb..6fd5651 100644 (file)
@@ -269,7 +269,7 @@ sub dump_object {
         #              use Data::Dumper; print ' -- ' . Dumper($c_params{set}, $rule->{fetch}) if ($rule && $rule->{fetch});
         $c_params{set} = merge( $c_params{set}, $rule) if ($rule && $rule->{fetch});
         #              use Data::Dumper; print ' -- ' . Dumper(\%c_params) if ($rule && $rule->{fetch});
-        dump_object($_, \%c_params) foreach $related_rs->all;    
+        $self->dump_object($_, \%c_params) foreach $related_rs->all;     
       }        
     }
   }
@@ -297,7 +297,7 @@ sub dump_object {
     $related_rs = $related_rs->search($fetch->{cond}, { join => $fetch->{join} }) if ($fetch->{cond});
     $related_rs = $related_rs->search({}, { rows => $fetch->{quantity} }) if ($fetch->{quantity} && $fetch->{quantity} ne 'all');
     $related_rs = $related_rs->search({}, { order_by => $fetch->{order_by} }) if ($fetch->{order_by});
-    dump_object($_, { %{$params}, set => $fetch }) foreach $related_rs->all;
+    $self->dump_object($_, { %{$params}, set => $fetch }) foreach $related_rs->all;
   }
 }
 
diff --git a/t/03-dump-quantity.t b/t/03-dump-quantity.t
new file mode 100644 (file)
index 0000000..011d0ee
--- /dev/null
@@ -0,0 +1,29 @@
+#!perl
+
+use DBIx::Class::Fixtures;
+use Test::More tests => 10;
+use lib qw(t/lib);
+use DBICTest;
+use Path::Class;
+use Data::Dumper;
+
+# set up and populate schema
+ok(my $schema = DBICTest->init_schema(), 'got schema');
+
+my $config_dir = 't/var/configs';
+
+# 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 => 'quantity.json', schema => $schema, directory => 't/var/fixtures' }), 'quantity dump executed okay');
+
+# check dump is okay
+my $dir = dir('t/var/fixtures/cd');
+my @children = $dir->children;
+is(scalar(@children), 3, 'right number of cd fixtures created');
+
+foreach my $cd_fix_file (@children) {
+  my $HASH1; eval($cd_fix_file->slurp());
+  is(ref $HASH1, 'HASH', 'fixture evals into hash');
+  my $cd = $schema->resultset('CD')->find($HASH1->{cdid});
+  is_deeply({$cd->get_columns}, $HASH1, 'dumped fixture is equivalent to cd row');
+}
diff --git a/t/04-dump-fetch.t b/t/04-dump-fetch.t
new file mode 100644 (file)
index 0000000..ad7bfda
--- /dev/null
@@ -0,0 +1,51 @@
+#!perl
+
+use DBIx::Class::Fixtures;
+use Test::More tests => 11;
+use lib qw(t/lib);
+use DBICTest;
+use Path::Class;
+use Data::Dumper;
+
+# set up and populate schema
+ok(my $schema = DBICTest->init_schema(), 'got schema');
+
+my $config_dir = 't/var/configs';
+
+# 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 => 'fetch.json', schema => $schema, directory => 't/var/fixtures' }), 'fetch dump executed okay');
+
+# check dump is okay
+my $dir = dir('t/var/fixtures/artist');
+my @children = $dir->children;
+is(scalar(@children), 2, 'right number of artist fixtures created');
+
+# check both artists dumped
+foreach my $id (1, 2) {
+  my $artist_fix_file = dir($dir, $id . '.fix');
+  ok(-e $artist_fix_file, "artist $id dumped okay");
+}
+
+# check all of artist1's cds were fetched
+my $artist1 = $schema->resultset('Artist')->find(1);
+my @artist1_cds = $artist1->cds->all;
+foreach my $cd (@artist1_cds) {
+  my $cd_fix_file = dir('t/var/fixtures', 'cd', $cd->id . '.fix');
+  ok(-e $cd_fix_file, "artist1's cd rel dumped okay");
+}
+
+# check only cds matching artist2's cond were fetched
+my $artist2 = $schema->resultset('Artist')->find(2);
+my @artist2_cds = $artist2->cds->search({ year => { '>' => 2002 } });
+foreach my $cd (@artist2_cds) {
+  my $cd_fix_file = dir('t/var/fixtures', 'cd', $cd->id . '.fix');
+  ok(-e $cd_fix_file, "artist2's cd rel dumped okay");
+}
+
+my $cd_dir = dir('t/var/fixtures/cd');
+@children = $cd_dir->children;
+is(scalar(@children), scalar(@artist1_cds) + scalar(@artist2_cds), 'no extra cd fixtures dumped');
+
+
+
diff --git a/t/05-dump-rules.t b/t/05-dump-rules.t
new file mode 100644 (file)
index 0000000..96b77c0
--- /dev/null
@@ -0,0 +1,50 @@
+#!perl
+
+use DBIx::Class::Fixtures;
+use Test::More tests => 14;
+use lib qw(t/lib);
+use DBICTest;
+use Path::Class;
+use Data::Dumper;
+
+# set up and populate schema
+ok(my $schema = DBICTest->init_schema(), 'got schema');
+
+my $config_dir = 't/var/configs';
+
+# 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 => 'rules.json', schema => $schema, directory => 't/var/fixtures' }), 'fetch dump executed okay');
+
+# check dump is okay
+my $dir = dir('t/var/fixtures');
+my $cd_dir = dir($dir, 'cd');
+my $track_dir = dir($dir, 'track');
+
+# check only artist1's cds that matched the rule were fetched
+my $artist1 = $schema->resultset('Artist')->find(1);
+my $artist1_cds = $artist1->cds;
+while (my $a1_cd = $artist1_cds->next) {
+  my $cd_fix_file = file($cd_dir, $a1_cd->id . '.fix');
+  if ($a1_cd->tags->search({ tag => 'Cheesy' })->count) {
+    ok(-e $cd_fix_file, 'cd matching rule fetched');
+  } else {
+    isnt(-e $cd_fix_file, 1, 'cd not matching rule not fetched');
+  }
+}
+
+# check only cds' tracks that matched the rule were fetched
+foreach my $cd_fix_file ($cd_dir->children) {
+  my $HASH1; eval($cd_fix_file->slurp());
+  is(ref $HASH1, 'HASH', 'cd fixture evals into hash');
+
+  my $cd = $schema->resultset('CD')->find($HASH1->{cdid});
+  foreach my $track ($cd->tracks->all) {
+    my $track_fix_file = file($track_dir, $track->id . '.fix');
+    if ($track->get_column('position') eq 2) {
+      is(-e $track_fix_file, 1, 'track matching rule fetched');
+    } else {
+      isnt(-e $track_fix_file, 1, 'track not matching rule not fetched');
+    }
+  }
+}
index 4133223..27d6ad6 100755 (executable)
@@ -118,7 +118,8 @@ sub populate_schema {
         [ 2, 1, "Forkful of bees", 2001 ],
         [ 3, 1, "Caterwaulin' Blues", 1997 ],
         [ 4, 2, "Generic Manufactured Singles", 2001 ],
-        [ 5, 3, "Come Be Depressed With Us", 1998 ],
+        [ 5, 2, "We like girls and stuff", 2003 ],
+        [ 6, 3, "Come Be Depressed With Us", 1998 ],
     ]);
 
     $schema->populate('Tag', [