SQLite and YAML tests broken, fixed
[dbsrgits/SQL-Translator.git] / t / 24yaml.t
1 #!/usr/local/bin/perl
2 # vim: set ft=perl:
3
4 use strict;
5 use Test::More;
6 use Test::Differences;
7 use Test::SQL::Translator qw(maybe_plan);
8 use SQL::Translator;
9 use FindBin '$Bin';
10
11 BEGIN {
12     maybe_plan(2,
13         'SQL::Translator::Parser::SQLite',
14         'SQL::Translator::Producer::YAML');
15 }
16
17 my $sqlt_version = $SQL::Translator::VERSION;
18 my $yaml = <<YAML;
19 ---
20 schema:
21   procedures: {}
22   tables:
23     person:
24       comments: ''
25       constraints:
26         - deferrable: 1
27           expression: ''
28           fields:
29             - person_id
30           match_type: ''
31           name: ''
32           on_delete: ''
33           on_update: ''
34           options: []
35           reference_fields: []
36           reference_table: ''
37           type: PRIMARY KEY
38         - deferrable: 1
39           expression: ''
40           fields:
41             - name
42           match_type: ''
43           name: u_name
44           on_delete: ''
45           on_update: ''
46           options: []
47           reference_fields: []
48           reference_table: ''
49           type: UNIQUE
50       fields:
51         age:
52           comments: ''
53           data_type: integer
54           default_value: ~
55           extra: {}
56           is_nullable: 1
57           is_primary_key: 0
58           is_unique: 0
59           name: age
60           order: 3
61           size:
62             - 0
63         description:
64           comments: ''
65           data_type: text
66           default_value: ~
67           extra: {}
68           is_nullable: 1
69           is_primary_key: 0
70           is_unique: 0
71           name: description
72           order: 6
73           size:
74             - 0
75         iq:
76           comments: ''
77           data_type: tinyint
78           default_value: 0
79           extra: {}
80           is_nullable: 1
81           is_primary_key: 0
82           is_unique: 0
83           name: iq
84           order: 5
85           size:
86             - 0
87         name:
88           comments: ''
89           data_type: varchar
90           default_value: ~
91           extra: {}
92           is_nullable: 0
93           is_primary_key: 0
94           is_unique: 1
95           name: name
96           order: 2
97           size:
98             - 20
99         person_id:
100           comments: ''
101           data_type: INTEGER
102           default_value: ~
103           extra: {}
104           is_nullable: 0
105           is_primary_key: 1
106           is_unique: 0
107           name: person_id
108           order: 1
109           size:
110             - 0
111         weight:
112           comments: ''
113           data_type: double
114           default_value: ~
115           extra: {}
116           is_nullable: 1
117           is_primary_key: 0
118           is_unique: 0
119           name: weight
120           order: 4
121           size:
122             - 11
123             - 2
124       indices: []
125       name: person
126       options: []
127       order: 1
128     pet:
129       comments: ''
130       constraints:
131         - deferrable: 1
132           expression: ''
133           fields: ''
134           match_type: ''
135           name: ''
136           on_delete: ''
137           on_update: ''
138           options: []
139           reference_fields: []
140           reference_table: ''
141           type: CHECK
142         - deferrable: 1
143           expression: ''
144           fields:
145             - pet_id
146             - person_id
147           match_type: ''
148           name: ''
149           on_delete: ''
150           on_update: ''
151           options: []
152           reference_fields: []
153           reference_table: ''
154           type: PRIMARY KEY
155       fields:
156         age:
157           comments: ''
158           data_type: int
159           default_value: ~
160           extra: {}
161           is_nullable: 1
162           is_primary_key: 0
163           is_unique: 0
164           name: age
165           order: 10
166           size:
167             - 0
168         name:
169           comments: ''
170           data_type: varchar
171           default_value: ~
172           extra: {}
173           is_nullable: 1
174           is_primary_key: 0
175           is_unique: 0
176           name: name
177           order: 9
178           size:
179             - 30
180         person_id:
181           comments: ''
182           data_type: int
183           default_value: ~
184           extra: {}
185           is_nullable: 0
186           is_primary_key: 1
187           is_unique: 0
188           name: person_id
189           order: 8
190           size:
191             - 0
192         pet_id:
193           comments: ''
194           data_type: int
195           default_value: ~
196           extra: {}
197           is_nullable: 0
198           is_primary_key: 1
199           is_unique: 0
200           name: pet_id
201           order: 7
202           size:
203             - 0
204       indices: []
205       name: pet
206       options: []
207       order: 2
208   triggers:
209     pet_trig:
210       action:
211         for_each: ~
212         steps:
213           - update name=name
214         when: ~
215       database_event: insert
216       fields: ~
217       name: pet_trig
218       on_table: pet
219       order: 1
220       perform_action_when: after
221   views:
222     person_pet:
223       fields: ''
224       name: person_pet
225       order: 1
226       sql: |
227         select pr.person_id, pr.name as person_name, pt.name as pet_name
228           from   person pr, pet pt
229           where  person.person_id=pet.pet_id
230 translator:
231   add_drop_table: 0
232   filename: ~
233   no_comments: 0
234   parser_args: {}
235   parser_type: SQL::Translator::Parser::SQLite
236   producer_args: {}
237   producer_type: SQL::Translator::Producer::YAML
238   show_warnings: 0
239   trace: 0
240   version: $sqlt_version
241 YAML
242
243 my $file = "$Bin/data/sqlite/create.sql";
244 open FH, "<$file" or die "Can't read '$file': $!\n";
245 local $/;
246 my $data = <FH>;
247 my $tr   = SQL::Translator->new(
248     parser   => 'SQLite',
249     producer => 'YAML',
250     data     => $data,
251 #    debug    => 1,
252 #    trace    => 1,
253 );
254
255 my $out;
256 ok( $out = $tr->translate, 'Translate SQLite to YAML' );
257 eq_or_diff( $out, $yaml, 'YAML matches expected' );