Browse Source

Bug 17003: (follow-up) Update definitions according to voted RFC

Test plan:
1) Have some patrons with checkouts, some renewable and some not
renewable
2) Use your favorite API tester and access GET
http://koha.url/api/v1/checkouts/{checkout_id}/allows_renewal
3) Check the response is OK according to voted RFC:
https://wiki.koha-community.org/wiki/Checkouts_endpoint_RFC#Checkout_renewability_2
4) prove t/db_dependent/api/v1/checkouts.t

Signed-off-by: Michal Denar <black23@gmail.com>
Signed-off-by: Johanna Raisa <johanna.raisa@gmail.com>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
remotes/origin/19.11.x
Josef Moravec 5 years ago
committed by Martin Renvoize
parent
commit
0619aab997
Signed by: martin.renvoize GPG Key ID: 422B469130441A0F
  1. 24
      Koha/REST/V1/Checkouts.pm
  2. 4
      api/v1/swagger/definitions.json
  3. 21
      api/v1/swagger/definitions/allows_renewal.json
  4. 13
      api/v1/swagger/definitions/renewability.json
  5. 4
      api/v1/swagger/paths.json
  6. 12
      api/v1/swagger/paths/checkouts.json
  7. 18
      t/db_dependent/api/v1/checkouts.t

24
Koha/REST/V1/Checkouts.pm

@ -24,6 +24,7 @@ use C4::Auth qw( haspermission );
use C4::Context;
use C4::Circulation;
use Koha::Checkouts;
use Koha::IssuingRules;
use Try::Tiny;
@ -128,7 +129,13 @@ sub renew {
);
}
sub renewability {
=head3 allows_renewal
Checks if the checkout could be renewed and return the related information.
=cut
sub allows_renewal {
my $c = shift->openapi->valid_input or return;
my $checkout_id = $c->validation->param('checkout_id');
@ -146,9 +153,22 @@ sub renewability {
my $renewable = Mojo::JSON->false;
$renewable = Mojo::JSON->true if $can_renew;
my $rule = Koha::IssuingRules->get_effective_issuing_rule(
{
categorycode => $checkout->patron->categorycode,
itemtype => $checkout->item->effective_itemtype,
branchcode => $checkout->branchcode,
}
);
return $c->render(
status => 200,
openapi => { renewable => $renewable, error => $error }
openapi => {
allows_renewal => $renewable,
max_renewals => $rule->renewalsallowed,
current_renewals => $checkout->renewals,
error => $error
}
);
}

4
api/v1/swagger/definitions.json

@ -32,8 +32,8 @@
"patron_balance": {
"$ref": "definitions/patron_balance.json"
},
"renewability": {
"$ref": "definitions/renewability.json"
"allows_renewal": {
"$ref": "definitions/allows_renewal.json"
},
"vendor": {
"$ref": "definitions/vendor.json"

21
api/v1/swagger/definitions/allows_renewal.json

@ -0,0 +1,21 @@
{
"type": "object",
"properties": {
"allows_renewal": {
"type": "boolean",
"description": "Renewability status; true = renewable, false = not renewable"
},
"max_renewals": {
"type": "integer",
"description": "Maximum number of possible renewals"
},
"current_renewals": {
"type": "integer",
"description": "Current used renewals"
},
"error": {
"type": ["string", "null"],
"description": "Description on false allows_renewal."
}
}
}

13
api/v1/swagger/definitions/renewability.json

@ -1,13 +0,0 @@
{
"type": "object",
"properties": {
"renewable": {
"type": "boolean",
"description": "Renewability status; true = renewable, false = not renewable"
},
"error": {
"type": ["string", "null"],
"description": "Description on false renewability."
}
}
}

4
api/v1/swagger/paths.json

@ -44,8 +44,8 @@
"/libraries/{library_id}": {
"$ref": "paths/libraries.json#/~1libraries~1{library_id}"
},
"/checkouts/{checkout_id}/renewability": {
"$ref": "paths/checkouts.json#/~1checkouts~1{checkout_id}~1renewability"
"/checkouts/{checkout_id}/allows_renewal": {
"$ref": "paths/checkouts.json#/~1checkouts~1{checkout_id}~1allows_renewal"
},
"/patrons": {
"$ref": "paths/patrons.json#/~1patrons"

12
api/v1/swagger/paths/checkouts.json

@ -97,19 +97,19 @@
}
}
},
"/checkouts/{checkout_id}/renewability": {
"/checkouts/{checkout_id}/allows_renewal": {
"get": {
"x-mojo-to": "Checkout#renewability",
"operationId": "renewabilityCheckout",
"x-mojo-to": "Checkouts#allows_renewal",
"operationId": "allows_renewalCheckout",
"tags": ["patrons", "checkouts"],
"parameters": [{
"$ref": "../parameters.json#/checkoutIdPathParam"
"$ref": "../parameters.json#/checkout_id_pp"
}],
"produces": ["application/json"],
"responses": {
"200": {
"description": "Checkout renewability",
"schema": { "$ref": "../definitions.json#/renewability" }
"description": "Checkout renewability information",
"schema": { "$ref": "../definitions.json#/allows_renewal" }
},
"403": {
"description": "Forbidden",

18
t/db_dependent/api/v1/checkouts.t

@ -169,9 +169,14 @@ $t->post_ok( "//$unauth_userid:$unauth_password@/api/v1/checkouts/" . $issue3->i
required_permissions => { circulate => "circulate_remaining_permissions" }
});
$t->get_ok( "//$userid:$password@/api/v1/checkouts/" . $issue2->issue_id . "/renewability")
$t->get_ok( "//$userid:$password@/api/v1/checkouts/" . $issue2->issue_id . "/allows_renewal")
->status_is(200)
->json_is({ renewable => Mojo::JSON->true, error => undef });
->json_is({
allows_renewal => Mojo::JSON->true,
max_renewals => 1,
current_renewals => 0,
error => undef
});
$t->post_ok( "//$userid:$password@/api/v1/checkouts/" . $issue2->issue_id . "/renewal" )
->status_is(201)
@ -183,6 +188,11 @@ $t->post_ok( "//$userid:$password@/api/v1/checkouts/" . $issue1->issue_id . "/re
->status_is(403)
->json_is({ error => 'Renewal not authorized (too_many)' });
$t->get_ok( "//$userid:$password@/api/v1/checkouts/" . $issue2->issue_id . "/renewability")
$t->get_ok( "//$userid:$password@/api/v1/checkouts/" . $issue2->issue_id . "/allows_renewal")
->status_is(200)
->json_is({ renewable => Mojo::JSON->false, error => 'too_many' });
->json_is({
allows_renewal => Mojo::JSON->false,
max_renewals => 1,
current_renewals => 1,
error => 'too_many'
});

Loading…
Cancel
Save