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