From da02819afdae034be8fe05fdcdd45a1e4bfa4526 Mon Sep 17 00:00:00 2001 From: Josef Moravec Date: Wed, 20 Mar 2019 10:20:29 +0000 Subject: [PATCH] Bug 22544: Add tests Signed-off-by: David Nind --- t/db_dependent/Koha/News.t | 266 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 239 insertions(+), 27 deletions(-) diff --git a/t/db_dependent/Koha/News.t b/t/db_dependent/Koha/News.t index e1b56f5f3f..bf3c531db6 100644 --- a/t/db_dependent/Koha/News.t +++ b/t/db_dependent/Koha/News.t @@ -20,39 +20,251 @@ use Modern::Perl; use Test::More tests => 5; +use Test::Exception; -use Koha::NewsItem; use Koha::News; use Koha::Database; +use Koha::DateUtils; use t::lib::TestBuilder; my $schema = Koha::Database->new->schema; -$schema->storage->txn_begin; - my $builder = t::lib::TestBuilder->new; -my $library = $builder->build({ source => 'Branch'}); -my $nb_of_news = Koha::News->search->count; -my $new_news_item_1 = Koha::NewsItem->new({ - branchcode => $library->{branchcode}, - title => 'a news', - content => 'content for news 1', -})->store; -my $new_news_item_2 = Koha::NewsItem->new({ - branchcode => $library->{branchcode}, - title => 'another news', - content => 'content for news 2', -})->store; - -like( $new_news_item_1->idnew, qr|^\d+$|, 'Adding a new news_item should have set the idnew'); -is( Koha::News->search->count, $nb_of_news + 2, 'The 2 news should have been added' ); - -my $retrieved_news_item_1 = Koha::News->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'); - -$retrieved_news_item_1->delete; -is( Koha::News->search->count, $nb_of_news + 1, 'Delete should have deleted the news_item' ); - -$schema->storage->txn_rollback; +subtest 'Koha::News basic test' => sub { + + plan tests => 5; + + $schema->storage->txn_begin; + + my $library = $builder->build({ source => 'Branch'}); + my $nb_of_news = Koha::News->search->count; + my $new_news_item_1 = Koha::NewsItem->new({ + branchcode => $library->{branchcode}, + title => 'a news', + content => 'content for news 1', + })->store; + my $new_news_item_2 = Koha::NewsItem->new({ + branchcode => $library->{branchcode}, + title => 'another news', + content => 'content for news 2', + })->store; + + like( $new_news_item_1->idnew, qr|^\d+$|, 'Adding a new news_item should have set the idnew'); + is( Koha::News->search->count, $nb_of_news + 2, 'The 2 news should have been added' ); + + my $retrieved_news_item_1 = Koha::News->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'); + + $retrieved_news_item_1->delete; + is( Koha::News->search->count, $nb_of_news + 1, 'Delete should have deleted the news_item' ); + + $schema->storage->txn_rollback; +}; + +subtest '->is_expired' => sub { + + plan tests => 3; + + $schema->storage->txn_begin; + + my $today = dt_from_string; + my $yesterday = dt_from_string->add( days => -1 ); + my $tommorow = dt_from_string->add( days => 1 ); + my $new_today = $builder->build_object({ + class => 'Koha::News', + value => { + expirationdate => $today, + } + }); + my $new_expired = $builder->build_object({ + class => 'Koha::News', + value => { + expirationdate => $yesterday, + } + }); + my $new_not_expired = $builder->build_object({ + class => 'Koha::News', + value => { + expirationdate => $tommorow, + } + }); + + ok($new_expired->is_expired, 'Expired new is expired'); + ok(!$new_not_expired->is_expired, 'Not expired new is not expired'); + ok(!$new_today->is_expired, 'Today expiration date means the new is not expired'); + + $schema->storage->txn_rollback; +}; + +subtest '->library' => sub { + + plan tests => 3; + + $schema->storage->txn_begin; + + my $library = $builder->build_object({ class => 'Koha::Libraries' }); + + my $new_with_library = $builder->build_object({ + class => 'Koha::News', + value => { + branchcode => $library->branchcode + } + }); + my $new_without_library = $builder->build_object({ + class => 'Koha::News', + value => { + branchcode => undef + } + }); + + ok($new_with_library->library, 'News item with library have library relation'); + is($new_with_library->library->branchcode, $library->branchcode, 'The library linked with new item is right'); + + ok(!$new_without_library->library, 'New item without library does not have library relation'); + + $schema->storage->txn_rollback; +}; + +subtest '->author' => sub { + + plan tests => 3; + + $schema->storage->txn_begin; + + my $patron = $builder->build_object({ class => 'Koha::Patrons' }); + + my $new_with_author = $builder->build_object({ + class => 'Koha::News', + value => { + borrowernumber => $patron->borrowernumber + } + }); + my $new_without_author = $builder->build_object({ + class => 'Koha::News', + value => { + borrowernumber => undef + } + }); + + ok($new_with_author->author, 'News item with author have author relation'); + is($new_with_author->author->borrowernumber, $patron->borrowernumber, 'The patron linked with new item is right'); + + ok(!$new_without_author->author, 'New item without author does not have author relation'); + + $schema->storage->txn_rollback; +}; + +subtest '->search_for_display' => sub { + + plan tests => 12; + + $schema->storage->txn_begin; + + Koha::News->search->delete; + + my $today = dt_from_string; + my $yesterday = dt_from_string->add( days => -1 ); + my $tommorow = dt_from_string->add( days => 1 ); + my $library1 = $builder->build_object({ class => 'Koha::Libraries' }); + my $library2 = $builder->build_object({ class => 'Koha::Libraries' }); + + my $new_expired = $builder->build_object({ + class => 'Koha::News', + value => { + expirationdate => $yesterday, + timestamp => $today, + lang => '', + branchcode => undef, + number => 1, + } + }); + my $new_not_expired = $builder->build_object({ + class => 'Koha::News', + value => { + expirationdate => $tommorow, + timestamp => $today, + lang => '', + branchcode => undef, + number => 2, + } + }); + my $new_not_active = $builder->build_object({ + class => 'Koha::News', + value => { + expirationdate => $tommorow, + timestamp => $tommorow, + lang => '', + branchcode => undef, + number => 3, + } + }); + my $new_slip= $builder->build_object({ + class => 'Koha::News', + value => { + expirationdate => $tommorow, + timestamp => $today, + lang => 'slip', + branchcode => $library1->branchcode, + number => 4, + } + }); + my $new_intra = $builder->build_object({ + class => 'Koha::News', + value => { + expirationdate => $tommorow, + timestamp => $today, + lang => 'koha', + branchcode => $library2->branchcode, + number => 5, + } + }); + my $new_intra2 = $builder->build_object({ + class => 'Koha::News', + value => { + expirationdate => $tommorow, + timestamp => $today, + lang => 'koha', + branchcode => undef, + number => 5, + } + }); + my $news = Koha::News->search_for_display; + + is($news->count, 4, 'Active and not expired news'); + is($news->next->number, 2, 'News items are returned in correct order'); + + $news = Koha::News->search_for_display({ type => 'slip'}); + is($news->count, 2, 'Slip and all type returned'); + + $news = Koha::News->search_for_display({ type => 'koha'}); + is($news->count, 3, 'Intranet and all'); + + $new_not_expired->lang('OpacNavRight_en')->store; + $news = Koha::News->search_for_display({ type => 'OpacNavRight', lang => 'en'}); + is($news->count, 1, 'OpacNavRight'); + is($news->next->idnew, $new_not_expired->idnew, 'Returned the right new item'); + + $new_intra->lang('')->store; + $news = Koha::News->search_for_display({ type => 'opac', lang => 'en'}); + is($news->count, 1, 'Only all type is returned'); + $new_not_expired->lang('en')->store; + $news = Koha::News->search_for_display({ type => 'opac', lang => 'en'}); + is($news->count, 2, 'Opac en and all is returned'); + + $news = Koha::News->search_for_display({ library_id => $library1->branchcode }); + is($news->count, 3, 'Filtering by library returns right number of news items'); + + $news = Koha::News->search_for_display({ library_id => $library2->branchcode}); + is($news->count, 3, 'Filtering by library returns right number of news items'); + + $new_intra->branchcode($library1->branchcode)->store; + $news = Koha::News->search_for_display({ library_id => $library2->branchcode}); + is($news->count, 2, 'Filtering by library returns right number of news items'); + + throws_ok { Koha::News->search_for_display({type => 'opac'}) } 'Koha::Exceptions::BadParameter', + 'Exception raised when type is opac and no language given'; + + $schema->storage->txn_rollback; +}; -- 2.11.0