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