Commit | Line | Data |
dde95f2c |
1 | use strict; |
7dc01f79 |
2 | use DBIx::Class::Schema::Loader; |
3 | use DBIx::Class::Schema::Loader::Utils 'slurp_file'; |
dde95f2c |
4 | use File::Path; |
7dc01f79 |
5 | use Test::More tests => 19; |
dde95f2c |
6 | use Test::Exception; |
7 | use lib qw(t/lib); |
8 | use make_dbictest_db; |
9 | use dbixcsl_test_dir qw/$tdir/; |
10 | |
dde95f2c |
11 | my $dump_path = "$tdir/dump"; |
12 | |
13 | my %original_class_data; |
14 | |
7dc01f79 |
15 | my ($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 |
66 | DBICTest::Schema::1->connect($make_dbictest_db::dsn); |
67 | |
7dc01f79 |
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"; |
dde95f2c |
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 | |
7dc01f79 |
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 | |
dde95f2c |
92 | END { rmtree($dump_path, 1, 1); } |