From 0d8f637b0163caf8ad3f64bd172b83fb2ad32dd8 Mon Sep 17 00:00:00 2001 From: Agustin Moyano Date: Fri, 9 Oct 2020 09:59:46 -0300 Subject: [PATCH] Bug 26635: Add tests Add tests in t/db_dependent/Koha/Object.t and t/db_dependent/Koha/REST/Plugin/Objects.t Sponsored-by: Virginia Tech Libraries Signed-off-by: Tomas Cohen Arazi Signed-off-by: Andrew Fuerste-Henry --- t/db_dependent/Koha/Object.t | 43 ++++++- t/db_dependent/Koha/REST/Plugin/Objects.t | 206 +++++++++++++++++++++++++++++- 2 files changed, 241 insertions(+), 8 deletions(-) diff --git a/t/db_dependent/Koha/Object.t b/t/db_dependent/Koha/Object.t index b78283ce25..b9c27665d4 100755 --- a/t/db_dependent/Koha/Object.t +++ b/t/db_dependent/Koha/Object.t @@ -17,7 +17,7 @@ use Modern::Perl; -use Test::More tests => 21; +use Test::More tests => 22; use Test::Exception; use Test::Warn; use DateTime; @@ -33,6 +33,8 @@ use Koha::DateUtils qw( dt_from_string ); use Koha::Libraries; use Koha::Patrons; use Koha::ApiKeys; +use Koha::AuthorisedValueCategories; +use Koha::AuthorisedValues; use JSON; use Scalar::Util qw( isvstring ); @@ -898,3 +900,42 @@ subtest 'messages() and add_message() tests' => sub { $schema->storage->txn_rollback; }; + +subtest 'Authorised values expansion' => sub { + plan tests => 4; + + $schema->storage->txn_begin; + + Koha::AuthorisedValues->search({category => 'Countries'})->delete; + Koha::AuthorisedValueCategories->search({category_name =>'Countries'})->delete; + + my $cat = $builder->build_object({ class => 'Koha::AuthorisedValueCategories', value => {category_name =>'Countries'} }); + my $fr = $builder->build_object({ class => 'Koha::AuthorisedValues', value => {authorised_value => 'FR', lib=>'France', category=>$cat->category_name} }); + my $us = $builder->build_object({ class => 'Koha::AuthorisedValues', value => {authorised_value => 'US', lib=>'United States of America', category=>$cat->category_name} }); + my $ar = $builder->build_object({ class => 'Koha::AuthorisedValues', value => {authorised_value => 'AR', lib=>'Argentina', category=>$cat->category_name} }); + + my $city_class = Test::MockModule->new('Koha::City'); + $city_class->mock( '_fetch_authorised_values', + sub { + my ($self) = @_; + use Koha::AuthorisedValues; + my $av = Koha::AuthorisedValues->find({authorised_value => $self->city_country, category => 'Countries'}); + return {country => $av->unblessed}; + } + ); + + my $marseille = $builder->build_object({ class => 'Koha::Cities', value => {city_country => 'FR', city_name => 'Marseille'} }); + my $cordoba = $builder->build_object({ class => 'Koha::Cities', value => {city_country => 'AR', city_name => 'Córdoba'} }); + + my $mobj = $marseille->to_api({av_expand => 1}); + my $cobj = $cordoba->to_api({av_expand => 1}); + + isnt($mobj->{_authorised_values}, undef, '_authorised_values exists for Marseille'); + isnt($cobj->{_authorised_values}, undef, '_authorised_values exists for Córdoba'); + + is($mobj->{_authorised_values}->{country}->{lib}, $fr->lib, 'Authorised value for country expanded'); + is($cobj->{_authorised_values}->{country}->{lib}, $ar->lib, 'Authorised value for country expanded'); + + + $schema->storage->txn_rollback; +}; diff --git a/t/db_dependent/Koha/REST/Plugin/Objects.t b/t/db_dependent/Koha/REST/Plugin/Objects.t index afdc24da3e..a6b18e8504 100755 --- a/t/db_dependent/Koha/REST/Plugin/Objects.t +++ b/t/db_dependent/Koha/REST/Plugin/Objects.t @@ -20,6 +20,8 @@ use Modern::Perl; use Koha::Acquisition::Orders; use Koha::Cities; use Koha::Biblios; +use Koha::AuthorisedValueCategories; +use Koha::AuthorisedValues; # Dummy app for testing the plugin use Mojolicious::Lite; @@ -80,7 +82,7 @@ get '/biblios' => sub { }; # The tests -use Test::More tests => 12; +use Test::More tests => 14; use Test::Mojo; use t::lib::Mocks; @@ -312,7 +314,7 @@ subtest 'objects.search helper, embed' => sub { $schema->storage->txn_rollback; }; -subtest 'object.search helper with query parameter' => sub { +subtest 'objects.search helper with query parameter' => sub { plan tests => 4; $schema->storage->txn_begin; @@ -336,7 +338,7 @@ subtest 'object.search helper with query parameter' => sub { $schema->storage->txn_rollback; }; -subtest 'object.search helper with q parameter' => sub { +subtest 'objects.search helper with q parameter' => sub { plan tests => 4; $schema->storage->txn_begin; @@ -360,7 +362,7 @@ subtest 'object.search helper with q parameter' => sub { $schema->storage->txn_rollback; }; -subtest 'object.search helper with x-koha-query header' => sub { +subtest 'objects.search helper with x-koha-query header' => sub { plan tests => 4; $schema->storage->txn_begin; @@ -384,7 +386,7 @@ subtest 'object.search helper with x-koha-query header' => sub { $schema->storage->txn_rollback; }; -subtest 'object.search helper with all query methods' => sub { +subtest 'objects.search helper with all query methods' => sub { plan tests => 6; $schema->storage->txn_begin; @@ -411,8 +413,7 @@ subtest 'object.search helper with all query methods' => sub { $schema->storage->txn_rollback; }; -subtest 'object.search helper order by embedded columns' => sub { - +subtest 'objects.search helper order by embedded columns' => sub { plan tests => 3; $schema->storage->txn_begin; @@ -476,3 +477,194 @@ subtest 'objects.find helper, embed' => sub { $schema->storage->txn_rollback; }; + +subtest 'objects.find helper with expanded authorised values' => sub { + plan tests => 10; + + $schema->storage->txn_begin; + + my $t = Test::Mojo->new; + + Koha::AuthorisedValues->search( { category => 'Countries' } )->delete; + Koha::AuthorisedValueCategories->search( { category_name => 'Countries' } ) + ->delete; + + my $cat = $builder->build_object( + { + class => 'Koha::AuthorisedValueCategories', + value => { category_name => 'Countries' } + } + ); + my $fr = $builder->build_object( + { + class => 'Koha::AuthorisedValues', + value => { + authorised_value => 'FR', + lib => 'France', + category => $cat->category_name + } + } + ); + my $us = $builder->build_object( + { + class => 'Koha::AuthorisedValues', + value => { + authorised_value => 'US', + lib => 'United States of America', + category => $cat->category_name + } + } + ); + my $ar = $builder->build_object( + { + class => 'Koha::AuthorisedValues', + value => { + authorised_value => 'AR', + lib => 'Argentina', + category => $cat->category_name + } + } + ); + + my $city_class = Test::MockModule->new('Koha::City'); + $city_class->mock( + '_fetch_authorised_values', + sub { + my ($self) = @_; + use Koha::AuthorisedValues; + my $av = Koha::AuthorisedValues->find( + { + authorised_value => $self->city_country, + category => 'Countries' + } + ); + return { country => $av->unblessed }; + } + ); + + my $manuel = $builder->build_object( + { + class => 'Koha::Cities', + value => { + city_name => 'Manuel', + city_country => 'AR' + } + } + ); + my $manuela = $builder->build_object( + { + class => 'Koha::Cities', + value => { + city_name => 'Manuela', + city_country => 'US' + } + } + ); + + $t->get_ok( '/cities/' . $manuel->cityid => { 'x-koha-av-expand' => 1 } ) + ->status_is(200)->json_is( '/name' => 'Manuel' ) + ->json_has('/_authorised_values') + ->json_is( '/_authorised_values/country/lib' => $ar->lib ); + + $t->get_ok( '/cities/' . $manuela->cityid => { 'x-koha-av-expand' => 1 } ) + ->status_is(200)->json_is( '/name' => 'Manuela' ) + ->json_has('/_authorised_values') + ->json_is( '/_authorised_values/country/lib' => $us->lib ); + + $schema->storage->txn_rollback; +}; + +subtest 'objects.search helper with expanded authorised values' => sub { + + plan tests => 11; + + my $t = Test::Mojo->new; + + $schema->storage->txn_begin; + + Koha::AuthorisedValues->search( { category => 'Countries' } )->delete; + Koha::AuthorisedValueCategories->search( { category_name => 'Countries' } ) + ->delete; + + my $cat = $builder->build_object( + { + class => 'Koha::AuthorisedValueCategories', + value => { category_name => 'Countries' } + } + ); + my $fr = $builder->build_object( + { + class => 'Koha::AuthorisedValues', + value => { + authorised_value => 'FR', + lib => 'France', + category => $cat->category_name + } + } + ); + my $us = $builder->build_object( + { + class => 'Koha::AuthorisedValues', + value => { + authorised_value => 'US', + lib => 'United States of America', + category => $cat->category_name + } + } + ); + my $ar = $builder->build_object( + { + class => 'Koha::AuthorisedValues', + value => { + authorised_value => 'AR', + lib => 'Argentina', + category => $cat->category_name + } + } + ); + + my $city_class = Test::MockModule->new('Koha::City'); + $city_class->mock( + '_fetch_authorised_values', + sub { + my ($self) = @_; + use Koha::AuthorisedValues; + my $av = Koha::AuthorisedValues->find( + { + authorised_value => $self->city_country, + category => 'Countries' + } + ); + return { country => $av->unblessed }; + } + ); + + $builder->build_object( + { + class => 'Koha::Cities', + value => { + city_name => 'Manuel', + city_country => 'AR' + } + } + ); + $builder->build_object( + { + class => 'Koha::Cities', + value => { + city_name => 'Manuela', + city_country => 'US' + } + } + ); + + $t->get_ok( '/cities?name=manuel&_per_page=4&_page=1&_match=starts_with' => + { 'x-koha-av-expand' => 1 } )->status_is(200)->json_has('/0') + ->json_has('/1')->json_hasnt('/2')->json_is( '/0/name' => 'Manuel' ) + ->json_has('/0/_authorised_values') + ->json_is( '/0/_authorised_values/country/lib' => $ar->lib ) + ->json_is( '/1/name' => 'Manuela' )->json_has('/1/_authorised_values') + ->json_is( '/1/_authorised_values/country/lib' => $us->lib ); + + $schema->storage->txn_rollback; +}; -- 2.11.0