Add sqlite roundtrip test (probably need to do the same for the rest of the parser...
[dbsrgits/SQL-Translator.git] / t / 27sqlite-roundtrip.t
1 #!/usr/bin/perl
2
3 use warnings;
4 use strict;
5 use Test::More;
6 use Test::SQL::Translator qw(maybe_plan);
7 use FindBin qw/$Bin/;
8
9 use SQL::Translator;
10 use SQL::Translator::Schema::Constants;
11
12 BEGIN {
13     maybe_plan(7,
14         'SQL::Translator::Parser::SQLite',
15         'SQL::Translator::Producer::SQLite',
16     );
17 }
18
19 my $file = "$Bin/data/sqlite/create.sql";
20
21 {
22     local $/;
23     open my $fh, "<$file" or die "Can't read file '$file': $!\n";
24     my $data = <$fh>;
25
26     my $t = SQL::Translator->new;
27
28     $t->translate (
29         parser => 'SQLite',
30         data => \$data,
31     );
32     my $schema1 = $t->schema;
33     isa_ok ($schema1, 'SQL::Translator::Schema', 'First parser pass produced a schema');
34
35
36     my $data2 = $t->translate (
37         producer => 'SQLite',
38     );
39     like ($data2, qr/BEGIN.+COMMIT/is, 'Received some meaningful output from the producer');
40
41     # get a new translator
42     $t = SQL::Translator->new;
43
44     $t->translate (
45         parser => 'SQLite',
46         data => \$data2,
47     );
48     my $schema2 = $t->schema;
49     isa_ok ($schema2, 'SQL::Translator::Schema', 'Second parser pass produced a schema');
50
51     my @t1 = $schema1->get_tables;
52     my @t2 = $schema2->get_tables;
53
54     my @v1 = $schema1->get_views;
55     my @v2 = $schema2->get_views;
56
57     my @g1 = $schema1->get_triggers;
58     my @g2 = $schema2->get_triggers;
59
60     is (@t2, @t1, 'Equal amount of tables');
61
62     is_deeply (
63         [ map { $_->name } (@t1) ],
64         [ map { $_->name } (@t2) ],
65         'Table names match',
66     );
67
68     is (@v2, @v1, 'Equal amount of views');
69
70     is (@g2, @g1, 'Equal amount of triggers');
71 }