some changes to filter code
[dbsrgits/DBIx-Class-Schema-Loader.git] / t / 27filter_generated.t
1 use strict;
2 use DBIx::Class::Schema::Loader;
3 use DBIx::Class::Schema::Loader::Utils 'slurp_file';
4 use File::Path;
5 use Test::More tests => 19;
6 use Test::Exception;
7 use lib qw(t/lib);
8 use make_dbictest_db;
9 use dbixcsl_test_dir qw/$tdir/;
10
11 my $dump_path = "$tdir/dump";
12
13 my %original_class_data;
14
15 my ($schema_file_count, $result_file_count);
16
17 {
18     package DBICTest::Schema::1;
19     use Test::More;
20     use base 'DBIx::Class::Schema::Loader';
21     __PACKAGE__->loader_options(
22         dump_directory => $dump_path,
23         quiet => 1,
24         filter_generated_code => sub {
25             my ($type, $class, $text) = @_;
26
27             like $type, qr/^(?:schema|result)\z/,
28                 'got correct file type';
29
30             if ($type eq 'schema') {
31                 $schema_file_count++;
32                 is $class, 'DBICTest::Schema::1',
33                     'correct class for schema type file passed to filter';
34             }
35             elsif ($type eq 'result') {
36                 $result_file_count++;
37                 like $class, qr/^DBICTest::Schema::1::Result::(?:Foo|Bar)\z/,
38                     'correct class for result type file passed to filter';
39             }
40             else {
41                 die 'invalid file type passed to filter';
42             }
43
44             $original_class_data{$class} = $text;
45             if ($class =~ /::1$/) {
46                 $text = "No Gotcha!";
47             }
48             else {
49                 $text .= q{my $foo = "Kilroy was here";};
50             }
51             return $text;
52         },
53     );
54 }
55
56 {
57     package DBICTest::Schema::2;
58     use base 'DBIx::Class::Schema::Loader';
59     __PACKAGE__->loader_options(
60         dump_directory => $dump_path,
61         quiet => 1,
62         filter_generated_code => "$^X t/bin/simple_filter",
63     );
64 }
65
66 DBICTest::Schema::1->connect($make_dbictest_db::dsn);
67
68 # schema is generated in 2 passes
69
70 is $schema_file_count, 2,
71     'correct number of schema files passed to filter';
72
73 is $result_file_count, 4,
74     'correct number of result files passed to filter';
75
76 my $foo = slurp_file "$dump_path/DBICTest/Schema/1/Result/Foo.pm";
77 ok(! -e "$dump_path/DBICTest/Schema/1.pm",
78      "No package means no file written");
79 ok($original_class_data{"DBICTest::Schema::1"},
80      "Even though we processed the missing class");
81 like($foo, qr/# Created by .* THE FIRST PART/s,
82      "We get the whole autogenerated text");
83 like($foo, qr/Kilroy was here/, "Can insert text");
84
85 DBICTest::Schema::2->connect($make_dbictest_db::dsn);
86
87 $foo = slurp_file "$dump_path/DBICTest/Schema/2/Result/Foo.pm";
88
89 like $foo, qr/Kilroy was here/,
90     "Can insert text via command filter";
91
92 END { rmtree($dump_path, 1, 1); }