Commit | Line | Data |
f992cfaa |
1 | #!/usr/bin/perl -w |
55e462b4 |
2 | # vim:filetype=perl |
3 | |
4 | # Before `make install' is performed this script should be runnable with |
5 | # `make test'. After `make install' it should work as `perl test.pl' |
6 | |
7 | use strict; |
8 | use FindBin qw/$Bin/; |
9 | use Data::Dumper; |
10 | |
11 | # run with -d for debug |
12 | my %opt; |
13 | BEGIN { map { $opt{$_}=1 if s/^-// } @ARGV; } |
14 | use constant DEBUG => (exists $opt{d} ? 1 : 0); |
15 | |
16 | use Test::More; |
090d438c |
17 | use Test::SQL::Translator; |
55e462b4 |
18 | use SQL::Translator; |
19 | use SQL::Translator::Schema::Constants; |
20 | |
55e462b4 |
21 | # Testing 1,2,3,.. |
22 | #============================================================================= |
23 | |
2d691ec1 |
24 | BEGIN { |
25 | maybe_plan(321, |
26 | 'SQL::Translator::Parser::XML::XMI::SQLFairy', |
27 | 'SQL::Translator::Producer::MySQL'); |
28 | } |
55e462b4 |
29 | |
30 | my $testschema = "$Bin/data/xmi/OrderDB.sqlfairy.poseidon2.xmi"; |
31 | die "Can't find test schema $testschema" unless -e $testschema; |
32 | |
33 | my $obj; |
34 | $obj = SQL::Translator->new( |
35 | filename => $testschema, |
36 | from => 'XML-XMI-SQLFairy', |
37 | to => 'MySQL', |
38 | debug => DEBUG, |
39 | show_warnings => 1, |
40 | ); |
41 | my $sql = $obj->translate; |
42 | ok( $sql, "Got some SQL"); |
43 | print $sql if DEBUG; |
090d438c |
44 | print "Translator:",Dumper($obj) if DEBUG; |
55e462b4 |
45 | |
46 | |
47 | # |
48 | # Test the schema |
49 | # |
50 | my $scma = $obj->schema; |
51 | is( $scma->is_valid, 1, 'Schema is valid' ); |
52 | my @tblnames = map {$_->name} $scma->get_tables; |
53 | is(scalar(@{$scma->get_tables}), scalar(@tblnames), "Right number of tables"); |
ae15bb99 |
54 | is_deeply( \@tblnames, |
55 | [qw/Order OrderLine Customer ContactDetails ContactDetails_Customer/] |
56 | ,"tables"); |
55e462b4 |
57 | |
090d438c |
58 | table_ok( $scma->get_table("Customer"), { |
55e462b4 |
59 | name => "Customer", |
60 | fields => [ |
61 | { |
55e462b4 |
62 | name => "name", |
63 | data_type => "VARCHAR", |
090d438c |
64 | size => 255, |
55e462b4 |
65 | default_value => undef, |
66 | is_nullable => 0, |
67 | is_primary_key => 0, |
68 | }, |
69 | { |
70 | name => "email", |
71 | data_type => "VARCHAR", |
090d438c |
72 | size => 255, |
55e462b4 |
73 | default_value => undef, |
74 | is_nullable => 1, |
75 | is_primary_key => 0, |
76 | }, |
f992cfaa |
77 | { |
78 | name => "CustomerID", |
79 | data_type => "INT", |
090d438c |
80 | size => 10, |
f992cfaa |
81 | default_value => undef, |
82 | is_nullable => 0, |
83 | is_primary_key => 1, |
090d438c |
84 | is_auto_increment => 1, |
f992cfaa |
85 | }, |
55e462b4 |
86 | ], |
090d438c |
87 | constraints => [ |
88 | { |
89 | type => "PRIMARY KEY", |
90 | fields => ["CustomerID"], |
91 | }, |
55e462b4 |
92 | #{ |
090d438c |
93 | # name => "UniqueEmail", |
94 | # type => "UNIQUE", |
95 | # fields => ["email"], |
96 | #}, |
97 | ], |
98 | }); |
55e462b4 |
99 | |
090d438c |
100 | table_ok( $scma->get_table("ContactDetails_Customer"), { |
ae15bb99 |
101 | name => "ContactDetails_Customer", |
102 | fields => [ |
103 | { |
104 | name => "ContactDetailsID", |
105 | data_type => "INT", |
090d438c |
106 | size => 10, |
ae15bb99 |
107 | default_value => undef, |
108 | is_nullable => 0, |
109 | is_primary_key => 1, |
110 | is_auto_increment => 0, |
090d438c |
111 | is_foreign_key => 1, |
ae15bb99 |
112 | }, |
113 | { |
114 | name => "CustomerID", |
115 | data_type => "INT", |
090d438c |
116 | size => 10, |
ae15bb99 |
117 | default_value => undef, |
118 | is_nullable => 0, |
119 | is_primary_key => 1, |
120 | is_auto_increment => 0, |
090d438c |
121 | is_foreign_key => 1, |
ae15bb99 |
122 | }, |
123 | ], |
090d438c |
124 | constraints => [ |
125 | { |
126 | type => "FOREIGN KEY", |
127 | fields => ["ContactDetailsID"], |
128 | reference_table => "ContactDetails", |
129 | reference_fields => ["ContactDetailsID"], |
130 | }, |
131 | { |
132 | type => "FOREIGN KEY", |
133 | fields => ["CustomerID"], |
134 | reference_table => "Customer", |
135 | reference_fields => ["CustomerID"], |
136 | }, |
137 | { |
138 | type => "PRIMARY KEY", |
139 | fields => ["ContactDetailsID","CustomerID"], |
140 | }, |
141 | ], |
142 | }); |
ae15bb99 |
143 | |
090d438c |
144 | table_ok( $scma->get_table("ContactDetails"), { |
ae15bb99 |
145 | name => "ContactDetails", |
146 | fields => [ |
147 | { |
148 | name => "address", |
149 | data_type => "VARCHAR", |
150 | size => "255", |
151 | default_value => undef, |
152 | is_nullable => 1, |
153 | is_primary_key => 0, |
154 | }, |
155 | { |
156 | name => "telephone", |
157 | data_type => "VARCHAR", |
158 | size => "255", |
159 | default_value => undef, |
160 | is_nullable => 1, |
161 | is_primary_key => 0, |
162 | }, |
163 | { |
164 | name => "ContactDetailsID", |
165 | data_type => "INT", |
090d438c |
166 | size => 10, |
ae15bb99 |
167 | default_value => undef, |
168 | is_nullable => 0, |
169 | is_primary_key => 1, |
170 | is_auto_increment => 1, |
171 | }, |
172 | ], |
090d438c |
173 | constraints => [ |
174 | { |
175 | type => "PRIMARY KEY", |
176 | fields => ["ContactDetailsID"], |
177 | }, |
178 | ], |
179 | }); |
ae15bb99 |
180 | |
090d438c |
181 | table_ok( $scma->get_table("Order"), { |
55e462b4 |
182 | name => "Order", |
183 | fields => [ |
184 | { |
f992cfaa |
185 | name => "invoiceNumber", |
186 | data_type => "INT", |
090d438c |
187 | size => 10, |
55e462b4 |
188 | default_value => undef, |
189 | is_nullable => 0, |
f992cfaa |
190 | is_primary_key => 1, |
090d438c |
191 | is_auto_increment => 1, |
55e462b4 |
192 | }, |
193 | { |
f992cfaa |
194 | name => "orderDate", |
195 | data_type => "DATE", |
55e462b4 |
196 | default_value => undef, |
197 | is_nullable => 0, |
f992cfaa |
198 | is_primary_key => 0, |
55e462b4 |
199 | }, |
200 | { |
f992cfaa |
201 | name => "CustomerID", |
55e462b4 |
202 | data_type => "INT", |
090d438c |
203 | size => 10, |
55e462b4 |
204 | default_value => undef, |
205 | is_nullable => 0, |
206 | is_primary_key => 0, |
207 | is_foreign_key => 1, |
208 | }, |
209 | ], |
090d438c |
210 | constraints => [ |
211 | { |
212 | type => "PRIMARY KEY", |
213 | fields => ["invoiceNumber"], |
214 | }, |
215 | { |
216 | type => "FOREIGN KEY", |
217 | fields => ["CustomerID"], |
218 | reference_table => "Customer", |
219 | reference_fields => ["CustomerID"], |
220 | }, |
221 | ], |
222 | # TODO |
223 | #indexes => [ |
224 | # { |
225 | # name => "idxOrderDate", |
226 | # type => "INDEX", |
227 | # fields => ["orderDate"], |
228 | # }, |
229 | #], |
230 | }); |
231 | |
232 | |
233 | table_ok( $scma->get_table("OrderLine"), { |
55e462b4 |
234 | name => "OrderLine", |
235 | fields => [ |
236 | { |
237 | name => "lineNumber", |
238 | data_type => "INT", |
090d438c |
239 | size => 255, |
55e462b4 |
240 | default_value => 1, |
241 | is_nullable => 0, |
f992cfaa |
242 | is_primary_key => 0, |
55e462b4 |
243 | }, |
244 | { |
245 | name => "quantity", |
246 | data_type => "INT", |
090d438c |
247 | size => 255, |
55e462b4 |
248 | default_value => 1, |
249 | is_nullable => 0, |
250 | is_primary_key => 0, |
251 | }, |
252 | { |
f992cfaa |
253 | name => "OrderLineID", |
254 | data_type => "INT", |
090d438c |
255 | size => 10, |
f992cfaa |
256 | default_value => undef, |
257 | is_nullable => 0, |
258 | is_primary_key => 1, |
090d438c |
259 | is_auto_increment => 1, |
f992cfaa |
260 | }, |
261 | { |
262 | name => "invoiceNumber", |
55e462b4 |
263 | data_type => "INT", |
090d438c |
264 | size => 10, |
55e462b4 |
265 | default_value => undef, |
266 | is_nullable => 1, |
f992cfaa |
267 | is_primary_key => 1, |
55e462b4 |
268 | }, |
269 | ], |
090d438c |
270 | constraints => [ |
271 | { |
272 | type => "PRIMARY KEY", |
273 | fields => ["OrderLineID","invoiceNumber"], |
274 | }, |
275 | { |
276 | type => "FOREIGN KEY", |
277 | fields => ["invoiceNumber"], |
278 | reference_table => "Order", |
279 | reference_fields => ["invoiceNumber"], |
280 | }, |
281 | ], |
282 | }); |