Bug 34008: Harmonize attribute names

This patch harmonizes the attribute names with what is used for `items`
and `checkouts` in terms of terminology.

It also adapts the tests so they are less random failure-prone (they had
a fixed value for the item type, which might make things explode if the
chosen value already exists on the DB.

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
This commit is contained in:
Tomas Cohen Arazi 2023-10-30 13:14:16 -03:00
parent 05f0604d60
commit 78589dbe6e
No known key found for this signature in database
GPG Key ID: 0A272EA1B2F3C15F
4 changed files with 50 additions and 47 deletions

View File

@ -221,7 +221,20 @@ on the API.
=cut
sub to_api_mapping {
return { 'itemtype' => 'item_type_id' };
return {
checkinmsg => 'checkin_message',
checkinmsgtype => 'checkin_message_type',
defaultreplacecost => 'default_replacement_cost',
hideinopac => 'hide_in_opac',
imageurl => 'image_url',
itemtype => 'item_type_id',
notforloan => 'not_for_loan_status',
processfee => 'process_fee',
rentalcharge_daily => 'daily_rental_charge',
rentalcharge_daily_calendar => 'daily_rental_charge_calendar',
rentalcharge_hourly => 'hourly_rental_charge',
rentalcharge_hourly_calendar => 'hourly_rental_charge_calendar',
};
}
=head2 Internal methods

View File

@ -337,9 +337,11 @@ __PACKAGE__->has_many(
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:SoRKIMEqXE2+RkGq6zBejA
__PACKAGE__->add_columns(
'+rentalcharge_hourly_calendar' => { is_boolean => 1 },
'+rentalcharge_daily_calendar' => { is_boolean => 1 },
'+automatic_checkin' => { is_boolean => 1 },
'+hideinopac' => { is_boolean => 1 },
'+notforloan' => { is_boolean => 1 },
'+rentalcharge_daily_calendar' => { is_boolean => 1 },
'+rentalcharge_hourly_calendar' => { is_boolean => 1 },
);
# Use the ItemtypeLocalization view to create the join on localization

View File

@ -18,38 +18,36 @@ properties:
type:
- number
- "null"
rentalcharge_daily:
daily_rental_charge:
description: The amount charged for each day between checkout date and due date
type:
- number
- "null"
rentalcharge_daily_calendar:
daily_rental_charge_calendar:
description: Controls if the daily rental fee is calculated directly or using finesCalendar
type: boolean
rentalcharge_hourly:
hourly_rental_charge:
description: The amount charged for each hour between checkout date and due date
type:
- number
- "null"
rentalcharge_hourly_calendar:
hourly_rental_charge_calendar:
description: Controls if the hourly rental fee is calculated directly or using finesCalendar
type: boolean
defaultreplacecost:
default_replacement_cost:
description: Default replacement cost
type:
- number
- "null"
processfee:
process_fee:
description: Default text be recorded in the column note when the processing fee is applied
type:
- number
- "null"
notforloan:
description: Controls if the item is available for loan
type:
- boolean
- "null"
imageurl:
not_for_loan_status:
description: If items of this type are not for loan
type: boolean
image_url:
description: URL for the item type icon
type:
- string
@ -59,13 +57,13 @@ properties:
type:
- string
- "null"
checkinmsg:
checkin_message:
description: Message that is displayed when an item with the given item type is checked in
type:
- string
- "null"
checkinmsgtype:
description: Type (CSS class) for the checkinmsg, can be 'alert' or 'message'
checkin_message_type:
description: Type (CSS class) for the checkin_message, can be 'alert' or 'message'
type:
- string
- "null"
@ -74,7 +72,7 @@ properties:
type:
- string
- "null"
hideinopac:
hide_in_opac:
description: Hide the item type from the search options in OPAC
type: boolean
searchcategory:
@ -86,7 +84,7 @@ properties:
description: Controls if automatic checkin is enabled for items of this type
type: boolean
translated_descriptions:
description: Translations of description plain text
description: Translations of description plain text (x-koha-embed)
type: array
items:
$ref: "item_type_translated_description.yaml"

View File

@ -23,6 +23,8 @@ use Test::Mojo;
use t::lib::TestBuilder;
use t::lib::Mocks;
use Mojo::JSON qw(encode_json);
use Koha::ItemTypes;
use Koha::Database;
@ -34,7 +36,7 @@ t::lib::Mocks::mock_preference( 'RESTBasicAuth', 1 );
subtest 'list() tests' => sub {
plan tests => 12;
plan tests => 13;
$schema->storage->txn_begin;
@ -42,7 +44,6 @@ subtest 'list() tests' => sub {
{
class => 'Koha::ItemTypes',
value => {
itemtype => 'TEST_IT',
parent_type => undef,
description => 'Test item type',
rentalcharge => 100.0,
@ -70,7 +71,7 @@ subtest 'list() tests' => sub {
class => 'Koha::Localizations',
value => {
entity => 'itemtypes',
code => 'TEST_IT',
code => $item_type->id,
lang => 'en',
translation => 'English word "test"',
}
@ -81,7 +82,7 @@ subtest 'list() tests' => sub {
class => 'Koha::Localizations',
value => {
entity => 'itemtypes',
code => 'TEST_IT',
code => $item_type->id,
lang => 'sv_SE',
translation => 'Swedish word "test"',
}
@ -109,30 +110,19 @@ subtest 'list() tests' => sub {
my $unauth_userid = $patron->userid;
## Authorized user tests
$t->get_ok("//$userid:$password@/api/v1/item_types")->status_is(200)->json_has('/0');
my $query = encode_json( { item_type_id => $item_type->id } );
$t->get_ok("//$userid:$password@/api/v1/item_types?q=$query")->status_is(200)->json_has('/0')
->json_is( '/0/description', $item_type->description )->json_hasnt('/0/translated_descriptions');
for my $json ( @{ $t->tx->res->json } ) {
if ( $json->{item_type_id} eq 'TEST_IT' ) {
is( $json->{description}, 'Test item type' );
ok( !exists $json->{translated_descriptions} );
}
}
$t->get_ok( "//$userid:$password@/api/v1/item_types" => { 'x-koha-embed' => 'translated_descriptions' } )
->status_is(200)->json_has('/0');
for my $json ( @{ $t->tx->res->json } ) {
if ( $json->{item_type_id} eq 'TEST_IT' ) {
is( $json->{description}, 'Test item type' );
is_deeply(
$json->{translated_descriptions},
[
{ lang => 'en', translation => 'English word "test"' },
{ lang => 'sv_SE', translation => 'Swedish word "test"' },
]
);
}
}
$t->get_ok( "//$userid:$password@/api/v1/item_types?q=$query" => { 'x-koha-embed' => 'translated_descriptions' } )
->status_is(200)->json_has('/0')->json_is( '/0/description', $item_type->description )
->json_has('/0/translated_descriptions')->json_is(
'/0/translated_descriptions',
[
{ lang => 'en', translation => 'English word "test"' },
{ lang => 'sv_SE', translation => 'Swedish word "test"' },
]
);
# Unauthorized access
$t->get_ok("//$unauth_userid:$password@/api/v1/item_types")->status_is(403);