X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=t%2Fcontrollers%2Fhelpers%2Fparse_filter.t;h=9d003c0453e55552f0a1d92e49c147e98ea8f303;hb=f8309cb7bc2507c19e17ec59c6c66dd7f49ea351;hp=5a1ca07288e592d466f4d71a743d8fe888a013f9;hpb=e340c9571ec7d544f038b4226ab98f6a8038bbfa;p=kivitendo-erp.git diff --git a/t/controllers/helpers/parse_filter.t b/t/controllers/helpers/parse_filter.t index 5a1ca0728..9d003c045 100644 --- a/t/controllers/helpers/parse_filter.t +++ b/t/controllers/helpers/parse_filter.t @@ -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'; +