use lib 't';
-use Test::More tests => 17;
+use Test::More tests => 28;
use Test::Deep;
use Data::Dumper;
use_ok 'Support::TestSetup';
use_ok 'SL::Controller::Helper::ParseFilter';
+use SL::DB::OrderItem;
+
undef *::any; # Test::Deep exports any (for junctions) and MoreCommon exports any (like in List::Moreutils)
Support::TestSetup::login();
my ($filter, $expect, $msg, %params) = @_;
my $target = delete $params{target};
my $args = { parse_filter($filter, %params) };
- my $got = $args;
+ my $got = $args; $target ||= '';
$got = $filter if $target =~ /filter/;
$got = $params{launder_to} if $target =~ /launder/;
cmp_deeply(
name => 'Test',
whut => 'moof',
}, {
- query => [ %{{
+ query => bag(
name => 'Test',
whut => 'moof'
- }} ],
+ ),
}, 'basic test';
test {
}
}, {
query => [ 'customer.chart.accno' => 'test' ],
- with_objects => bag( 'customer', 'chart' ),
+ with_objects => bag( 'customer', 'customer.chart' ),
}, 'nested joins';
test {
},
{
query => [ 'customer.chart.accno' => { like => '%1200' } ],
- with_objects => bag('customer', 'chart' ),
+ with_objects => bag('customer', 'customer.chart' ),
}, 'all together';
},
},
}, {
- 'query' => [ %{{
+ 'query' => bag(
'invoice.customer.name' => 'test',
'customer.name' => 'test',
- }} ],
- 'with_objects' => bag( 'invoice', 'customer' )
+ ),
+ 'with_objects' => bag( 'invoice.customer', 'customer', 'invoice' )
}, 'object in more than one relationship';
test {
]
}, {
'sellprice:number' => [ '123,4', '2,34', '0,4' ],
- 'sellprice_number' => [ '123,4', '2,34', '0,4' ],
+ 'sellprice_number_' => { '123,4' => 1, '2,34' => 1, '0,4' => 1 },
}, 'laundering with array', target => 'filter';
my %args = (
}
}, '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';
+
+### class filter dispatch
+#
+test {
+ name => 'Test',
+ whut => 'moof',
+}, {
+ query => bag(
+ name => 'Test',
+ whut => 'moof'
+ ),
+}, 'object test simple', class => 'SL::DB::Manager::Part';
+
+test {
+ 'type' => 'assembly',
+}, {
+ query => [
+ 'assembly' => 1
+ ],
+}, 'object test without prefix', class => 'SL::DB::Manager::Part';
+
+test {
+ 'part.type' => 'assembly',
+}, {
+ query => [
+ 'part.assembly' => 1
+ ],
+}, 'object test with prefix', class => 'SL::DB::Manager::OrderItem';
+
+test {
+ 'type' => [ 'part', 'assembly' ],
+}, {
+ query => [
+ or => [
+ and => [ or => [ assembly => 0, assembly => undef ],
+ "!inventory_accno_id" => 0,
+ "!inventory_accno_id" => undef,
+ ],
+ assembly => 1,
+ ]
+ ],
+}, 'object test without prefix but complex value', class => 'SL::DB::Manager::Part';
+
+test {
+ 'part.type' => [ 'part', 'assembly' ],
+}, {
+ query => [
+ or => [
+ and => [ or => [ 'part.assembly' => 0, 'part.assembly' => undef ],
+ "!part.inventory_accno_id" => 0,
+ "!part.inventory_accno_id" => undef,
+ ],
+ 'part.assembly' => 1,
+ ]
+ ],
+}, 'object test with prefix but complex value', class => 'SL::DB::Manager::OrderItem';
+
+test {
+ description => 'test'
+}, {
+ query => [ description => 'test' ],
+ with_objects => [ 'order' ]
+}, 'with_objects don\'t get clobbered', with_objects => [ 'order' ];
+
+test {
+ customer => {
+ description => 'test'
+ }
+}, {
+ query => [ 'customer.description' => 'test' ],
+ with_objects => [ 'order', 'customer' ]
+}, 'with_objects get extended with auto infered objects', with_objects => [ 'order' ];
+
+test {
+ customer => {
+ description => 'test'
+ }
+}, {
+ query => [ 'customer.description' => 'test' ],
+ with_objects => [ 'order', 'customer' ]
+}, 'with_objects get extended with auto infered objects with classes', class => 'SL::DB::Manager::Order', with_objects => [ 'order' ];
+
+test {
+ customer => {
+ description => 'test'
+ }
+}, {
+ query => [ 'customer.description' => 'test' ],
+ with_objects => [ 'customer' ]
+}, 'with_objects: no duplicates', with_objects => [ 'customer' ];
+
+test {
+ part => {
+ 'partnumber:substr::ilike' => '1',
+ },
+}, {
+ query => [
+ 'part.partnumber', {
+ ilike => '%1%'
+ }
+ ]
+}, 'Regression check: prefixing of fallback filtering in relation with custom filters', class => 'SL::DB::Manager::OrderItem';