Improve trigger 'scope' attribute support (RT#119997)
[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           comments:
91             - field comment 1
92             - field comment 2
93           data_type: INTEGER
94           default_value: ~
95           is_auto_increment: 1
96           is_nullable: 0
97           is_primary_key: 1
98           is_unique: 0
99           name: person_id
100           order: 1
101           size:
102             - 0
103         weight:
104           data_type: double
105           default_value: ~
106           is_nullable: 1
107           is_primary_key: 0
108           is_unique: 0
109           name: weight
110           order: 4
111           size:
112             - 11
113             - 2
114       indices: []
115       name: person
116       options: []
117       order: 1
118     pet:
119       constraints:
120         - deferrable: 1
121           expression: ''
122           fields: []
123           match_type: ''
124           name: ''
125           on_delete: ''
126           on_update: ''
127           options: []
128           reference_fields: []
129           reference_table: ''
130           type: CHECK
131         - deferrable: 1
132           expression: ''
133           fields:
134             - pet_id
135             - person_id
136           match_type: ''
137           name: ''
138           on_delete: ''
139           on_update: ''
140           options: []
141           reference_fields: []
142           reference_table: ''
143           type: PRIMARY KEY
144         - deferrable: 1
145           expression: ''
146           fields:
147             - person_id
148           match_type: ''
149           name: ''
150           on_delete: ''
151           on_update: ''
152           options: []
153           reference_fields:
154             - person_id
155           reference_table: person
156           type: FOREIGN KEY
157       fields:
158         age:
159           data_type: int
160           default_value: ~
161           is_nullable: 1
162           is_primary_key: 0
163           is_unique: 0
164           name: age
165           order: 4
166           size:
167             - 0
168         name:
169           data_type: varchar
170           default_value: ~
171           is_nullable: 1
172           is_primary_key: 0
173           is_unique: 0
174           name: name
175           order: 3
176           size:
177             - 30
178         person_id:
179           data_type: int
180           default_value: ~
181           is_nullable: 0
182           is_primary_key: 1
183           is_unique: 0
184           name: person_id
185           order: 2
186           size:
187             - 0
188         pet_id:
189           data_type: int
190           default_value: ~
191           is_nullable: 0
192           is_primary_key: 1
193           is_unique: 0
194           name: pet_id
195           order: 1
196           size:
197             - 0
198       indices: []
199       name: pet
200       options: []
201       order: 2
202   triggers:
203     pet_trig:
204       action:
205         for_each: ~
206         steps:
207           - update pet set name=name
208         when: ~
209       database_events:
210         - insert
211       fields: ~
212       name: pet_trig
213       on_table: pet
214       order: 1
215       perform_action_when: after
216       scope: row
217   views:
218     person_pet:
219       fields: []
220       name: person_pet
221       order: 1
222       sql: |
223         select pr.person_id, pr.name as person_name, pt.name as pet_name
224           from   person pr, pet pt
225           where  person.person_id=pet.pet_id
226 translator:
227   add_drop_table: 0
228   filename: ~
229   no_comments: 0
230   parser_args: {}
231   parser_type: SQL::Translator::Parser::SQLite
232   producer_args: {}
233   producer_type: SQL::Translator::Producer::YAML
234   show_warnings: 0
235   trace: 0
236   version: $sqlt_version
237 YAML
238
239 my $file = "$Bin/data/sqlite/create.sql";
240 open FH, "<$file" or die "Can't read '$file': $!\n";
241 local $/;
242 my $data = <FH>;
243 my $tr   = SQL::Translator->new(
244     parser   => 'SQLite',
245     producer => 'YAML',
246     data     => $data,
247 );
248
249 my $out;
250 ok( $out = $tr->translate, 'Translate SQLite to YAML' );
251 eq_or_diff( $out, $yaml, 'YAML matches expected' );