@@ -, +, @@ --- t/db_dependent/Koha/REST/Plugin/Objects.t | 47 +++++++++++++++++++---- 1 file changed, 39 insertions(+), 8 deletions(-) --- a/t/db_dependent/Koha/REST/Plugin/Objects.t +++ a/t/db_dependent/Koha/REST/Plugin/Objects.t @@ -196,7 +196,7 @@ subtest 'objects.search helper' => sub { subtest 'objects.search helper, sorting on mapped column' => sub { - plan tests => 14; + plan tests => 35; $schema->storage->txn_begin; @@ -205,23 +205,54 @@ subtest 'objects.search helper, sorting on mapped column' => sub { $builder->build_object({ class => 'Koha::Cities', value => { city_name => 'A', city_country => 'Argentina' } }); $builder->build_object({ class => 'Koha::Cities', value => { city_name => 'B', city_country => 'Argentina' } }); + $builder->build_object({ class => 'Koha::Cities', value => { city_name => 'C', city_country => 'Argentina' } }); + $builder->build_object({ class => 'Koha::Cities', value => { city_name => 'C', city_country => 'Belarus' } }); my $t = Test::Mojo->new; - $t->get_ok('/cities?_order_by=%2Bname&_order_by=+country') + diag("CSV-param"); + $t->get_ok('/cities?_order_by=%2Bname,-country') ->status_is(200) ->json_has('/0') ->json_has('/1') - ->json_hasnt('/2') ->json_is('/0/name' => 'A') - ->json_is('/1/name' => 'B'); - + ->json_is('/1/name' => 'B') + ->json_is('/2/name' => 'C') + ->json_is('/2/country' => 'Belarus') + ->json_is('/3/name' => 'C') + ->json_is('/3/country' => 'Argentina') + ->json_hasnt('/4'); + + diag("Multi-param: traditional"); + $t->get_ok('/cities?_order_by=%2Bname&_order_by=-country') + ->status_is(200) + ->json_has('/0') + ->json_has('/1') + ->json_is('/0/name' => 'A') + ->json_is('/1/name' => 'B') + ->json_is('/2/name' => 'C') + ->json_is('/2/country' => 'Belarus') + ->json_is('/3/name' => 'C') + ->json_is('/3/country' => 'Argentina') + ->json_hasnt('/4'); + + diag("Pipe-param: Passes validation (treated as a 'single value array or one string), subsequently explodes"); + $t->get_ok('/cities?_order_by=%2Bname|-country') + ->status_is(500); + + diag("Multi-param: PHP Style, Passes validation as above, subsequntly explodes"); + $t->get_ok('/cities?_order_by[]=%2Bname&_order_by[]=-country') + ->status_is(500); + + diag("Single-param"); $t->get_ok('/cities?_order_by=-name') ->status_is(200) ->json_has('/0') ->json_has('/1') - ->json_hasnt('/2') - ->json_is('/0/name' => 'B') - ->json_is('/1/name' => 'A'); + ->json_is('/0/name' => 'C') + ->json_is('/1/name' => 'C') + ->json_is('/2/name' => 'B') + ->json_is('/3/name' => 'A') + ->json_hasnt('/4'); $schema->storage->txn_rollback; }; --