3 use Test::More tests => 23;
7 use_ok 'Support::TestSetup';
8 use_ok 'SL::Controller::Helper::ParseFilter';
10 use SL::DB::OrderItem;
12 undef *::any; # Test::Deep exports any (for junctions) and MoreCommon exports any (like in List::Moreutils)
14 Support::TestSetup::login();
15 my ($filter, $expected);
18 my ($filter, $expect, $msg, %params) = @_;
19 my $target = delete $params{target};
20 my $args = { parse_filter($filter, %params) };
21 my $got = $args; $target ||= '';
22 $got = $filter if $target =~ /filter/;
23 $got = $params{launder_to} if $target =~ /launder/;
29 print STDERR "expected => ", Dumper($expect), "\ngot: => ", Dumper($got), $/;
51 query => [ 'customer.name' => 'rainer' ],
52 with_objects => [ 'customer' ],
53 }, 'joining customers';
62 query => [ 'customer.chart.accno' => 'test' ],
63 with_objects => bag( 'customer', 'customer.chart' ),
67 'customer:substr' => 'Meyer'
69 query => [ customer => '%Meyer%' ]
70 }, 'simple filter substr';
73 'customer::ilike' => 'Meyer'
75 query => [ customer => { ilike => 'Meyer' } ]
76 }, 'simple method ilike';
81 'accno:tail::like' => '1200'
86 query => [ 'customer.chart.accno' => { like => '%1200' } ],
87 with_objects => bag('customer', 'customer.chart' ),
102 'invoice.customer.name' => 'test',
103 'customer.name' => 'test',
105 'with_objects' => bag( 'invoice.customer', 'customer', 'invoice' )
106 }, 'object in more than one relationship';
109 'orddate:date::' => 'lt',
110 'orddate:date' => '20.3.2010',
113 'orddate' => { 'lt' => isa('DateTime') }
116 }, 'method dispatch and date constructor';
123 query => [ id => [ 123,125,157 ] ],
124 }, 'arrays as value';
127 'sellprice:number' => [
128 '123,4', '2,34', '0,4',
132 sellprice => [ 123.4, 2.34, 0.4 ],
134 }, 'arrays with filter';
137 ########### laundering
140 'sellprice:number' => [
141 '123,4', '2,34', '0,4',
144 'sellprice:number' => [ '123,4', '2,34', '0,4' ],
145 'sellprice_number' => [ '123,4', '2,34', '0,4' ],
146 }, 'laundering with array', target => 'filter';
149 'sellprice:number' => [
150 '123,4', '2,34', '0,4',
157 }, 'laundering into launder does not alter filter', target => 'filter', launder_to => {};
162 'sellprice:number' => '123,4',
166 'sellprice:number' => '123,4',
167 'sellprice_number' => '123,4'
169 }, 'deep laundering', target => 'filter';
174 'sellprice:number' => '123,4',
178 'sellprice_number' => '123,4'
180 }, 'deep laundering, check for laundered hash', target => 'launder', launder_to => { };
187 'name:substr::ilike' => 'test',
191 query => [ 'order.customer.name' => { ilike => '%test%' } ],
192 with_objects => bag('order.customer', 'order'),
193 }, 'sub objects have to retain their prefix';
195 ### class filter dispatch
205 }, 'object test simple', class => 'SL::DB::Manager::Part';
208 'type' => 'assembly',
213 }, 'object test without prefix', class => 'SL::DB::Manager::Part';
216 'part.type' => 'assembly',
221 }, 'object test with prefix', class => 'SL::DB::Manager::OrderItem';
224 'type' => [ 'part', 'assembly' ],
228 and => [ or => [ assembly => 0, assembly => undef ],
229 "!inventory_accno_id" => 0,
230 "!inventory_accno_id" => undef,
235 }, 'object test without prefix but complex value', class => 'SL::DB::Manager::Part';
238 'part.type' => [ 'part', 'assembly' ],
242 and => [ or => [ 'part.assembly' => 0, 'part.assembly' => undef ],
243 "!part.inventory_accno_id" => 0,
244 "!part.inventory_accno_id" => undef,
246 'part.assembly' => 1,
249 }, 'object test with prefix but complex value', class => 'SL::DB::Manager::OrderItem';