Make maybe_plan insufficent-version-aware
[dbsrgits/SQL-Translator.git] / t / 36-filters.t
CommitLineData
185c34d5 1#!/usr/bin/perl -w
2# vim:filetype=perl
3
44eb9098 4#=============================================================================
5# Test Package based filters that oks when called.
6package SQL::Translator::Filter::Ok;
7use strict;
8
9sub filter { Test::More::pass(@_) }
10
11# Hack to allow sqlt to see our module as it wasn't loaded from a .pm
12$INC{'SQL/Translator/Filter/Ok.pm'} = 'lib/SQL/Translator/Filter/Ok.pm';
185c34d5 13
185c34d5 14#=============================================================================
44eb9098 15# SQL::Translator::Filter::HelloWorld - Test filter in a package
da06ac74 16package # hide from cpan
17 SQL::Translator::Filter::HelloWorld;
185c34d5 18
19use strict;
185c34d5 20
21sub filter {
44eb9098 22 my ($schema,%args) = (shift,@_);
185c34d5 23
44eb9098 24 my $greeting = $args{greeting} || "Hello";
25 my $newtable = "${greeting}World";
26 $schema->add_table( name => $newtable );
185c34d5 27}
28
29# Hack to allow sqlt to see our module as it wasn't loaded from a .pm
30$INC{'SQL/Translator/Filter/HelloWorld.pm'}
31 = 'lib/SQL/Translator/Filter/HelloWorld.pm';
32
33#=============================================================================
34
35package main;
36
37use strict;
38use Test::More;
39use Test::Exception;
40use Test::SQL::Translator qw(maybe_plan);
41
42use Data::Dumper;
43
44BEGIN {
11ad2df9 45 maybe_plan(16, 'Template', 'Test::Differences',
46 'SQL::Translator::Parser::YAML',
47 'SQL::Translator::Producer::YAML')
48
185c34d5 49}
50use Test::Differences;
51use SQL::Translator;
52
53my $in_yaml = qq{--- #YAML:1.0
54schema:
55 tables:
56 person:
57 name: person
58 fields:
59 first_name:
60 data_type: foovar
61 name: First_Name
62};
63
495c5c2f 64my $sqlt_version = $SQL::Translator::VERSION;
e7a96c90 65my $ans_yaml = qq{---
185c34d5 66schema:
67 procedures: {}
68 tables:
44eb9098 69 GdayWorld:
44eb9098 70 constraints: []
71 fields: {}
72 indices: []
73 name: GdayWorld
74 options: []
75 order: 3
185c34d5 76 HelloWorld:
185c34d5 77 constraints: []
78 fields: {}
79 indices: []
80 name: HelloWorld
81 options: []
82 order: 2
83 PERSON:
185c34d5 84 constraints: []
85 fields:
86 first_name:
87 data_type: foovar
88 default_value: ~
185c34d5 89 is_nullable: 1
90 is_primary_key: 0
91 is_unique: 0
92 name: first_name
93 order: 1
94 size:
95 - 0
96 indices: []
97 name: PERSON
98 options: []
99 order: 1
100 triggers: {}
101 views: {}
102translator:
103 add_drop_table: 0
104 filename: ~
105 no_comments: 0
106 parser_args: {}
107 parser_type: SQL::Translator::Parser::YAML
108 producer_args: {}
109 producer_type: SQL::Translator::Producer::YAML
110 show_warnings: 1
111 trace: 0
495c5c2f 112 version: $sqlt_version
185c34d5 113};
114
115# Parse the test XML schema
116my $obj;
117$obj = SQL::Translator->new(
118 debug => 0,
119 show_warnings => 1,
120 parser => "YAML",
121 data => $in_yaml,
122 to => "YAML",
123 filters => [
124 # Check they get called ok
125 sub {
126 pass("Filter 1 called");
127 isa_ok($_[0],"SQL::Translator::Schema", "Filter 1, arg0 ");
44eb9098 128 is( $#_, 0, "Filter 1, got no args");
185c34d5 129 },
130 sub {
131 pass("Filter 2 called");
132 isa_ok($_[0],"SQL::Translator::Schema", "Filter 2, arg0 ");
44eb9098 133 is( $#_, 0, "Filter 2, got no args");
185c34d5 134 },
135
136 # Sub filter with args
137 [ sub {
138 pass("Filter 3 called");
139 isa_ok($_[0],"SQL::Translator::Schema", "Filter 3, arg0 ");
44eb9098 140 is( $#_, 2, "Filter 3, go 2 args");
141 is( $_[1], "hello", "Filter 3, arg1=hello");
142 is( $_[2], "world", "Filter 3, arg2=world");
185c34d5 143 },
44eb9098 144 hello => "world" ],
185c34d5 145
146 # Uppercase all the table names.
147 sub {
148 my $schema = shift;
149 foreach ($schema->get_tables) {
150 $_->name(uc $_->name);
151 }
152 },
153
154 # lowercase all the field names.
155 sub {
156 my $schema = shift;
157 foreach ( map { $_->get_fields } $schema->get_tables ) {
158 $_->name(lc $_->name);
159 }
160 },
161
162 # Filter from SQL::Translator::Filter::*
44eb9098 163 'Ok',
185c34d5 164 [ 'HelloWorld' ],
44eb9098 165 [ 'HelloWorld', greeting => 'Gday' ],
185c34d5 166 ],
167
168) or die "Failed to create translator object: ".SQL::Translator->error;
169
170my $out;
171lives_ok { $out = $obj->translate; } "Translate ran";
172is $obj->error, '' ,"No errors";
173ok $out ne "" ,"Produced something!";
174eq_or_diff $out, $ans_yaml ,"Output looks right";