From fb04896e7e10d9484e78aea4f4542b16151df6f1 Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Fri, 12 Feb 2021 14:05:13 +0000 Subject: [PATCH] Bug 27680: Add tests for various ways of passing multi-params This patch adds unit test to increase the coverage of parameter that accept multiple values. There are a number of different ways end users can send such parameters and we should test to ensure we are recieving the correct option. Options `?param1=this¶m1=that` - traditional multiple pass params `?param1[]=this¶m1[]=that` - php multiple pass params `?param1=this,that` - comma delimited list param `?param1=this|that` - pipe delimited list param Signed-off-by: Tomas Cohen Arazi Signed-off-by: Jonathan Druart --- t/db_dependent/Koha/REST/Plugin/Objects.t | 47 +++++++++++++++++++---- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/t/db_dependent/Koha/REST/Plugin/Objects.t b/t/db_dependent/Koha/REST/Plugin/Objects.t index 60c9f81192..f6d9af83a4 100755 --- a/t/db_dependent/Koha/REST/Plugin/Objects.t +++ b/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; }; -- 2.20.1