3 use Test::More tests => 18;
7 use_ok 'Support::TestSetup';
8 use_ok 'SL::Controller::Helper::ParseFilter';
10 undef *::any; # Test::Deep exports any (for junctions) and MoreCommon exports any (like in List::Moreutils)
12 Support::TestSetup::login();
13 my ($filter, $expected);
16 my ($filter, $expect, $msg, %params) = @_;
17 my $target = delete $params{target};
18 my $args = { parse_filter($filter, %params) };
19 my $got = $args; $target ||= '';
20 $got = $filter if $target =~ /filter/;
21 $got = $params{launder_to} if $target =~ /launder/;
27 print STDERR "expected => ", Dumper($expect), "\ngot: => ", Dumper($got), $/;
49 query => [ 'customer.name' => 'rainer' ],
50 with_objects => [ 'customer' ],
51 }, 'joining customers';
60 query => [ 'customer.chart.accno' => 'test' ],
61 with_objects => bag( 'customer', 'customer.chart' ),
65 'customer:substr' => 'Meyer'
67 query => [ customer => '%Meyer%' ]
68 }, 'simple filter substr';
71 'customer::ilike' => 'Meyer'
73 query => [ customer => { ilike => 'Meyer' } ]
74 }, 'simple method ilike';
79 'accno:tail::like' => '1200'
84 query => [ 'customer.chart.accno' => { like => '%1200' } ],
85 with_objects => bag('customer', 'customer.chart' ),
100 'invoice.customer.name' => 'test',
101 'customer.name' => 'test',
103 'with_objects' => bag( 'invoice.customer', 'customer', 'invoice' )
104 }, 'object in more than one relationship';
107 'orddate:date::' => 'lt',
108 'orddate:date' => '20.3.2010',
111 'orddate' => { 'lt' => isa('DateTime') }
114 }, 'method dispatch and date constructor';
121 query => [ id => [ 123,125,157 ] ],
122 }, 'arrays as value';
125 'sellprice:number' => [
126 '123,4', '2,34', '0,4',
130 sellprice => [ 123.4, 2.34, 0.4 ],
132 }, 'arrays with filter';
135 ########### laundering
138 'sellprice:number' => [
139 '123,4', '2,34', '0,4',
142 'sellprice:number' => [ '123,4', '2,34', '0,4' ],
143 'sellprice_number' => [ '123,4', '2,34', '0,4' ],
144 }, 'laundering with array', target => 'filter';
147 'sellprice:number' => [
148 '123,4', '2,34', '0,4',
155 }, 'laundering into launder does not alter filter', target => 'filter', launder_to => {};
160 'sellprice:number' => '123,4',
164 'sellprice:number' => '123,4',
165 'sellprice_number' => '123,4'
167 }, 'deep laundering', target => 'filter';
172 'sellprice:number' => '123,4',
176 'sellprice_number' => '123,4'
178 }, 'deep laundering, check for laundered hash', target => 'launder', launder_to => { };
185 'name:substr::ilike' => 'test',
189 query => [ 'order.customer.name' => { ilike => '%test%' } ],
190 with_objects => bag('order.customer', 'order'),
191 }, 'sub objects have to retain their prefix';