1use strict;
2use DBIx::Class::Schema::Loader;
3use DBIx::Class::Schema::Loader::Utils 'slurp_file';
4use File::Path;
5use Test::More tests => 19;
6use Test::Exception;
7use lib qw(t/lib);
8use make_dbictest_db;
9use dbixcsl_test_dir qw/$tdir/;
10
11my $dump_path = "$tdir/dump";
12
13my %original_class_data;
14
15my ($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
66DBICTest::Schema::1->connect($make_dbictest_db::dsn);
67
68# schema is generated in 2 passes
69
70is $schema_file_count, 2,
71    'correct number of schema files passed to filter';
72
73is $result_file_count, 4,
74    'correct number of result files passed to filter';
75
76my $foo = slurp_file "$dump_path/DBICTest/Schema/1/Result/Foo.pm";
77ok(! -e "$dump_path/DBICTest/Schema/1.pm",
78     "No package means no file written");
79ok($original_class_data{"DBICTest::Schema::1"},
80     "Even though we processed the missing class");
81like($foo, qr/# Created by .* THE FIRST PART/s,
82     "We get the whole autogenerated text");
83like($foo, qr/Kilroy was here/, "Can insert text");
84
85DBICTest::Schema::2->connect($make_dbictest_db::dsn);
86
87$foo = slurp_file "$dump_path/DBICTest/Schema/2/Result/Foo.pm";
88
89like $foo, qr/Kilroy was here/,
90    "Can insert text via command filter";
91
92END { rmtree($dump_path, 1, 1); }
93