From 4dcf776b4ee6f7cc13a1e388f37310ba33edd494 Mon Sep 17 00:00:00 2001 From: Mark Tompsett Date: Mon, 16 Sep 2013 23:26:37 -0400 Subject: [PATCH] Bug 10895 - Tests for C4::Items GetHiddenItems Bug 10589 introduces PatronSingleBranch and PatronEveryBranch system preferences. This ensures that the visibility of two dummy records matches expectations. OpacHiddenItems is set to hide 2 records. The system preferences are then toggled between four cases ('SPT','SS','','SS|SPT') cross multipled for the two system preferences to verify the correct visibility. This will fail for a system with bug 10589 not applied. --- t/db_dependent/GetHiddenItems_PatronCategory.t | 260 ++++++++++++++++++++++++ 1 file changed, 260 insertions(+) create mode 100755 t/db_dependent/GetHiddenItems_PatronCategory.t diff --git a/t/db_dependent/GetHiddenItems_PatronCategory.t b/t/db_dependent/GetHiddenItems_PatronCategory.t new file mode 100755 index 0000000..c39d822 --- /dev/null +++ b/t/db_dependent/GetHiddenItems_PatronCategory.t @@ -0,0 +1,260 @@ +#!/usr/bin/perl + +# This file is part of Koha. +# +# Copyright (C) 2013 Mark Tompsett +# +# This Koha test module is intended for Patron Category +# tweaks to the OpacHiddenItems system preference. +# Related to Bug 10859 +# +# Koha is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . +# + +use Modern::Perl; +use MARC::Record; +use Carp; +use C4::Biblio; +use C4::Context; +use C4::Members; +use Data::Dumper; +use YAML qw/Load/; # due to bug 10872 not being in master yet. +use Test::More tests => 22; + +BEGIN { + use_ok('C4::Items'); +} + +my $dbh = C4::Context->dbh; +# Start transaction +$dbh->{AutoCommit} = 0; +$dbh->{RaiseError} = 1; + +# Helper biblio. +my ($bibnum, $bibitemnum) = get_biblio(); + +# Add dummy branches. +$dbh->do('INSERT INTO branches (branchcode,branchname) VALUES ("LIB1","LIB1");'); +$dbh->do('INSERT INTO branches (branchcode,branchname) VALUES ("LIB2","LIB2");'); + +# Add dummy patron categories +$dbh->do("INSERT INTO categories (categorycode, description) VALUES ('SPT','Sample Patron Code');"); +$dbh->do("INSERT INTO categories (categorycode, description) VALUES ('SS','Sample Staff Code');"); + +# Add same item for two branches. +my ($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem({ homebranch => 'LIB1', holdingbranch => 'LIB1' } , $bibnum); +cmp_ok($item_bibnum, '==', $bibnum, "LIB1 Item linked to correct biblionumber."); +cmp_ok($item_bibitemnum, '==', $bibitemnum, "LIB1 Item linked to correct biblioitemnumber."); +($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem({ homebranch => 'LIB2', holdingbranch => 'LIB2' } , $bibnum); +cmp_ok($item_bibnum, '==', $bibnum, "LIB2 Item linked to correct biblionumber."); +cmp_ok($item_bibitemnum, '==', $bibitemnum, "LIB2 Item linked to correct biblioitemnumber."); + +# Add dummy patron. +C4::Context->set_preference('PatronSelfRegistrationDefaultCategory','PT'); +my %borrower; +$borrower{'surname'} = 'Borrower'; +$borrower{'firstname'} = 'Sample'; +$borrower{'address'} = '123 Bogus Street'; +$borrower{'city'} = 'Bogusville'; +$borrower{'branchcode'} = 'LIB1'; +$borrower{'categorycode'} = 'PT'; +$borrower{'zipcode'} = 'H0H 0H0'; +$borrower{'userid'} = 'Sample.Borrower'; +$borrower{'email'} = 'santa@northpole.com'; +$borrower{'phone'} = '967-1111'; +print Dumper(\%borrower) . "\n"; +my ( $borrowernumber, $password ) = C4::Members::AddMember_Opac(%borrower) or + croak "AddMember_Opac failed.\n"; +diag("Sample Borrower added.\n"); +print STDERR "CHECK: $borrowernumber\n$password\n"; + +# Get the member's card number. +my $sql = "SELECT cardnumber FROM borrowers WHERE borrowernumber=?;"; +my $sth = $dbh->prepare($sql); +$sth->execute($borrowernumber); +my $cardnumber = $sth->fetchrow; + +# Get an array of hashes of Item information. +my @all_items = C4::Items::GetItemsInfo($bibnum); +diag($all_items[0]->{'itemnumber'} . " - " . $all_items[0]->{'homebranch'}); +diag($all_items[1]->{'itemnumber'} . " - " . $all_items[1]->{'homebranch'}); + +# Hide everything for this record. +C4::Context->set_preference('OpacHiddenItems',"homebranch: [LIB1,LIB2]\n"); + +# Check what's hidden when a user isn't logged in. +my @items2hide = C4::Items::GetHiddenItemnumbers(@all_items); +cmp_ok( scalar @items2hide, '==', 2, "OpacHiddenItems hid everything correctly."); +diag(join(',',@items2hide)); + +diag("Borrower number: $borrowernumber"); +# Set up dummy patron as if logged in. +my @USERENV = ( + $borrowernumber, + 'Sample.Borrower', + $cardnumber, + 'Sample', + 'Borrower', + 'LIB1', + 'LIB1', + 0, +); +C4::Context->_new_userenv('DUMMY_SESSION_ID'); +C4::Context::set_userenv( @USERENV ); +diag("Sample Borrower environment variables set up.\n"); + +# 4 blocks of 4 cases: 'SPT','SS','','SS|SPT' +C4::Context->set_preference('PatronSingleBranch','SPT'); +C4::Context->set_preference('PatronEveryBranch','SPT'); +$sql = "UPDATE borrowers SET categorycode='SPT' WHERE borrowernumber=?;"; +$sth = $dbh->prepare($sql); +$sth->execute($borrowernumber); + +@items2hide = C4::Items::GetHiddenItemnumbers(@all_items); +cmp_ok( scalar @items2hide, '==', 0, "OpacHiddenItems unhid everything correctly."); +diag("PatronSingleBranch: SPT\nPatronEveryBranch: SPT\n"); +diag(join(',',@items2hide)); + +# PatronSingleBranch toggle +C4::Context->set_preference('PatronSingleBranch','SPT'); +C4::Context->set_preference('PatronEveryBranch','SS'); +@items2hide = C4::Items::GetHiddenItemnumbers(@all_items); +cmp_ok( scalar @items2hide, '==', 1, "OpacHiddenItems hid LIB2 correctly."); +diag("PatronSingleBranch: SPT\nPatronEveryBranch: SS\n"); +diag(join(',',@items2hide)); + +# PatronSingleBranch toggle +C4::Context->set_preference('PatronSingleBranch','SPT'); +C4::Context->set_preference('PatronEveryBranch',''); +@items2hide = C4::Items::GetHiddenItemnumbers(@all_items); +cmp_ok( scalar @items2hide, '==', 1, "OpacHiddenItems hid LIB2 correctly."); +diag("PatronSingleBranch: SPT\nPatronEveryBranch: ''\n"); +diag(join(',',@items2hide)); + +# PatronSingleBranch toggle +C4::Context->set_preference('PatronSingleBranch','SPT'); +C4::Context->set_preference('PatronEveryBranch','SS|SPT'); +@items2hide = C4::Items::GetHiddenItemnumbers(@all_items); +cmp_ok( scalar @items2hide, '==', 0, "OpacHiddenItems unhid everything correctly."); +diag("PatronSingleBranch: SPT\nPatronEveryBranch: SS|SPT\n"); +diag(join(',',@items2hide)); + +# PatronSingleBranch toggle +C4::Context->set_preference('PatronSingleBranch','SS'); +C4::Context->set_preference('PatronEveryBranch','SPT'); +@items2hide = C4::Items::GetHiddenItemnumbers(@all_items); +cmp_ok( scalar @items2hide, '==', 0, "OpacHiddenItems unhid everything correctly."); +diag("PatronSingleBranch: SS\nPatronEveryBranch: SPT\n"); +diag(join(',',@items2hide)); + +# PatronSingleBranch toggle +C4::Context->set_preference('PatronSingleBranch','SS'); +C4::Context->set_preference('PatronEveryBranch','SS'); +@items2hide = C4::Items::GetHiddenItemnumbers(@all_items); +cmp_ok( scalar @items2hide, '==', 2, "OpacHiddenItems hid everything correctly."); +diag("PatronSingleBranch: SS\nPatronEveryBranch: SS\n"); +diag(join(',',@items2hide)); + +# PatronSingleBranch toggle +C4::Context->set_preference('PatronSingleBranch','SS'); +C4::Context->set_preference('PatronEveryBranch',''); +@items2hide = C4::Items::GetHiddenItemnumbers(@all_items); +cmp_ok( scalar @items2hide, '==', 2, "OpacHiddenItems hid everything correctly."); +diag("PatronSingleBranch: SS\nPatronEveryBranch: ''\n"); +diag(join(',',@items2hide)); + +# PatronSingleBranch toggle +C4::Context->set_preference('PatronSingleBranch','SS'); +C4::Context->set_preference('PatronEveryBranch','SS|SPT'); +@items2hide = C4::Items::GetHiddenItemnumbers(@all_items); +cmp_ok( scalar @items2hide, '==', 0, "OpacHiddenItems unhid everything correctly."); +diag("PatronSingleBranch: SS\nPatronEveryBranch: SS|SPT\n"); +diag(join(',',@items2hide)); + +# PatronSingleBranch toggle +C4::Context->set_preference('PatronSingleBranch',''); +C4::Context->set_preference('PatronEveryBranch','SPT'); +@items2hide = C4::Items::GetHiddenItemnumbers(@all_items); +cmp_ok( scalar @items2hide, '==', 0, "OpacHiddenItems unhid everything correctly."); +diag("PatronSingleBranch: ''\nPatronEveryBranch: SPT\n"); +diag(join(',',@items2hide)); + +# PatronSingleBranch toggle +C4::Context->set_preference('PatronSingleBranch',''); +C4::Context->set_preference('PatronEveryBranch','SS'); +@items2hide = C4::Items::GetHiddenItemnumbers(@all_items); +cmp_ok( scalar @items2hide, '==', 2, "OpacHiddenItems hid everything correctly."); +diag("PatronSingleBranch: ''\nPatronEveryBranch: SS\n"); +diag(join(',',@items2hide)); + +# PatronSingleBranch toggle +C4::Context->set_preference('PatronSingleBranch',''); +C4::Context->set_preference('PatronEveryBranch',''); +@items2hide = C4::Items::GetHiddenItemnumbers(@all_items); +cmp_ok( scalar @items2hide, '==', 2, "OpacHiddenItems hid everything correctly."); +diag("PatronSingleBranch: ''\nPatronEveryBranch: ''\n"); +diag(join(',',@items2hide)); + +# PatronSingleBranch toggle +C4::Context->set_preference('PatronSingleBranch',''); +C4::Context->set_preference('PatronEveryBranch','SS|SPT'); +@items2hide = C4::Items::GetHiddenItemnumbers(@all_items); +cmp_ok( scalar @items2hide, '==', 0, "OpacHiddenItems unhid everything correctly."); +diag("PatronSingleBranch: ''\nPatronEveryBranch: SS|SPT\n"); +diag(join(',',@items2hide)); + +# PatronSingleBranch toggle +C4::Context->set_preference('PatronSingleBranch','SS|SPT'); +C4::Context->set_preference('PatronEveryBranch','SPT'); +@items2hide = C4::Items::GetHiddenItemnumbers(@all_items); +cmp_ok( scalar @items2hide, '==', 0, "OpacHiddenItems unhid everything correctly."); +diag("PatronSingleBranch: SS|SPT\nPatronEveryBranch: SPT\n"); +diag(join(',',@items2hide)); + +# PatronSingleBranch toggle +C4::Context->set_preference('PatronSingleBranch','SS|SPT'); +C4::Context->set_preference('PatronEveryBranch','SS'); +@items2hide = C4::Items::GetHiddenItemnumbers(@all_items); +cmp_ok( scalar @items2hide, '==', 1, "OpacHiddenItems hid LIB2 correctly."); +diag("PatronSingleBranch: SS|SPT\nPatronEveryBranch: SS\n"); +diag(join(',',@items2hide)); + +# PatronSingleBranch toggle +C4::Context->set_preference('PatronSingleBranch','SS|SPT'); +C4::Context->set_preference('PatronEveryBranch',''); +@items2hide = C4::Items::GetHiddenItemnumbers(@all_items); +cmp_ok( scalar @items2hide, '==', 1, "OpacHiddenItems hid LIB2 correctly."); +diag("PatronSingleBranch: SS|SPT\nPatronEveryBranch: ''\n"); +diag(join(',',@items2hide)); + +# PatronSingleBranch toggle +C4::Context->set_preference('PatronSingleBranch','SS|SPT'); +C4::Context->set_preference('PatronEveryBranch','SS|SPT'); +@items2hide = C4::Items::GetHiddenItemnumbers(@all_items); +cmp_ok( scalar @items2hide, '==', 0, "OpacHiddenItems unhid everything correctly."); +diag("PatronSingleBranch: SS|SPT\nPatronEveryBranch: SS|SPT\n"); +diag(join(',',@items2hide)); + +# Nothing wrong with being explicit. :) +$dbh->rollback(); + +# Helper method to set up a Biblio. +sub get_biblio { + my $bib = MARC::Record->new(); + $bib->append_fields( + MARC::Field->new('100', ' ', ' ', a => 'Moffat, Steven'), + MARC::Field->new('245', ' ', ' ', a => 'Silence in the library'), + ); + return ($bibnum, $bibitemnum) = AddBiblio($bib, ''); +} -- 1.7.9.5