Improve trigger 'scope' attribute support (RT#119997)
[dbsrgits/SQL-Translator.git] / t / 17sqlfxml-producer.t
index 31bbf0c..7989e35 100644 (file)
@@ -40,6 +40,17 @@ use Test::Differences;
 use SQL::Translator;
 use SQL::Translator::Producer::XML::SQLFairy;
 
+# Due to formatters being able to change style, e.g. by entries in .rc files
+# in $HOME, the layout and or indent might differ slightly. As leading white
+# is not important in XML, strip it when comparing
+sub xml_equals
+{
+    my ($got, $expect, $msg) = (@_, "XML looks right");
+    $got    =~ s/^ +//gm;
+    $expect =~ s/^ +//gm;
+    eq_or_diff $got, $expect, $msg;
+}
+
 #
 # basic stuff
 #
@@ -105,7 +116,7 @@ ok("$xml" ne ""                             ,"Produced something!");
 print "XML:\n$xml" if DEBUG;
 # Strip sqlf header with its variable date so we diff safely
 $xml =~ s/^([^\n]*\n){7}//m;
-eq_or_diff $xml, $ans, "XML looks right";
+xml_equals $xml, $ans;
 
 } # end basic stuff
 
@@ -157,8 +168,8 @@ EOXML
     ok("$xml" ne ""                             ,"Produced something!");
     print "XML attrib_values=>1:\n$xml" if DEBUG;
     # Strip sqlf header with its variable date so we diff safely
-    $xml =~ s/^([^\n]*\n){7}//m; 
-    eq_or_diff $xml, $ans                       ,"XML looks right";
+    $xml =~ s/^([^\n]*\n){7}//m;
+    xml_equals $xml, $ans;
 } # end View
 
 #
@@ -172,7 +183,7 @@ $ans = <<EOXML;
 <schema name="" database="" xmlns="http://sqlfairy.sourceforge.net/sqlfairy.xml">
   <extra />
   <tables>
-    <table name="Basic" order="2">
+    <table name="Basic" order="1">
       <extra />
       <fields></fields>
       <indices></indices>
@@ -182,7 +193,7 @@ $ans = <<EOXML;
   </tables>
   <views></views>
   <triggers>
-    <trigger name="foo_trigger" database_event="insert" on_table="Basic" perform_action_when="after" order="1">
+    <trigger name="foo_trigger" database_events="insert" on_table="Basic" perform_action_when="after" order="1" scope="row">
       <action>update modified=timestamp();</action>
       <extra hello="world" />
     </trigger>
@@ -208,9 +219,10 @@ EOXML
     my $t                   = $s->add_trigger(
         name                => $name,
         perform_action_when => $perform_action_when,
-        database_event      => $database_event,
+        database_events     => [$database_event],
         table               => $table,
         action              => $action,
+        scope               => 'row',
         extra               => { hello => "world" },
     ) or die $s->error;
 
@@ -220,8 +232,8 @@ EOXML
     ok("$xml" ne ""                             ,"Produced something!");
     print "XML attrib_values=>1:\n$xml" if DEBUG;
     # Strip sqlf header with its variable date so we diff safely
-    $xml =~ s/^([^\n]*\n){7}//m; 
-    eq_or_diff $xml, $ans                       ,"XML looks right";
+    $xml =~ s/^([^\n]*\n){7}//m;
+    xml_equals $xml, $ans;
 } # end Trigger
 
 #
@@ -276,8 +288,8 @@ EOXML
     ok("$xml" ne ""                             ,"Produced something!");
     print "XML attrib_values=>1:\n$xml" if DEBUG;
     # Strip sqlf header with its variable date so we diff safely
-    $xml =~ s/^([^\n]*\n){7}//m; 
-    eq_or_diff $xml, $ans                       ,"XML looks right";
+    $xml =~ s/^([^\n]*\n){7}//m;
+    xml_equals $xml, $ans;
 } # end Procedure
 
 #
@@ -290,13 +302,21 @@ $ans = <<EOXML;
 <schema name="" database="" xmlns="http://sqlfairy.sourceforge.net/sqlfairy.xml">
   <extra />
   <tables>
-    <table name="Basic" order="3">
+    <table name="Basic" order="1">
       <extra />
       <fields>
-        <field name="foo" data_type="integer" size="10" is_nullable="1" is_auto_increment="0" is_primary_key="0" is_foreign_key="0" order="5">
+        <field name="foo" data_type="integer" size="10" is_nullable="1" is_auto_increment="0" is_primary_key="0" is_foreign_key="0" order="1">
           <extra ZEROFILL="1" />
           <comments></comments>
         </field>
+        <field name="bar" data_type="numeric" size="10,2" is_nullable="1" is_auto_increment="0" is_primary_key="0" is_foreign_key="0" order="2">
+          <extra />
+          <comments></comments>
+        </field>
+        <field name="baz" data_type="decimal" size="8,3" is_nullable="1" is_auto_increment="0" is_primary_key="0" is_foreign_key="0" order="3">
+          <extra />
+          <comments></comments>
+        </field>
       </fields>
       <indices></indices>
       <constraints></constraints>
@@ -326,6 +346,18 @@ EOXML
     ) or die $t->error;
     $f->extra(ZEROFILL => "1");
 
+    $t->add_field(
+        name      => "bar",
+        data_type => "numeric",
+        size      => "10,2",
+    ) or die $t->error;
+    $t->add_field(
+        name      => "baz",
+        data_type => "decimal",
+        size      => [8,3],
+    ) or die $t->error;
+
+
     # As we have created a Schema we give translate a dummy string so that
     # it will run the produce.
     lives_ok {$xml =$obj->translate("FOO");} "Translate (Field.extra) ran";
@@ -333,5 +365,5 @@ EOXML
     print "XML:\n$xml" if DEBUG;
     # Strip sqlf header with its variable date so we diff safely
     $xml =~ s/^([^\n]*\n){7}//m;
-    eq_or_diff $xml, $ans                       ,"XML looks right";
+    xml_equals $xml, $ans;
 } # end extra