Browse Source

Bug 14697: (QA follow-up) Organize tests in subtests

This patch organizes the tests better, and adds some more.

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Andrew Fuerste-Henry <andrew@bywatersolutions.com>
Signed-off-by: Lisette Scheer <lisetteslatah@gmail.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
remotes/origin/19.11.x
Tomas Cohen Arazi 3 years ago
committed by Martin Renvoize
parent
commit
bfcbe72edb
Signed by: martin.renvoize GPG Key ID: 422B469130441A0F
  1. 2
      Koha/REST/V1/ReturnClaims.pm
  2. 2
      api/v1/swagger/paths/return_claims.json
  3. 356
      t/db_dependent/api/v1/return_claims.t

2
Koha/REST/V1/ReturnClaims.pm

@ -175,7 +175,7 @@ sub resolve_claim {
return try {
my $resolved_by = $body->{updated_by};
my $resolved_by = $body->{resolved_by};
my $resolution = $body->{resolution};
my $user = $c->stash('koha.user');

2
api/v1/swagger/paths/return_claims.json

@ -130,7 +130,7 @@
"type": "string"
},
"updated_by": {
"description": "User id for the librarian updating the claim notes",
"description": "Interal identifier for the librarian updating the claim notes",
"type": "string"
}
}

356
t/db_dependent/api/v1/return_claims.t

@ -17,21 +17,18 @@
use Modern::Perl;
use Test::More tests => 32;
use Test::MockModule;
use Test::More tests => 4;
use Test::Mojo;
use Test::Warn;
use t::lib::Mocks;
use t::lib::TestBuilder;
use DateTime;
use C4::Context;
use C4::Circulation;
use C4::Circulation qw(AddIssue);
use Koha::Checkouts::ReturnClaims;
use Koha::Database;
use Koha::DateUtils;
use Koha::DateUtils qw(dt_from_string);
my $schema = Koha::Database->schema;
my $builder = t::lib::TestBuilder->new;
@ -39,76 +36,57 @@ my $builder = t::lib::TestBuilder->new;
t::lib::Mocks::mock_preference( 'RESTBasicAuth', 1 );
my $t = Test::Mojo->new('Koha::REST::V1');
$schema->storage->txn_begin;
subtest 'claim_returned() tests' => sub {
my $dbh = C4::Context->dbh;
plan tests => 9;
my $librarian = $builder->build_object(
{
class => 'Koha::Patrons',
value => { flags => 1 }
}
);
my $password = 'thePassword123';
$librarian->set_password( { password => $password, skip_validation => 1 } );
my $userid = $librarian->userid;
my $patron = $builder->build_object(
{
class => 'Koha::Patrons',
value => { flags => 0 }
}
);
my $unauth_password = 'thePassword000';
$patron->set_password(
{ password => $unauth_password, skip_validattion => 1 } );
my $unauth_userid = $patron->userid;
my $patron_id = $patron->borrowernumber;
my $branchcode = $builder->build( { source => 'Branch' } )->{branchcode};
my $module = new Test::MockModule('C4::Context');
$module->mock( 'userenv', sub { { branch => $branchcode } } );
my $item1 = $builder->build_sample_item;
my $itemnumber1 = $item1->itemnumber;
my $date_due = DateTime->now->add( weeks => 2 );
my $issue1 =
C4::Circulation::AddIssue( $patron->unblessed, $item1->barcode, $date_due );
t::lib::Mocks::mock_preference( 'ClaimReturnedChargeFee', 'ask' );
t::lib::Mocks::mock_preference( 'ClaimReturnedLostValue', '99' );
# Test creating a return claim
## Invalid id
$t->post_ok(
"//$userid:$password@/api/v1/return_claims" => json => {
item_id => 1,
charge_lost_fee => Mojo::JSON->false,
created_by => $librarian->id,
notes => "This is a test note."
}
)->status_is(404)
->json_is( '/error' => 'Checkout not found' );
## Valid id
$t->post_ok(
"//$userid:$password@/api/v1/return_claims" => json => {
item_id => $itemnumber1,
charge_lost_fee => Mojo::JSON->false,
created_by => $librarian->id,
notes => "This is a test note."
}
)->status_is(201)
->header_like( Location => qr|^\/api\/v1\/return_claims/\d*|, 'SWAGGER3.4.1');
$schema->storage->txn_begin;
my $librarian = $builder->build_object(
{
class => 'Koha::Patrons',
value => { flags => 1 }
}
);
my $password = 'thePassword123';
$librarian->set_password( { password => $password, skip_validation => 1 } );
my $userid = $librarian->userid;
my $patron = $builder->build_object(
{
class => 'Koha::Patrons',
value => { flags => 0 }
}
);
my $claim_id = $t->tx->res->json->{claim_id};
t::lib::Mocks::mock_userenv({ branchcode => $librarian->branchcode });
## Duplicate id
warning_like {
my $item = $builder->build_sample_item;
my $issue = AddIssue( $patron->unblessed, $item->barcode, dt_from_string->add( weeks => 2 ) );
t::lib::Mocks::mock_preference( 'ClaimReturnedChargeFee', 'ask' );
t::lib::Mocks::mock_preference( 'ClaimReturnedLostValue', '99' );
## Valid id
$t->post_ok(
"//$userid:$password@/api/v1/return_claims" => json => {
item_id => $item->itemnumber,
charge_lost_fee => Mojo::JSON->false,
created_by => $librarian->id,
notes => "This is a test note."
}
)->status_is(201)->header_like(
Location => qr|^\/api\/v1\/return_claims/\d*|,
'SWAGGER3.4.1'
);
my $claim_id = $t->tx->res->json->{claim_id};
## Duplicate id
warning_like {
$t->post_ok(
"//$userid:$password@/api/v1/return_claims" => json => {
item_id => $itemnumber1,
item_id => $item->itemnumber,
charge_lost_fee => Mojo::JSON->false,
created_by => $librarian->id,
notes => "This is a test note."
@ -117,57 +95,185 @@ warning_like {
}
qr/^DBD::mysql::st execute failed: Duplicate entry/;
# Test editing a claim note
## Valid claim id
$t->put_ok(
"//$userid:$password@/api/v1/return_claims/$claim_id/notes" => json => {
notes => "This is a different test note.",
updated_by => $librarian->id,
}
)->status_is(200);
my $claim = Koha::Checkouts::ReturnClaims->find($claim_id);
is( $claim->notes, "This is a different test note." );
is( $claim->updated_by, $librarian->id );
ok( $claim->updated_on );
## Bad claim id
$t->put_ok(
"//$userid:$password@/api/v1/return_claims/99999999999/notes" => json => {
notes => "This is a different test note.",
updated_by => $librarian->id,
}
)->status_is(404)
->json_is( '/error' => 'Claim not found' );
# Resolve a claim
## Valid claim id
$t->put_ok(
"//$userid:$password@/api/v1/return_claims/$claim_id/resolve" => json => {
resolved_by => $librarian->id,
resolution => "FOUNDINLIB",
}
)->status_is(200);
$claim = Koha::Checkouts::ReturnClaims->find($claim_id);
is( $claim->resolution, "FOUNDINLIB" );
is( $claim->updated_by, $librarian->id );
ok( $claim->resolved_on );
## Invalid claim id
$t->put_ok(
"//$userid:$password@/api/v1/return_claims/999999999999/resolve" => json => {
resolved_by => $librarian->id,
resolution => "FOUNDINLIB",
}
)->status_is(404)
->json_is( '/error' => 'Claim not found' );
# Test deleting a return claim
$t->delete_ok("//$userid:$password@/api/v1/return_claims/$claim_id")
->status_is( 204, 'SWAGGER3.2.4' )
->content_is( '', 'SWAGGER3.3.4' );
$claim = Koha::Checkouts::ReturnClaims->find($claim_id);
isnt( $claim, "Return claim was deleted" );
$t->delete_ok("//$userid:$password@/api/v1/return_claims/$claim_id")
->status_is(404)
->json_is( '/error' => 'Claim not found' );
$issue->delete;
$t->post_ok(
"//$userid:$password@/api/v1/return_claims" => json => {
item_id => $item->itemnumber,
charge_lost_fee => Mojo::JSON->false,
created_by => $librarian->id,
notes => "This is a test note."
}
)->status_is(404)
->json_is( '/error' => 'Checkout not found' );
$schema->storage->txn_rollback;
};
subtest 'update_notes() tests' => sub {
plan tests => 8;
$schema->storage->txn_begin;
my $librarian = $builder->build_object(
{
class => 'Koha::Patrons',
value => { flags => 1 }
}
);
my $password = 'thePassword123';
$librarian->set_password( { password => $password, skip_validation => 1 } );
my $userid = $librarian->userid;
my $item = $builder->build_sample_item;
t::lib::Mocks::mock_userenv( { branchcode => $item->homebranch } )
; # needed by AddIssue
my $issue = AddIssue( $librarian->unblessed, $item->barcode,
dt_from_string->add( weeks => 2 ) );
my $claim = $issue->claim_returned(
{
created_by => $librarian->borrowernumber,
notes => 'Dummy notes'
}
);
my $claim_id = $claim->id;
# Test editing a claim note
## Valid claim id
$t->put_ok(
"//$userid:$password@/api/v1/return_claims/$claim_id/notes" => json => {
notes => "This is a different test note.",
updated_by => $librarian->id,
}
)->status_is(200);
$claim->discard_changes;
is( $claim->notes, "This is a different test note." );
is( $claim->updated_by, $librarian->id );
ok( $claim->updated_on );
# Make sure the claim doesn't exist on the DB anymore
$claim->delete;
## Bad claim id
$t->put_ok(
"//$userid:$password@/api/v1/return_claims/$claim_id/notes" => json => {
notes => "This is a different test note.",
updated_by => $librarian->id,
}
)->status_is(404)
->json_is( '/error' => 'Claim not found' );
$schema->storage->txn_rollback;
};
subtest 'resolve_claim() tests' => sub {
plan tests => 8;
$schema->storage->txn_begin;
my $librarian = $builder->build_object(
{
class => 'Koha::Patrons',
value => { flags => 1 }
}
);
my $password = 'thePassword123';
$librarian->set_password( { password => $password, skip_validation => 1 } );
my $userid = $librarian->userid;
my $item = $builder->build_sample_item;
t::lib::Mocks::mock_userenv( { branchcode => $item->homebranch } ); # needed by AddIssue
my $issue = AddIssue( $librarian->unblessed, $item->barcode, dt_from_string->add( weeks => 2 ) );
my $claim = $issue->claim_returned(
{
created_by => $librarian->borrowernumber,
notes => 'Dummy notes'
}
);
my $claim_id = $claim->id;
# Resolve a claim
$t->put_ok(
"//$userid:$password@/api/v1/return_claims/$claim_id/resolve" => json => {
resolved_by => $librarian->id,
resolution => "FOUNDINLIB",
}
)->status_is(200);
$claim->discard_changes;
is( $claim->resolution, "FOUNDINLIB" );
is( $claim->resolved_by, $librarian->id );
ok( $claim->resolved_on );
# Make sure the claim doesn't exist on the DB anymore
$claim->delete;
## Invalid claim id
$t->put_ok(
"//$userid:$password@/api/v1/return_claims/$claim_id/resolve" => json =>
{
resolved_by => $librarian->id,
resolution => "FOUNDINLIB",
}
)->status_is(404)
->json_is( '/error' => 'Claim not found' );
$schema->storage->txn_rollback;
};
subtest 'delete() tests' => sub {
plan tests => 7;
$schema->storage->txn_begin;
my $librarian = $builder->build_object(
{
class => 'Koha::Patrons',
value => { flags => 1 }
}
);
my $password = 'thePassword123';
$librarian->set_password( { password => $password, skip_validation => 1 } );
my $userid = $librarian->userid;
my $item = $builder->build_sample_item;
t::lib::Mocks::mock_userenv({ branchcode => $item->homebranch });
my $issue = C4::Circulation::AddIssue( $librarian->unblessed,
$item->barcode, dt_from_string->add( weeks => 2 ) );
my $claim = $issue->claim_returned(
{
created_by => $librarian->borrowernumber,
notes => 'Dummy notes'
}
);
# Test deleting a return claim
$t->delete_ok("//$userid:$password@/api/v1/return_claims/" . $claim->id)
->status_is( 204, 'SWAGGER3.2.4' )
->content_is( '', 'SWAGGER3.3.4' );
my $THE_claim = Koha::Checkouts::ReturnClaims->find($claim->id);
isnt( $THE_claim, "Return claim was deleted" );
$t->delete_ok("//$userid:$password@/api/v1/return_claims/" . $claim->id)
->status_is(404)
->json_is( '/error' => 'Claim not found' );
$schema->storage->txn_rollback;
};

Loading…
Cancel
Save