X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=t%2Fdb_dependent%2FNewsChannels.t;h=928ddd5cd5e2fa0c5271b84bd9ec0f188b297079;hb=caab154c393db8862b12dd2b568aff261e3bc34a;hp=261abd541bdcaacb94d43adb25534c230818ce8e;hpb=a6213abe019bf05b92a0df765cf4e3200dd3b42a;p=koha.git diff --git a/t/db_dependent/NewsChannels.t b/t/db_dependent/NewsChannels.t old mode 100755 new mode 100644 index 261abd541b..928ddd5cd5 --- a/t/db_dependent/NewsChannels.t +++ b/t/db_dependent/NewsChannels.t @@ -1,92 +1,227 @@ #!/usr/bin/perl use Modern::Perl; -use C4::Dates qw(format_date); -use C4::Branch qw(GetBranchName); -use Test::More tests => 8; +use Koha::Database; +use Koha::DateUtils; +use Koha::Libraries; + +use Test::More tests => 14; BEGIN { - use_ok('C4::NewsChannels'); + use_ok('C4::NewsChannels'); } +my $schema = Koha::Database->new->schema; +$schema->storage->txn_begin; my $dbh = C4::Context->dbh; -# Start transaction -$dbh->{AutoCommit} = 0; -$dbh->{RaiseError} = 1; +# Add LIB1, if it doesn't exist. +my $addbra = 'LIB1'; +unless ( Koha::Libraries->find($addbra) ) { + $dbh->do( q{ INSERT INTO branches (branchcode,branchname) VALUES (?,?) }, + undef, ( $addbra, "$addbra branch" ) ); +} + +# Add CAT1, if it doesn't exist. +my $addcat = 'CAT1'; +{ + my $sth = $dbh->prepare( q{ SELECT categorycode FROM categories WHERE categorycode = ? } ); + $sth->execute ( $addcat ); + if ( not defined $sth->fetchrow () ) { + $dbh->do( q{ INSERT INTO categories (categorycode,description) VALUES (?,?) }, + undef, ( $addcat, "$addcat description") ); + } +} + +# Add a test user if not already present. +my $addbrwr = 'BRWR1'; +my $brwrnmbr; +{ + my $query = + q{ SELECT borrowernumber from borrowers WHERE surname = ? AND branchcode = ? AND categorycode = ? }; + my $sth = $dbh->prepare( $query ); + $sth->execute( ($addbrwr, $addbra, $addcat) ); + $brwrnmbr = $sth->fetchrow; + + # Not found, let us insert it. + if ( not defined $brwrnmbr ) { + $dbh->do( q{ INSERT INTO borrowers (surname, address, city, branchcode, categorycode) VALUES (?, ?, ?, ?, ?) }, + undef, ($addbrwr, '(test) address', '(test) city', $addbra, $addcat) ); + + # Retrieve the njew borrower number. + $query = + q{ SELECT borrowernumber from borrowers WHERE surname = ? AND branchcode = ? AND categorycode = ? }; + my $sth = $dbh->prepare( $query ); + $sth->execute( ($addbrwr, $addbra, $addcat) ); + $brwrnmbr = $sth->fetchrow; + } +} + +# Must have valid borrower number, or tests are meaningless. +ok ( defined $brwrnmbr ); # Test add_opac_new +my $rv = add_opac_new(); # intentionally bad +is( $rv, 0, 'Correctly failed on no parameter!' ); + my $timestamp = '2000-01-01'; my ( $timestamp1, $timestamp2 ) = ( $timestamp, $timestamp ); -my ($title1, $new1, - $lang1, $expirationdate1, $number1) = - ( 'News Title', '

We have some exciting news!

', - '', '2999-12-30', 1 ); -my $rv = add_opac_new( $title1, $new1, $lang1, $expirationdate1, $timestamp1, $number1 ); -ok($rv==1,"Successfully added the first dummy news item!"); - -my ($title2, $new2, - $lang2, $expirationdate2, $number2) = - ( 'News Title2', '

We have some exciting news!

', - '', '2999-12-31', 1 ); -$rv = add_opac_new( $title2, $new2, $lang2, $expirationdate2, $timestamp2, $number2 ); -ok($rv==1,"Successfully added the second dummy news item!"); +my $timestamp3 = '2000-01-02'; +my ( $title1, $new1, $lang1, $expirationdate1, $number1 ) = + ( 'News Title', '

We have some exciting news!

', q{}, '2999-12-30', 1 ); +my $href_entry1 = { + title => $title1, + content => $new1, + lang => $lang1, + expirationdate => $expirationdate1, + timestamp => $timestamp1, + number => $number1, + branchcode => 'LIB1', +}; + +$rv = add_opac_new($href_entry1); +is( $rv, 1, 'Successfully added the first dummy news item!' ); + +my ( $title2, $new2, $lang2, $expirationdate2, $number2 ) = + ( 'News Title2', '

We have some exciting news!

', q{}, '2999-12-31', 1 ); +my $href_entry2 = { + title => $title2, + content => $new2, + lang => $lang2, + expirationdate => $expirationdate2, + timestamp => $timestamp2, + number => $number2, + borrowernumber => $brwrnmbr, + branchcode => 'LIB1', +}; +$rv = add_opac_new($href_entry2); +is( $rv, 1, 'Successfully added the second dummy news item!' ); + +my ( $title3, $new3, $lang3, $number3 ) = + ( 'News Title3', '

News without expiration date

', q{}, 1 ); +my $href_entry3 = { + title => $title3, + content => $new3, + lang => $lang3, + timestamp => $timestamp3, + number => $number3, + borrowernumber => $brwrnmbr, + branchcode => 'LIB1', +}; +$rv = add_opac_new($href_entry3); +is( $rv, 1, 'Successfully added the third dummy news item without expiration date!' ); # We need to determine the idnew in a non-MySQLism way. # This should be good enough. -my $sth = $dbh->prepare(q{ - SELECT idnew from opac_news - WHERE timestamp='2000-01-01' AND - expirationdate='2999-12-30'; - }); -$sth->execute(); -my $idnew1 = $sth->fetchrow; -$sth = $dbh->prepare(q{ - SELECT idnew from opac_news - WHERE timestamp='2000-01-01' AND - expirationdate='2999-12-31'; - }); -$sth->execute(); -my $idnew2 = $sth->fetchrow; +my $query = +q{ SELECT idnew from opac_news WHERE timestamp='2000-01-01' AND expirationdate='2999-12-30'; }; +my ( $idnew1 ) = $dbh->selectrow_array( $query ); +$query = +q{ SELECT idnew from opac_news WHERE timestamp='2000-01-01' AND expirationdate='2999-12-31'; }; +my ( $idnew2 ) = $dbh->selectrow_array( $query ); + +$query = +q{ SELECT idnew from opac_news WHERE timestamp='2000-01-02'; }; +my ( $idnew3 ) = $dbh->selectrow_array( $query ); # Test upd_opac_new -$new2 = '

Update! There is no news!

'; -$rv = upd_opac_new( $idnew2, $title2, $new2, $lang2, $expirationdate2, $timestamp2, $number2 ); -ok($rv==1,"Successfully updated second dummy news item!"); +$rv = upd_opac_new(); # intentionally bad parmeters +is( $rv, 0, 'Correctly failed on no parameter!' ); + +$new2 = '

Update! There is no news!

'; +$href_entry2->{content} = $new2; +$href_entry2->{idnew} = $idnew2; +$rv = upd_opac_new($href_entry2); +is( $rv, 1, 'Successfully updated second dummy news item!' ); # Test get_opac_new (single news item) -$timestamp1 = format_date( $timestamp1 ); -$expirationdate1 = format_date( $expirationdate1 ); -$timestamp2 = format_date( $timestamp2 ); -$expirationdate2 = format_date( $expirationdate2 ); - -my $hashref_check = get_opac_new($idnew1); -my $failure = 0; -if ($hashref_check->{title} ne $title1) { $failure = 1; } -if ($hashref_check->{new} ne $new1) { $failure = 1; } -if ($hashref_check->{lang} ne $lang1) { $failure = 1; } -if ($hashref_check->{expirationdate} ne $expirationdate1) { $failure = 1; } -if ($hashref_check->{timestamp} ne $timestamp1) { $failure = 1; } -if ($hashref_check->{number} ne $number1) { $failure = 1; } -ok($failure==0,"Successfully tested get_opac_new id1!"); +$timestamp1 = output_pref( { dt => dt_from_string( $timestamp1 ), dateonly => 1 } ); +$expirationdate1 = output_pref( { dt => dt_from_string( $expirationdate1 ), dateonly => 1 } ); +$timestamp2 = output_pref( { dt => dt_from_string( $timestamp2 ), dateonly => 1 } ); +$expirationdate2 = output_pref( { dt => dt_from_string( $expirationdate2) , dateonly => 1 } ); + +is_deeply( + get_opac_new($idnew1), + { + title => $title1, + content => $new1, + lang => $lang1, + expirationdate => $expirationdate1, + timestamp => $timestamp1, + number => $number1, + borrowernumber => undef, + idnew => $idnew1, + branchname => "$addbra branch", + branchcode => $addbra, + # this represents $lang => 1 in the hash + # that's returned... which seems a little + # redundant given that there's a perfectly + # good 'lang' key in the hash + '' => 1, + }, + 'got back expected news item via get_opac_new - ID 1' +); # Test get_opac_new (single news item) -$hashref_check = get_opac_new($idnew2); -$failure = 0; -if ($hashref_check->{title} ne $title2) { $failure = 1; } -if ($hashref_check->{new} ne $new2) { $failure = 1; } -if ($hashref_check->{lang} ne $lang2) { $failure = 1; } -if ($hashref_check->{expirationdate} ne $expirationdate2) { $failure = 1; } -if ($hashref_check->{timestamp} ne $timestamp2) { $failure = 1; } -if ($hashref_check->{number} ne $number2) { $failure = 1; } -ok($failure==0,"Successfully tested get_opac_new id2!"); +is_deeply( + get_opac_new($idnew2), + { + title => $title2, + content => $new2, + lang => $lang2, + expirationdate => $expirationdate2, + timestamp => $timestamp2, + number => $number2, + borrowernumber => $brwrnmbr, + idnew => $idnew2, + branchname => "$addbra branch", + branchcode => $addbra, + '' => 1, + }, + 'got back expected news item via get_opac_new - ID 2' +); + +# Test get_opac_new (single news item without expiration date) +my $news3 = get_opac_new($idnew3); +is($news3->{ expirationdate }, undef, "Expiration date should be empty"); # Test get_opac_news (multiple news items) -my ($opac_news_count, $arrayref_opac_news) = get_opac_news(0,''); -ok($opac_news_count>=2,"Successfully tested get_opac_news!"); +my ( $opac_news_count, $arrayref_opac_news ) = get_opac_news( 0, q{}, 'LIB1' ); + +# using >= 2, because someone may have LIB1 news already. +ok( $opac_news_count >= 2, 'Successfully tested get_opac_news for LIB1!' ); # Test GetNewsToDisplay -($opac_news_count, $arrayref_opac_news) = GetNewsToDisplay(''); -ok($opac_news_count>=2,"Successfully tested GetNewsToDisplay!"); +( $opac_news_count, $arrayref_opac_news ) = GetNewsToDisplay( q{}, 'LIB1' ); +ok( $opac_news_count >= 2, 'Successfully tested GetNewsToDisplay for LIB1!' ); + +# Regression test 14248 -- make sure author_title, author_firstname, and +# author_surname exist. -$dbh->rollback; +subtest 'Regression tests on author title, firstname, and surname.', sub { + my ( $opac_news_count, $opac_news ) = get_opac_news( 0, q{}, 'LIB1' ); + my $check = 0; # bitwise flag to confirm NULL and not NULL borrowernumber. + ok($opac_news_count>0,'Data exists for regression testing'); + foreach my $news_item (@$opac_news) { + ok(exists $news_item->{author_title}, 'Author title exists'); + ok(exists $news_item->{author_firstname},'Author first name exists'); + ok(exists $news_item->{author_surname}, 'Author surname exists'); + if ($news_item->{borrowernumber}) { + ok(defined $news_item->{author_title} || + defined $news_item->{author_firstname} || + defined $news_item->{author_surname}, 'Author data defined'); + $check = $check | 2; # bitwise flag; + } + else { + ok(!defined $news_item->{author_title}, + 'Author title undefined as expected'); + ok(!defined $news_item->{author_firstname}, + 'Author first name undefined as expected'); + ok(!defined $news_item->{author_surname}, + 'Author surname undefined as expected'); + $check = $check | 1; # bitwise flag; + } + } + ok($check==3,'Both with and without author data tested'); + done_testing(); +};