50a124c3951906d1f645bb1c547deadf5500b54c
[dbsrgits/DBIx-Class-Schema-Loader.git] / t / 22dump.t
1 use strict;
2 use Test::More;
3 use Test::Exception;
4 use Test::Warn;
5 use lib qw(t/lib);
6 use File::Path;
7 use make_dbictest_db;
8 use dbixcsl_test_dir qw/$tdir/;
9
10 my $dump_path = "$tdir/dump";
11
12
13 {
14     package DBICTest::Schema::1;
15     use base qw/ DBIx::Class::Schema::Loader /;
16     __PACKAGE__->loader_options(
17         dump_directory => $dump_path,
18     );
19 }
20
21 {
22     package DBICTest::Schema::2;
23     use base qw/ DBIx::Class::Schema::Loader /;
24     __PACKAGE__->loader_options(
25         dump_directory => $dump_path,
26         really_erase_my_files => 1,
27     );
28 }
29
30 rmtree($dump_path, 1, 1);
31
32 lives_ok {
33   warnings_exist { DBICTest::Schema::1->connect($make_dbictest_db::dsn) }
34     [ qr|^Dumping manual schema|, qr|^Schema dump completed| ];
35 } 'no death with dump_directory set' or diag "Dump failed: $@";
36
37 is_deeply(
38     [ sort @{ DBICTest::Schema::1->loader->generated_classes } ],
39     [ sort 'DBICTest::Schema::1', map "DBICTest::Schema::1::Result::$_", qw(Foo Bar) ],
40     'generated_classes has schema and result classes'
41 );
42
43 DBICTest::Schema::1->_loader_invoked(undef);
44
45 SKIP: {
46   skip "ActiveState perl produces additional warnings", 1
47     if ($^O eq 'MSWin32');
48
49   warnings_exist { DBICTest::Schema::1->connect($make_dbictest_db::dsn) }
50     [ qr|^Dumping manual schema|, qr|^Schema dump completed| ];
51
52   is_deeply(
53       [ sort @{ DBICTest::Schema::1->loader->generated_classes } ],
54       [ ],
55       'no classes generated on second dump'
56   );
57
58   rmtree($dump_path, 1, 1);
59 }
60
61 lives_ok {
62   warnings_exist { DBICTest::Schema::2->connect($make_dbictest_db::dsn) }
63     [ qr|^Dumping manual schema|, qr|^Schema dump completed| ];
64 } 'no death with dump_directory set (overwrite1)' or diag "Dump failed: $@";
65
66 is_deeply(
67     [ sort @{ DBICTest::Schema::2->loader->generated_classes } ],
68     [ sort 'DBICTest::Schema::2', map "DBICTest::Schema::2::Result::$_", qw(Foo Bar) ],
69     'generated_classes has schema and result classes'
70 );
71
72 DBICTest::Schema::2->_loader_invoked(undef);
73
74 lives_ok {
75   warnings_exist { DBICTest::Schema::2->connect($make_dbictest_db::dsn) }
76   [
77     qr/^Dumping manual schema/,
78     qr|^Deleting .+Schema/2.+ due to 'really_erase_my_files'|,
79     qr|^Deleting .+Schema/2/Result/Foo.+ due to 'really_erase_my_files'|,
80     qr|^Deleting .+Schema/2/Result/Bar.+ due to 'really_erase_my_files'|,
81     qr/^Schema dump completed/
82   ];
83 } 'no death with dump_directory set (overwrite2)' or diag "Dump failed: $@";
84
85 is_deeply(
86     [ sort @{ DBICTest::Schema::2->loader->generated_classes } ],
87     [ sort 'DBICTest::Schema::2', map "DBICTest::Schema::2::Result::$_", qw(Foo Bar) ],
88     'all classes regenerated with really_erase_my_files',
89 );
90
91 done_testing();
92
93 END { rmtree($dump_path, 1, 1); }