Commit | Line | Data |
4fb695f4 |
1 | #!perl |
2 | |
3 | use DBIx::Class::Fixtures; |
675669cc |
4 | use Test::More no_plan; |
4fb695f4 |
5 | use lib qw(t/lib); |
6 | use DBICTest; |
7 | use Path::Class; |
3c528252 |
8 | use Data::Dumper; |
01a3246a |
9 | use Test::TempDir::Tiny; |
66d02e24 |
10 | use IO::All; |
4fb695f4 |
11 | |
01a3246a |
12 | my $tempdir = tempdir; |
13 | |
4fb695f4 |
14 | # set up and populate schema |
01a3246a |
15 | ok(my $schema = DBICTest->init_schema(db_dir => $tempdir), 'got schema'); |
66d02e24 |
16 | my $config_dir = io->catfile(qw't var configs')->name; |
4fb695f4 |
17 | |
18 | # do dump |
8a1df391 |
19 | ok(my $fixtures = DBIx::Class::Fixtures->new({ |
20 | config_dir => $config_dir, |
21 | debug => 0 |
22 | }), 'object created with correct config dir' |
23 | ); |
4fb695f4 |
24 | |
3c528252 |
25 | foreach my $set ('simple', 'quantity', 'fetch', 'rules') { |
26 | no warnings 'redefine'; |
27 | DBICTest->clear_schema($schema); |
28 | DBICTest->populate_schema($schema); |
8a1df391 |
29 | ok($fixtures->dump({ |
30 | config => "$set.json", |
01a3246a |
31 | schema => $schema, |
32 | directory => $tempdir |
8a1df391 |
33 | }), "$set dump executed okay" |
34 | ); |
35 | $fixtures->populate({ |
66d02e24 |
36 | ddl => io->catfile(qw[t lib sqlite.sql])->name, |
01a3246a |
37 | connection_details => ['dbi:SQLite:'.io->catfile($tempdir, qw[ DBIxClass.db ])->name, '', ''], |
38 | directory => $tempdir |
8a1df391 |
39 | }); |
40 | |
01a3246a |
41 | $schema = DBICTest->init_schema(db_dir => $tempdir, no_deploy => 1); |
3c528252 |
42 | |
01a3246a |
43 | my $fixture_dir = dir($tempdir); |
3c528252 |
44 | foreach my $class ($schema->sources) { |
45 | my $source_dir = dir($fixture_dir, lc($class)); |
8a1df391 |
46 | is($schema->resultset($class)->count, |
47 | (-e $source_dir) ? scalar($source_dir->children) : 0, |
48 | "correct number of $set " . lc($class) |
49 | ); |
50 | |
3c528252 |
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()); |
8a1df391 |
57 | is_deeply( |
58 | $HASH1, |
59 | {$row->get_columns}, |
60 | "$set " . lc($class) . " row " . $row->id . " imported okay" |
61 | ); |
3c528252 |
62 | } |
63 | } |
64 | } |
65a80d4e |
65 | |
66 | # use_create => 1 |
01a3246a |
67 | $schema = DBICTest->init_schema(db_dir => $tempdir); |
65a80d4e |
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, |
01a3246a |
75 | directory => $tempdir |
65a80d4e |
76 | }), "use_create dump executed okay" |
77 | ); |
01a3246a |
78 | $schema = DBICTest->init_schema(db_dir => $tempdir, no_populate => 1 ); |
65a80d4e |
79 | $fixtures->populate({ |
01a3246a |
80 | directory => $tempdir, |
81 | connection_details => ['dbi:SQLite:'.io->catfile($tempdir, qw[ DBIxClass.db ])->name, '', ''], |
65a80d4e |
82 | schema => $schema, |
83 | no_deploy => 1, |
84 | use_create => 1 |
85 | }); |
01a3246a |
86 | $schema = DBICTest->init_schema(db_dir => $tempdir, no_deploy => 1, no_populate => 1 ); |
65a80d4e |
87 | is( $schema->resultset( "Artist" )->find({ artistid => 4 })->name, "Test Name", "use_create => 1 ok" ); |
e54ab7f3 |
88 | |
01a3246a |
89 | $schema = DBICTest->init_schema(db_dir => $tempdir, no_populate => 1 ); |
e54ab7f3 |
90 | $fixtures->populate({ |
01a3246a |
91 | directory => $tempdir, |
92 | connection_details => ['dbi:SQLite:'.io->catfile($tempdir, qw[ DBIxClass.db ])->name, '', ''], |
e54ab7f3 |
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({ |
01a3246a |
99 | directory => $tempdir, |
100 | connection_details => ['dbi:SQLite:'.io->catfile($tempdir, qw[ DBIxClass.db ])->name, '', ''], |
e54ab7f3 |
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" ); |