some changes to filter code
[dbsrgits/DBIx-Class-Schema-Loader.git] / t / 27filter_generated.t
CommitLineData
dde95f2c 1use strict;
7dc01f79 2use DBIx::Class::Schema::Loader;
3use DBIx::Class::Schema::Loader::Utils 'slurp_file';
dde95f2c 4use File::Path;
7dc01f79 5use Test::More tests => 19;
dde95f2c 6use Test::Exception;
7use lib qw(t/lib);
8use make_dbictest_db;
9use dbixcsl_test_dir qw/$tdir/;
10
dde95f2c 11my $dump_path = "$tdir/dump";
12
13my %original_class_data;
14
7dc01f79 15my ($schema_file_count, $result_file_count);
16
dde95f2c 17{
18 package DBICTest::Schema::1;
7dc01f79 19 use Test::More;
20 use base 'DBIx::Class::Schema::Loader';
dde95f2c 21 __PACKAGE__->loader_options(
22 dump_directory => $dump_path,
7dc01f79 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
dde95f2c 44 $original_class_data{$class} = $text;
45 if ($class =~ /::1$/) {
46 $text = "No Gotcha!";
47 }
48 else {
7dc01f79 49 $text .= q{my $foo = "Kilroy was here";};
dde95f2c 50 }
51 return $text;
52 },
53 );
54}
55
7dc01f79 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
dde95f2c 66DBICTest::Schema::1->connect($make_dbictest_db::dsn);
67
7dc01f79 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";
dde95f2c 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
7dc01f79 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
dde95f2c 92END { rmtree($dump_path, 1, 1); }