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