X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F30sqlt-diff.t;h=90abd7d22e5c6cde97c55d5a21f62b24919723e8;hb=124b192cb3e01a3fe6441874c29918609d24de65;hp=ca459a15371eac4a06bf6d0336bb99d0892534dd;hpb=ed6f968ad762ce9a41863f27c0c37f1b13ec8248;p=dbsrgits%2FSQL-Translator.git diff --git a/t/30sqlt-diff.t b/t/30sqlt-diff.t index ca459a1..90abd7d 100644 --- a/t/30sqlt-diff.t +++ b/t/30sqlt-diff.t @@ -4,32 +4,96 @@ use strict; use File::Spec::Functions qw(catfile updir tmpdir); -use File::Temp qw(tempfile); use FindBin qw($Bin); use Test::More; +use Test::SQL::Translator qw(maybe_plan); -my @script = qw(blib script sqlt-diff); +my @script = qw(script sqlt-diff-old); my @create1 = qw(data sqlite create.sql); my @create2 = qw(data sqlite create2.sql); -my $sqlt_diff = (-d "blib") - ? catfile($Bin, updir, @script) - : catfile($Bin, @script); +my $sqlt_diff = catfile($Bin, updir, @script); +my $create1 = catfile($Bin, @create1); +my $create2 = catfile($Bin, @create2); -my $create1 = (-d "t") - ? catfile($Bin, @create1) - : catfile($Bin, "t", @create1); +BEGIN { + maybe_plan(21, + 'SQL::Translator::Parser::SQLite', + 'SQL::Translator::Parser::MySQL', + 'SQL::Translator::Parser::Oracle', + ); +} -my $create2 = (-d "t") - ? catfile($Bin, @create2) - : catfile($Bin, "t", @create2); +ok(-e $sqlt_diff, 'Found sqlt-diff script'); +my @cmd = ($^X, $sqlt_diff, "$create1=SQLite", "$create2=SQLite"); +my $out = `@cmd`; -plan tests => 2; +like($out, qr/-- Target database SQLite is untested/, "Detected 'untested' comment"); +like($out, qr/ALTER TABLE person CHANGE iq/, "Detected altered 'iq' field"); +like($out, qr/ALTER TABLE person ADD is_rock_star/, + "Detected missing rock star field"); + +@cmd = ($^X, $sqlt_diff, "$create1=SQLite", "$create1=SQLite"); +$out = `@cmd`; -ok(-e $sqlt_diff); -my @cmd = ($sqlt_diff, "$create1=SQLite", "$create2=SQLite"); +like($out, qr/There were no differences/, "Properly detected no differences"); -close STDERR; -my $out = `@cmd`; +my @mysql_create1 = qw(data mysql create.sql); +my @mysql_create2 = qw(data mysql create2.sql); + +my $mysql_create1 = (-d "t") + ? catfile($Bin, @mysql_create1) + : catfile($Bin, "t", @mysql_create1); + +my $mysql_create2 = (-d "t") + ? catfile($Bin, @mysql_create2) + : catfile($Bin, "t", @mysql_create2); + +# Test for differences +@cmd = ($^X, $sqlt_diff, "$mysql_create1=MySQL", "$mysql_create2=MySQL"); +$out = `@cmd`; + +unlike($out, qr/-- Target database MySQL is untested/, "Did not detect 'untested' comment"); +like($out, qr/ALTER TABLE person CHANGE person_id/, "Detected altered 'person_id' field"); +like($out, qr/ALTER TABLE person CHANGE iq/, "Detected altered 'iq' field"); +like($out, qr/ALTER TABLE person CHANGE name/, "Detected altered 'name' field"); +like($out, qr/ALTER TABLE person CHANGE age/, "Detected altered 'age' field"); +like($out, qr/ALTER TABLE person ADD is_rock_star/, + "Detected missing rock star field"); +like($out, qr/ALTER TABLE person ADD UNIQUE UC_person_id/, + "Detected missing unique constraint"); +like($out, qr/CREATE UNIQUE INDEX unique_name/, + "Detected unique index with different name"); +like($out, qr/ALTER TABLE person ENGINE=InnoDB;/, + "Detected altered table option"); +like($out, qr/ALTER TABLE employee DROP FOREIGN KEY FK5302D47D93FE702E/, + "Detected drop foreign key"); +like($out, qr/ALTER TABLE employee ADD CONSTRAINT FK5302D47D93FE702E_diff/, + "Detected add constraint"); +unlike($out, qr/ALTER TABLE employee ADD PRIMARY KEY/, "Primary key looks different when it shouldn't"); + +# Test for sameness +@cmd = ($^X, $sqlt_diff, "$mysql_create1=MySQL", "$mysql_create1=MySQL"); +$out = `@cmd`; + +like($out, qr/There were no differences/, "Properly detected no differences"); + +my @oracle_create1 = qw(data oracle create.sql); +my @oracle_create2 = qw(data oracle create2.sql); + +my $oracle_create1 = (-d "t") + ? catfile($Bin, @oracle_create1) + : catfile($Bin, "t", @oracle_create1); + +my $oracle_create2 = (-d "t") + ? catfile($Bin, @oracle_create2) + : catfile($Bin, "t", @oracle_create2); + +@cmd = ($^X, $sqlt_diff, "$oracle_create1=Oracle", "$oracle_create2=Oracle"); +$out = `@cmd`; -like($out, qr/ is missing field/, "Detected missing field 'lemon'"); +unlike($out, qr/-- Target database Oracle is untested/, "Did not detect 'untested' comment"); +like($out, qr/ALTER TABLE TABLE1 DROP FOREIGN KEY/, + "Detected drop foreign key"); +like($out, qr/ALTER TABLE TABLE1 ADD CONSTRAINT/, + "Detected add constraint");