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 my $issue = AddIssue
( $librarian->unblessed, $item->barcode, dt_from_string
->add( weeks
=> 2 ) );
198 my $claim = $issue->claim_returned(
200 created_by
=> $librarian->borrowernumber,
201 notes
=> 'Dummy notes'
205 my $claim_id = $claim->id;
209 "//$userid:$password@/api/v1/return_claims/$claim_id/resolve" => json
=> {
210 resolved_by
=> $librarian->id,
211 resolution
=> "FOUNDINLIB",
215 $claim->discard_changes;
216 is
( $claim->resolution, "FOUNDINLIB" );
217 is
( $claim->resolved_by, $librarian->id );
218 ok
( $claim->resolved_on );
220 # Make sure the claim doesn't exist on the DB anymore
225 "//$userid:$password@/api/v1/return_claims/$claim_id/resolve" => json
=>
227 resolved_by
=> $librarian->id,
228 resolution
=> "FOUNDINLIB",
231 ->json_is( '/error' => 'Claim not found' );
233 $schema->storage->txn_rollback;
236 subtest
'delete() tests' => sub {
240 $schema->storage->txn_begin;
242 my $librarian = $builder->build_object(
244 class => 'Koha::Patrons',
245 value
=> { flags
=> 1 }
248 my $password = 'thePassword123';
249 $librarian->set_password( { password
=> $password, skip_validation
=> 1 } );
250 my $userid = $librarian->userid;
252 my $item = $builder->build_sample_item;
254 t
::lib
::Mocks
::mock_userenv
({ branchcode
=> $item->homebranch });
256 my $issue = C4
::Circulation
::AddIssue
( $librarian->unblessed,
257 $item->barcode, dt_from_string
->add( weeks
=> 2 ) );
259 my $claim = $issue->claim_returned(
261 created_by
=> $librarian->borrowernumber,
262 notes
=> 'Dummy notes'
266 # Test deleting a return claim
267 $t->delete_ok("//$userid:$password@/api/v1/return_claims/" . $claim->id)
268 ->status_is( 204, 'SWAGGER3.2.4' )
269 ->content_is( '', 'SWAGGER3.3.4' );
271 my $THE_claim = Koha
::Checkouts
::ReturnClaims
->find($claim->id);
272 isnt
( $THE_claim, "Return claim was deleted" );
274 $t->delete_ok("//$userid:$password@/api/v1/return_claims/" . $claim->id)
276 ->json_is( '/error' => 'Claim not found' );
278 $schema->storage->txn_rollback;