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