Erzeugte PDF- und HTML-Varianten der Dokumentation
[kivitendo-erp.git] / t / controllers / helpers / parse_filter.t
index 5a1ca07..9d003c0 100644 (file)
@@ -1,28 +1,34 @@
 use lib 't';
 
-use Test::More tests => 13;
+use Test::More tests => 18;
 use Test::Deep;
 use Data::Dumper;
 
 use_ok 'Support::TestSetup';
 use_ok 'SL::Controller::Helper::ParseFilter';
 
+undef *::any; # Test::Deep exports any (for junctions) and MoreCommon exports any (like in List::Moreutils)
+
 Support::TestSetup::login();
 my ($filter, $expected);
 
-sub test ($$$) {
-  my $got = { parse_filter($_[0]) };
+sub test ($$$;%) {
+  my ($filter, $expect, $msg, %params) = @_;
+  my $target = delete $params{target};
+  my $args = { parse_filter($filter, %params) };
+  my $got  = $args; $target ||= '';
+     $got = $filter             if $target =~ /filter/;
+     $got = $params{launder_to} if $target =~ /launder/;
   cmp_deeply(
     $got,
-    $_[1],
-    $_[2]
+    $expect,
+    $msg,
   ) or do {
-    print STDERR "expected => ", Dumper($_[1]), "\ngot: => ", Dumper($got), $/;
+    print STDERR "expected => ", Dumper($expect), "\ngot: => ", Dumper($got), $/;
   }
 }
 
 test { }, {
-  query => []
 }, 'minimal test';
 
 test {
@@ -52,7 +58,7 @@ test {
   }
 }, {
   query => [ 'customer.chart.accno' => 'test' ],
-  with_objects => [ 'customer', 'chart' ],
+  with_objects => bag( 'customer', 'customer.chart' ),
 }, 'nested joins';
 
 test {
@@ -76,7 +82,7 @@ test {
 },
 {
   query => [ 'customer.chart.accno' => { like => '%1200' } ],
-  with_objects => ['customer', 'chart' ],
+  with_objects => bag('customer', 'customer.chart' ),
 }, 'all together';
 
 
@@ -94,10 +100,7 @@ test {
                'invoice.customer.name'  => 'test',
                'customer.name'          => 'test',
              }} ],
-  'with_objects' => [
-                      'invoice',
-                      'customer'
-                    ]
+  'with_objects' => bag( 'invoice.customer', 'customer', 'invoice' )
 }, 'object in more than one relationship';
 
 test {
@@ -128,3 +131,62 @@ test {
   ],
 }, 'arrays with filter';
 
+
+########### laundering
+
+test {
+  'sellprice:number' => [
+    '123,4', '2,34', '0,4',
+  ]
+}, {
+  'sellprice:number' => [ '123,4', '2,34', '0,4' ],
+  'sellprice_number' => [ '123,4', '2,34', '0,4' ],
+}, 'laundering with array', target => 'filter';
+
+my %args = (
+  'sellprice:number' => [
+    '123,4', '2,34', '0,4',
+  ],
+);
+test {
+  %args,
+}, {
+  %args
+}, 'laundering into launder does not alter filter', target => 'filter', launder_to => {};
+
+
+test {
+  part => {
+   'sellprice:number' => '123,4',
+  }
+}, {
+  part => {
+    'sellprice:number' => '123,4',
+    'sellprice_number' => '123,4'
+  }
+}, 'deep laundering', target => 'filter';
+
+
+test {
+  part => {
+   'sellprice:number' => '123,4',
+  }
+}, {
+  part => {
+    'sellprice_number' => '123,4'
+  }
+}, 'deep laundering, check for laundered hash', target => 'launder', launder_to => { };
+
+### bug: sub objects
+
+test {
+  order => {
+    customer => {
+      'name:substr::ilike' => 'test',
+    }
+  }
+}, {
+  query => [ 'order.customer.name' => { ilike => '%test%' } ],
+  with_objects => bag('order.customer', 'order'),
+}, 'sub objects have to retain their prefix';
+