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