Bug 31383: Adjust and add tests

Sponsored-by: Rijksmuseum, Netherlands
Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
This commit is contained in:
Jonathan Druart 2023-03-03 12:13:05 +01:00 committed by Tomas Cohen Arazi
parent f5ac2916f2
commit 44d1ebece8
No known key found for this signature in database
GPG Key ID: 0A272EA1B2F3C15F
4 changed files with 134 additions and 71 deletions

View File

@ -85,7 +85,9 @@ sub search_for_display {
$search_params->{category} = $params->{category} if $params->{category};
my $contents = $self->SUPER::search( $search_params, { order_by => 'number' } );
my @all_content_id = $contents->get_column('id');
my @translated_content_id;
if ( $params->{lang} ) {
my $translated_contents = Koha::AdditionalContentsLocalizations->search(
{
@ -93,24 +95,22 @@ sub search_for_display {
lang => $params->{lang},
}
);
my @all_content_id = $contents->get_column('id');
my @translated_content_id = $translated_contents->get_column('additional_content_id');
my $default_contents = Koha::AdditionalContentsLocalizations->search(
{
additional_content_id => [array_minus(@all_content_id, @translated_content_id)],
lang => 'default',
}
);
return Koha::AdditionalContentsLocalizations->search(
{
id => [
$translated_contents->get_column('id'),
$default_contents->get_column('id'),
]
},
);
@translated_content_id = $translated_contents->get_column('additional_content_id');
}
return $contents->search( { lang => 'default' }, { order_by => 'number' } )->translated_contents;
my $default_contents = Koha::AdditionalContentsLocalizations->search(
{
additional_content_id => [array_minus(@all_content_id, @translated_content_id)],
lang => 'default',
}
);
return Koha::AdditionalContentsLocalizations->search(
{
id => [@translated_content_id, $default_contents->get_column('id')]
},
);
}
=head3 find_best_match

View File

@ -33,7 +33,7 @@ my $builder = t::lib::TestBuilder->new;
subtest 'Koha::AdditionalContents basic test' => sub {
plan tests => 5;
plan tests => 9;
$schema->storage->txn_begin;
@ -45,29 +45,48 @@ subtest 'Koha::AdditionalContents basic test' => sub {
code => 'news_1',
location => 'staff_only',
branchcode => $library->{branchcode},
title => 'a news',
content => 'content for news 1',
}
)->store;
my $content_1 = {
title => 'a news',
content => 'content for news 1',
lang => 'default',
};
$new_news_item_1->translated_contents([$content_1]);
my $new_news_item_2 = Koha::AdditionalContent->new(
{
category => 'news',
code => 'news_2',
location => 'staff_only',
branchcode => $library->{branchcode},
title => 'another news',
content => 'content for news 2',
}
)->store;
my $content_2 = {
title => 'another news',
content => 'content for news 2',
lang => 'default',
};
$new_news_item_2->translated_contents([$content_2]);
like( $new_news_item_1->idnew, qr|^\d+$|, 'Adding a new news_item should have set the idnew');
like( $new_news_item_1->id, qr|^\d+$|, 'Adding a new news_item should have set the id');
is( Koha::AdditionalContents->search->count, $nb_of_news + 2, 'The 2 news should have been added' );
my $retrieved_news_item_1 = Koha::AdditionalContents->find( $new_news_item_1->idnew );
is( $retrieved_news_item_1->title, $new_news_item_1->title, 'Find a news_item by id should return the correct news_item' );
is( $retrieved_news_item_1->content, $new_news_item_1->content, 'The content method return the content of the news');
my $retrieved_news_item_1 = Koha::AdditionalContents->find( $new_news_item_1->id )->translated_contents->next;
is( $retrieved_news_item_1->title, $content_1->{title}, 'Find a news_item by id should return the correct news_item' );
is( $retrieved_news_item_1->content, $content_1->{content}, 'The content method return the content of the news');
$retrieved_news_item_1->delete;
my $default_content = $new_news_item_2->default_localization;
is( $default_content->content, $content_2->{content}, 'default_localization return the default content' );
my $translated_content = { lang => 'nl-NL', content => 'translated_content' };
$new_news_item_2->translated_contents( [ $translated_content, $content_2 ] )->as_list;
$default_content = $new_news_item_2->default_localization;
is( $default_content->content, $content_2->{content}, 'default_localization still return the default content' );
my $retrieved_translated_content = $new_news_item_2->translated_content('en');
is( $retrieved_translated_content->content, $content_2->{content}, 'default content is returned for non-existing translated interface' );
$retrieved_translated_content = $new_news_item_2->translated_content('nl-NL');
is( $retrieved_translated_content->content, $translated_content->{content}, 'translated content is returned if it existsOB' );
$new_news_item_1->delete;
is( Koha::AdditionalContents->search->count, $nb_of_news + 1, 'Delete should have deleted the news_item' );
$schema->storage->txn_rollback;
@ -148,7 +167,7 @@ subtest '->author' => sub {
$author->delete;
$news_item = Koha::AdditionalContents->find($news_item->idnew);
$news_item = Koha::AdditionalContents->find($news_item->id);
is( ref($news_item), 'Koha::AdditionalContent', 'News are not deleted alongwith the author' );
is( $news_item->author, undef, '->author returns undef is the author has been deleted' );
@ -176,11 +195,11 @@ subtest '->search_for_display' => sub {
published_on => $today,
category => 'news',
location => 'staff_and_opac',
lang => 'default',
branchcode => undef,
number => 1,
}
});
$new_expired->translated_contents( [ { lang => 'default', content => ''} ] );
my $new_not_expired = $builder->build_object({
class => 'Koha::AdditionalContents',
value => {
@ -188,11 +207,11 @@ subtest '->search_for_display' => sub {
published_on => $today,
category => 'news',
location => 'staff_and_opac',
lang => 'default',
branchcode => undef,
number => 2,
}
});
$new_not_expired->translated_contents( [ { lang => 'default', content => '' } ] );
my $new_not_active = $builder->build_object({
class => 'Koha::AdditionalContents',
value => {
@ -200,11 +219,11 @@ subtest '->search_for_display' => sub {
published_on => $tomorrow,
category => 'news',
location => 'staff_and_opac',
lang => 'default',
branchcode => undef,
number => 3,
}
});
$new_not_active->translated_contents( [ { lang => 'default', content => '' } ] );
my $new_slip= $builder->build_object({
class => 'Koha::AdditionalContents',
value => {
@ -212,11 +231,11 @@ subtest '->search_for_display' => sub {
published_on => $today,
category => 'news',
location => 'staff_only',
lang => 'default',
branchcode => $library1->branchcode,
number => 4,
}
});
$new_slip->translated_contents( [ { lang => 'default', content => '' } ] );
my $new_intra = $builder->build_object({
class => 'Koha::AdditionalContents',
value => {
@ -224,11 +243,11 @@ subtest '->search_for_display' => sub {
published_on => $today,
category => 'news',
location => 'staff_only',
lang => 'default',
branchcode => $library2->branchcode,
number => 5,
}
});
$new_intra->translated_contents( [ { lang => 'default', content => '' } ] );
my $new_intra2 = $builder->build_object({
class => 'Koha::AdditionalContents',
value => {
@ -236,11 +255,11 @@ subtest '->search_for_display' => sub {
published_on => $today,
category => 'news',
location => 'staff_only',
lang => 'default',
branchcode => undef,
number => 5,
}
});
$new_intra2->translated_contents( [ { lang => 'default', content => '' } ] );
my $news = Koha::AdditionalContents->search_for_display({ location => 'staff_only' });
is($news->count, 1, "There is 1 news for all staff");
@ -267,20 +286,22 @@ subtest 'find_best_match' => sub {
my $library01 = $builder->build_object({ class => 'Koha::Libraries' });
my $html01 = $builder->build_object({
class => 'Koha::AdditionalContents',
value => { category => 'html_customizations', location => 'test_best_match', branchcode => undef, lang => 'default' },
value => { category => 'html_customizations', location => 'test_best_match', branchcode => undef },
});
my ( $default_content ) = $html01->translated_contents( [ { lang => 'default', content => '' } ] )->as_list;
my $params = { category => 'html_customizations', location => 'test_best_match', lang => 'nl-NL' };
is( Koha::AdditionalContents->find_best_match($params)->idnew, $html01->idnew, 'Found all branches, lang default' );
is( Koha::AdditionalContents->find_best_match($params)->id, $default_content->id, 'Found all branches, lang default' );
my $html02 = $builder->build_object({
class => 'Koha::AdditionalContents',
value => { category => 'html_customizations', location => 'test_best_match', branchcode => undef, lang => 'nl-NL' },
value => { category => 'html_customizations', location => 'test_best_match', branchcode => undef },
});
is( Koha::AdditionalContents->find_best_match($params)->idnew, $html02->idnew, 'Found all branches, lang nl-NL' );
my ( $translated_content ) = $html02->translated_contents( [ { lang => 'nl-NL', content => '' } ] )->as_list;
is( Koha::AdditionalContents->find_best_match($params)->id, $translated_content->id, 'Found all branches, lang nl-NL' );
$params->{ library_id } = $library01->id;
$html02->branchcode( $library01->id )->store;
is( Koha::AdditionalContents->find_best_match($params)->idnew, $html02->idnew, 'Found library01, lang nl-NL' );
is( Koha::AdditionalContents->find_best_match($params)->id, $translated_content->id, 'Found library01, lang nl-NL' );
# Note: find_best_match is tested further via $libary->opac_info; see t/db_dependent/Koha/Library.t

View File

@ -101,22 +101,52 @@ subtest 'opac_info tests' => sub {
my $library01 = $builder->build_object({ class => 'Koha::Libraries' });
my $library02 = $builder->build_object({ class => 'Koha::Libraries' });
my $html01 = $builder->build_object({
class => 'Koha::AdditionalContents',
value => { category => 'html_customizations', location => 'OpacLibraryInfo', branchcode => undef, lang => 'default', content => '1', expirationdate => undef },
});
my $html02 = $builder->build_object({
class => 'Koha::AdditionalContents',
value => { category => 'html_customizations', location => 'OpacLibraryInfo', branchcode => $library01->id, lang => 'default', content => '2', expirationdate => undef },
});
my $html03 = $builder->build_object({
class => 'Koha::AdditionalContents',
value => { category => 'html_customizations', location => 'OpacLibraryInfo', branchcode => $library01->id, lang => 'nl-NL', content => '3', expirationdate => undef },
});
my $html04 = $builder->build_object({
class => 'Koha::AdditionalContents',
value => { category => 'html_customizations', location => 'OpacLibraryInfo', branchcode => undef, lang => 'fr-FR', content => '4', expirationdate => undef },
});
my $html01 = $builder->build_object(
{
class => 'Koha::AdditionalContents',
value => { category => 'html_customizations', location => 'OpacLibraryInfo', branchcode => undef, expirationdate => undef },
}
);
$html01->translated_contents(
[
{
lang => 'default',
content => '1',
}
]
);
my $html02 = $builder->build_object(
{
class => 'Koha::AdditionalContents',
value => { category => 'html_customizations', location => 'OpacLibraryInfo', branchcode => $library01->id, expirationdate => undef },
}
);
$html02->translated_contents(
[
{
lang => 'default',
content => '2',
},
{
lang => 'nl-NL',
content => '3',
}
]
);
my $html04 = $builder->build_object(
{
class => 'Koha::AdditionalContents',
value => { category => 'html_customizations', location => 'OpacLibraryInfo', branchcode => undef, expirationdate => undef },
}
);
$html04->translated_contents(
[
{
lang => 'fr-FR',
content => '4',
}
]
);
# Start testing
is( $library01->opac_info->content, '2', 'specific library, default language' );

View File

@ -80,8 +80,8 @@ my $hold = $builder->build_object(
my $news = $builder->build_object(
{
class => 'Koha::AdditionalContents',
value => { title => 'a news title', content => 'a news content' }
class => 'Koha::AdditionalContentsLocalizations',
value => { title => 'a news title', content => 'a news content', lang => 'default' }
}
);
my $serial = $builder->build_object( { class => 'Koha::Serials' } );
@ -662,14 +662,22 @@ EOF
{
class => 'Koha::AdditionalContents',
value => {
category => 'news',
location => "slip",
branchcode => $branchcode,
lang => 'default',
title => "A wonderful news",
content => "This is the wonderful news.",
expirationdate => undef,
published_on => $one_minute_ago
category => 'news',
location => "slip",
branchcode => $branchcode,
expirationdate => undef,
published_on => $one_minute_ago
}
}
);
my $content = $builder->build_object(
{
class => 'Koha::AdditionalContentsLocalizations',
value => {
additional_content_id => $news_item->id,
lang => 'default',
title => "A wonderful news",
content => "This is the wonderful news.",
}
}
);
@ -702,15 +710,17 @@ Date due: <<issues.date_due | dateonly>><br />
<hr>
[% IF additional_contents.count %]
<h4 style="text-align: center; font-style:italic;">News</h4>
<news>
[% FOR content IN additional_contents %]
<div class="newsitem">
<h5 style="margin-bottom: 1px; margin-top: 1px"><b><<additional_contents.title>></b></h5>
<p style="margin-bottom: 1px; margin-top: 1px"><<additional_contents.content>></p>
<p class="newsfooter" style="font-size: 8pt; font-style:italic; margin-bottom: 1px; margin-top: 1px">Posted on <<additional_contents.published_on>></p>
<h5 style="margin-bottom: 1px; margin-top: 1px"><b>[% content.title %]</b></h5>
<p style="margin-bottom: 1px; margin-top: 1px">[% content.content %]</p>
<p class="newsfooter" style="font-size: 8pt; font-style:italic; margin-bottom: 1px; margin-top: 1px">Posted on [% content.published_on | \$KohaDates %]</p>
<hr />
</div>
</news>
[% END %]
[% END %]
EOF
reset_template( { template => $template, code => $code, module => 'circulation' } );
@ -762,6 +772,7 @@ Date due: [% overdue.date_due | \$KohaDates %]<br />
<hr>
[% IF additional_contents.count %]
<h4 style="text-align: center; font-style:italic;">News</h4>
[% FOREACH n IN additional_contents %]
<div class="newsitem">
@ -771,6 +782,7 @@ Date due: [% overdue.date_due | \$KohaDates %]<br />
<hr />
</div>
[% END %]
[% END %]
EOF
reset_template( { template => $tt_template, code => $code, module => 'circulation' } );
@ -787,7 +799,7 @@ EOF
# There is too many line breaks generated by the historic syntax
$second_slip->{content} =~ s|</p>\n\n\n<p>|</p>\n\n<p>|s;
my $news_item_title = $news_item->title;
my $news_item_title = $content->title;
like( $first_slip->{content}, qr{$news_item_title} );
is( $first_tt_slip->{content}, $first_slip->{content}, );
is( $second_tt_slip->{content}, $second_slip->{content}, );