3 # This file is part of Koha.
5 # Koha is free software; you can redistribute it and/or modify it
6 # under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 3 of the License, or
8 # (at your option) any later version.
10 # Koha is distributed in the hope that it will be useful, but
11 # WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with Koha; if not, see <http://www.gnu.org/licenses>.
20 use Test::More tests => 4;
25 use t::lib::TestBuilder;
27 use C4::Circulation qw( AddIssue );
29 use Koha::Checkouts::ReturnClaims;
31 use Koha::DateUtils qw(dt_from_string);
33 my $schema = Koha::Database->schema;
34 my $builder = t::lib::TestBuilder->new;
36 t::lib::Mocks::mock_preference( 'RESTBasicAuth', 1 );
37 my $t = Test::Mojo->new('Koha::REST::V1');
39 subtest 'claim_returned() tests' => sub {
43 $schema->storage->txn_begin;
45 my $librarian = $builder->build_object(
47 class => 'Koha::Patrons',
48 value => { flags => 1 }
51 my $password = 'thePassword123';
52 $librarian->set_password( { password => $password, skip_validation => 1 } );
53 my $userid = $librarian->userid;
55 my $patron = $builder->build_object(
57 class => 'Koha::Patrons',
58 value => { flags => 0 }
62 t::lib::Mocks::mock_userenv({ branchcode => $librarian->branchcode });
64 my $item = $builder->build_sample_item;
65 my $issue = AddIssue( $patron->unblessed, $item->barcode, dt_from_string->add( weeks => 2 ) );
67 t::lib::Mocks::mock_preference( 'ClaimReturnedChargeFee', 'ask' );
68 t::lib::Mocks::mock_preference( 'ClaimReturnedLostValue', '99' );
72 "//$userid:$password@/api/v1/return_claims" => json => {
73 item_id => $item->itemnumber,
74 charge_lost_fee => Mojo::JSON->false,
75 created_by => $librarian->id,
76 notes => "This is a test note."
78 )->status_is(201)->header_like(
79 Location => qr|^\/api\/v1\/return_claims/\d*|,
83 my $claim_id = $t->tx->res->json->{claim_id};
88 "//$userid:$password@/api/v1/return_claims" => json => {
89 item_id => $item->itemnumber,
90 charge_lost_fee => Mojo::JSON->false,
91 created_by => $librarian->id,
92 notes => "This is a test note."
96 qr/DBD::mysql::st execute failed: Duplicate entry/;
101 "//$userid:$password@/api/v1/return_claims" => json => {
102 item_id => $item->itemnumber,
103 charge_lost_fee => Mojo::JSON->false,
104 created_by => $librarian->id,
105 notes => "This is a test note."
108 ->json_is( '/error' => 'Checkout not found' );
110 $schema->storage->txn_rollback;
113 subtest 'update_notes() tests' => sub {
117 $schema->storage->txn_begin;
119 my $librarian = $builder->build_object(
121 class => 'Koha::Patrons',
122 value => { flags => 1 }
125 my $password = 'thePassword123';
126 $librarian->set_password( { password => $password, skip_validation => 1 } );
127 my $userid = $librarian->userid;
129 my $item = $builder->build_sample_item;
131 t::lib::Mocks::mock_userenv( { branchcode => $item->homebranch } )
132 ; # needed by AddIssue
134 my $issue = AddIssue( $librarian->unblessed, $item->barcode,
135 dt_from_string->add( weeks => 2 ) );
137 my $claim = $issue->claim_returned(
139 created_by => $librarian->borrowernumber,
140 notes => 'Dummy notes'
144 my $claim_id = $claim->id;
146 # Test editing a claim note
149 "//$userid:$password@/api/v1/return_claims/$claim_id/notes" => json => {
150 notes => "This is a different test note.",
151 updated_by => $librarian->id,
155 $claim->discard_changes;
157 is( $claim->notes, "This is a different test note." );
158 is( $claim->updated_by, $librarian->id );
159 ok( $claim->updated_on );
161 # Make sure the claim doesn't exist on the DB anymore
166 "//$userid:$password@/api/v1/return_claims/$claim_id/notes" => json => {
167 notes => "This is a different test note.",
168 updated_by => $librarian->id,
171 ->json_is( '/error' => 'Claim not found' );
173 $schema->storage->txn_rollback;
176 subtest 'resolve_claim() tests' => sub {
180 $schema->storage->txn_begin;
182 my $librarian = $builder->build_object(
184 class => 'Koha::Patrons',
185 value => { flags => 1 }
188 my $password = 'thePassword123';
189 $librarian->set_password( { password => $password, skip_validation => 1 } );
190 my $userid = $librarian->userid;
192 my $item = $builder->build_sample_item;
194 t::lib::Mocks::mock_userenv( { branchcode => $item->homebranch } ); # needed by AddIssue
196 # Picking 1 that should exist
197 my $ClaimReturnedLostValue = 1;
198 t::lib::Mocks::mock_preference('ClaimReturnedLostValue', $ClaimReturnedLostValue);
200 my $issue = AddIssue( $librarian->unblessed, $item->barcode, dt_from_string->add( weeks => 2 ) );
202 my $claim = $issue->claim_returned(
204 created_by => $librarian->borrowernumber,
205 notes => 'Dummy notes'
209 my $claim_id = $claim->id;
216 )->store; # resolve the claim must work even if the created_by patron has been removed
220 "//$userid:$password@/api/v1/return_claims/$claim_id/resolve" => json => {
221 resolved_by => $librarian->id,
222 resolution => "FOUNDINLIB",
226 $claim->discard_changes;
227 is( $claim->resolution, "FOUNDINLIB" );
228 is( $claim->resolved_by, $librarian->id );
229 is( $claim->updated_by, $librarian->id );
230 ok( $claim->resolved_on );
232 is( $claim->checkout->item->itemlost, $ClaimReturnedLostValue );
234 $claim->update({resolution => undef, resolved_by => undef, resolved_on => undef });
236 "//$userid:$password@/api/v1/return_claims/$claim_id/resolve" => json => {
237 resolved_by => $librarian->id,
238 resolution => "FOUNDINLIB",
239 new_lost_status => 0,
242 is( $claim->get_from_storage->checkout->item->itemlost, 0 );
245 # Make sure the claim doesn't exist on the DB anymore
250 "//$userid:$password@/api/v1/return_claims/$claim_id/resolve" => json =>
252 resolved_by => $librarian->id,
253 resolution => "FOUNDINLIB",
256 ->json_is( '/error' => 'Claim not found' );
258 $schema->storage->txn_rollback;
261 subtest 'delete() tests' => sub {
265 $schema->storage->txn_begin;
267 my $librarian = $builder->build_object(
269 class => 'Koha::Patrons',
270 value => { flags => 1 }
273 my $password = 'thePassword123';
274 $librarian->set_password( { password => $password, skip_validation => 1 } );
275 my $userid = $librarian->userid;
277 my $item = $builder->build_sample_item;
279 t::lib::Mocks::mock_userenv({ branchcode => $item->homebranch });
281 my $issue = C4::Circulation::AddIssue( $librarian->unblessed,
282 $item->barcode, dt_from_string->add( weeks => 2 ) );
284 my $claim = $issue->claim_returned(
286 created_by => $librarian->borrowernumber,
287 notes => 'Dummy notes'
291 # Test deleting a return claim
292 $t->delete_ok("//$userid:$password@/api/v1/return_claims/" . $claim->id)
293 ->status_is( 204, 'SWAGGER3.2.4' )
294 ->content_is( '', 'SWAGGER3.3.4' );
296 my $THE_claim = Koha::Checkouts::ReturnClaims->find($claim->id);
297 isnt( $THE_claim, "Return claim was deleted" );
299 $t->delete_ok("//$userid:$password@/api/v1/return_claims/" . $claim->id)
301 ->json_is( '/error' => 'Claim not found' );
303 $schema->storage->txn_rollback;