Bug 27797: Make POST /holds use the stashed koha.overrides

Bug 26181 introduced a way to override behavior through a new header,
x-koha-override. And bug 27760 introduced a generic approach to handle
x-koha-override.

This patchset makes the POST /api/v1/holds route rely on this new way of
handling x-koha-override instead of doing it manually.

The header is added to the spec as a parameter.

Note: the header should be defined as:

    "type": "array",
    "collectionFormat": "csv",
    "items": {
        "type": "string",
        "enum": [
            "any"
        ]
    }

but the versions of JSON::Validator we use have lots of bugs related to
header type coercion, so it just doesn't work. The changelog for
JSON::Validator is fairly elocuent about it.

The override now takes a list of valid keywords (right now only 'any'
but it would be fairly straight-forward to add a fairly granular set of
options based on each possible AddReserve failure.

To test:
1. Apply this patches
2. Run:
   $ kshell
  k$ prove t/db_dependent/api/v1/holds.t
=> SUCCESS: Tests pass!
4. Sign off!

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
This commit is contained in:
Tomás Cohen Arazi 2021-02-26 10:51:52 -03:00 committed by Jonathan Druart
parent 66e7d7fd94
commit 098e93e7cc
2 changed files with 12 additions and 8 deletions

View file

@ -171,14 +171,10 @@ sub add {
$can_place_hold->{status} = 'tooManyReserves';
}
my $override_header = $c->req->headers->header('x-koha-override');
$override_header = decode_json($override_header)
if $override_header;
my $overrides = $c->stash('koha.overrides');
my $can_override = $overrides->{any} and C4::Context->preference('AllowHoldPolicyOverride');
my $can_override = $override_header->{AllowHoldPolicyOverride}
and C4::Context->preference('AllowHoldPolicyOverride');
unless ($can_override || $can_place_hold->{status} eq 'OK' ) {
unless ( $can_override || $can_place_hold->{status} eq 'OK' ) {
return $c->render(
status => 403,
openapi =>

View file

@ -171,7 +171,8 @@
"x-mojo-to": "Holds#add",
"operationId": "addHold",
"tags": ["patrons", "holds"],
"parameters": [{
"parameters": [
{
"name": "body",
"in": "body",
"description": "A JSON object containing informations about the new hold",
@ -215,6 +216,13 @@
},
"required": [ "patron_id", "pickup_library_id" ]
}
},
{
"name": "x-koha-override",
"description": "Comma-separated list of overrides (valid values: any)",
"in": "header",
"type": "string",
"required": false
}
],
"consumes": ["application/json"],