new test resultsource
[dbsrgits/DBIx-Class-Fixtures.git] / t / 12-populate-basic.t
1 #!perl
2
3 use DBIx::Class::Fixtures;
4 use Test::More no_plan;
5 use lib qw(t/lib);
6 use DBICTest;
7 use Path::Class;
8 use Data::Dumper;
9 use IO::All;
10
11 # set up and populate schema
12 ok(my $schema = DBICTest->init_schema(), 'got schema');
13 my $config_dir = io->catfile(qw't var configs')->name;
14
15 # do dump
16 ok(my $fixtures = DBIx::Class::Fixtures->new({ 
17     config_dir => $config_dir, 
18     debug => 0 
19   }), 'object created with correct config dir'
20 );
21
22 foreach my $set ('simple', 'quantity', 'fetch', 'rules') {
23   no warnings 'redefine';
24   DBICTest->clear_schema($schema);
25   DBICTest->populate_schema($schema);
26   ok($fixtures->dump({ 
27       config => "$set.json", 
28       schema => $schema, 
29       directory => io->catfile(qw't var fixtures')->name 
30     }), "$set dump executed okay"
31   );
32   $fixtures->populate({ 
33     ddl => io->catfile(qw[t lib sqlite.sql])->name,
34     connection_details => ['dbi:SQLite:'.io->catfile(qw[ t var DBIxClass.db ])->name, '', ''], 
35     directory => io->catfile(qw't var fixtures')->name
36   });
37
38   $schema = DBICTest->init_schema( no_deploy => 1);
39
40   my $fixture_dir = dir(io->catfile(qw't var fixtures')->name);
41   foreach my $class ($schema->sources) {
42     my $source_dir = dir($fixture_dir, lc($class));
43     is($schema->resultset($class)->count, 
44        (-e $source_dir) ? scalar($source_dir->children) : 0, 
45        "correct number of $set " . lc($class)
46     );
47
48     next unless (-e $source_dir);
49
50     my $rs = $schema->resultset($class);
51     foreach my $row ($rs->all) {
52       my $file = file($source_dir, $row->id . '.fix');
53       my $HASH1; eval($file->slurp());
54       is_deeply(
55         $HASH1, 
56         {$row->get_columns}, 
57         "$set " . lc($class) . " row " . $row->id . " imported okay"
58       );
59     }
60   }
61 }
62
63 # use_create => 1
64 $schema = DBICTest->init_schema();
65 $fixtures = DBIx::Class::Fixtures->new({
66         config_dir => $config_dir,
67         debug => 0
68 });
69 ok( $fixtures->dump({
70                 config => "use_create.json",
71                 schema => $schema,
72                 directory => io->catfile(qw't var fixtures')->name
73         }), "use_create dump executed okay"
74 );
75 $schema = DBICTest->init_schema( no_populate => 1 );
76 $fixtures->populate({
77         directory => io->catfile(qw't var fixtures')->name,
78         connection_details => ['dbi:SQLite:'.io->catfile(qw[ t var DBIxClass.db ])->name, '', ''], 
79         schema => $schema,
80         no_deploy => 1,
81         use_create => 1
82 });
83 $schema = DBICTest->init_schema( no_deploy => 1, no_populate => 1 );
84 is( $schema->resultset( "Artist" )->find({ artistid => 4 })->name, "Test Name", "use_create => 1 ok" );
85
86 $schema = DBICTest->init_schema( no_populate => 1 );
87 $fixtures->populate({
88         directory => io->catfile(qw't var fixtures')->name,
89         connection_details => ['dbi:SQLite:'.io->catfile(qw[ t var DBIxClass.db ])->name, '', ''], 
90         schema => $schema,
91         no_deploy => 1,
92         use_find_or_create => 1
93 });
94 is( $schema->resultset( "Artist" )->find({ artistid => 4 })->name, "Test Name", "use_find_or_create => 1 ok" );
95 $fixtures->populate({
96         directory => io->catfile(qw't var fixtures')->name,
97         connection_details => ['dbi:SQLite:'.io->catfile(qw[ t var DBIxClass.db ])->name, '', ''], 
98         schema => $schema,
99         no_deploy => 1,
100         use_find_or_create => 1
101 });
102 is( $schema->resultset( "Artist" )->find({ artistid => 4 })->name, "Test Name", "idempotent use_find_or_create => 1 ok" );