From 45939ba488fa9817aea96ad35d5f10bfdf05c921 Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Thu, 25 Feb 2021 09:35:28 -0300 Subject: [PATCH] Bug 27760: Add stash_overrides helper This patch adds a simple helper that reads the x-koha-override request header, and processes it to stash a hashref with the passed overrides. No check on the overrides themselves is done, as they should be validated using the OpenAPI spec. To test: 1. Apply this patch 2. Run: $ kshell k$ prove t/db_dependent/api/v1/auth_authenticate_api_request.t => SUCCESS: Tests pass! 3. Sign off :-D Signed-off-by: David Nind Signed-off-by: Kyle M Hall --- Koha/REST/Plugin/Query.pm | 28 ++++++++++++++++++++++++++++ t/Koha/REST/Plugin/Query.t | 27 ++++++++++++++++++++++++++- 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/Koha/REST/Plugin/Query.pm b/Koha/REST/Plugin/Query.pm index ef70c9b55ab..d6ad18dfe11 100644 --- a/Koha/REST/Plugin/Query.pm +++ b/Koha/REST/Plugin/Query.pm @@ -262,6 +262,34 @@ Merges parameters from $q_params into $filtered_params. if $THE_embed; } + return $c; + } + ); + +=head3 stash_overrides + + $c->stash_overrides(); + +=cut + + $app->helper( + 'stash_overrides' => sub { + + my ( $c ) = @_; + + my $override_header = $c->req->headers->header('x-koha-override'); + + my $overrides = {}; + + if ( $override_header ) { + my @overrides = (); + foreach my $override ( split /\s*,\s*/, $override_header ) { + $overrides->{$override} = 1; + } + } + + $c->stash( 'koha.overrides' => $overrides ); + return $c; } ); diff --git a/t/Koha/REST/Plugin/Query.t b/t/Koha/REST/Plugin/Query.t index e213787783e..f5580d0cc24 100755 --- a/t/Koha/REST/Plugin/Query.t +++ b/t/Koha/REST/Plugin/Query.t @@ -255,6 +255,18 @@ get '/stash_embed_no_spec' => sub { }; }; +get '/stash_overrides' => sub { + my $c = shift; + + $c->stash_overrides(); + my $overrides = $c->stash('koha.overrides'); + + $c->render( + status => 200, + json => $overrides + ); +}; + sub to_model { my ($args) = @_; $args->{three} = delete $args->{tres} @@ -264,7 +276,7 @@ sub to_model { # The tests -use Test::More tests => 6; +use Test::More tests => 7; use Test::Mojo; subtest 'extract_reserved_params() tests' => sub { @@ -487,3 +499,16 @@ subtest 'stash_embed() tests' => sub { ); }; + +subtest 'stash_overrides() tests' => sub { + + plan tests => 4; + + my $t = Test::Mojo->new; + + $t->get_ok( '/stash_overrides' => { 'x-koha-override' => 'any,none,some_other,any,' } ) + ->json_is( { 'any' => 1, 'none' => 1, 'some_other' => 1 } ); # empty string and duplicates are skipped + + $t->get_ok( '/stash_overrides' => { 'x-koha-override' => '' } ) + ->json_is( {} ); # empty string is skipped +}; -- 2.31.1