3 # This file is part of Koha.
5 # Koha is free software; you can redistribute it and/or modify it under the
6 # terms of the GNU General Public License as published by the Free Software
7 # Foundation; either version 3 of the License, or (at your option) any later
10 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
11 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
12 # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
14 # You should have received a copy of the GNU General Public License along
15 # with Koha; if not, write to the Free Software Foundation, Inc.,
16 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
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;