# This is to test C4/Koha
# It requires a working Koha database with the sample data
-use strict;
-use warnings;
-use C4::Context;
-
+use Modern::Perl;
use Test::More tests => 5;
-use DateTime::Format::MySQL;
-eval {use Test::Deep;};
+use t::lib::TestBuilder;
+
+use C4::Context;
+use Koha::Database;
+use Koha::AuthorisedValue;
+use Koha::AuthorisedValueCategories;
BEGIN {
- use_ok('C4::Koha', qw( :DEFAULT GetDailyQuote ));
+ use_ok('C4::Koha', qw( GetAuthorisedValues GetItemTypesCategorized xml_escape ));
use_ok('C4::Members');
}
+my $schema = Koha::Database->new->schema;
+$schema->storage->txn_begin;
+my $builder = t::lib::TestBuilder->new;
my $dbh = C4::Context->dbh;
+our $itype_1 = $builder->build({ source => 'Itemtype' });
+
subtest 'Authorized Values Tests' => sub {
- plan tests => 6;
+ plan tests => 3;
my $data = {
category => 'CATEGORY',
imageurl => 'IMAGEURL'
};
-
+ my $avc = Koha::AuthorisedValueCategories->find($data->{category});
+ Koha::AuthorisedValueCategory->new({ category_name => $data->{category} })->store unless $avc;
# Insert an entry into authorised_value table
- my $query = "INSERT INTO authorised_values (category, authorised_value, lib, lib_opac, imageurl) VALUES (?,?,?,?,?);";
- my $sth = $dbh->prepare($query);
- my $insert_success = $sth->execute($data->{category}, $data->{authorised_value}, $data->{lib}, $data->{lib_opac}, $data->{imageurl});
- ok($insert_success, "Insert data in database");
+ my $insert_success = Koha::AuthorisedValue->new(
+ { category => $data->{category},
+ authorised_value => $data->{authorised_value},
+ lib => $data->{lib},
+ lib_opac => $data->{lib_opac},
+ imageurl => $data->{imageurl}
+ }
+ )->store;
+ ok( $insert_success, "Insert data in database" );
-# Tests
- SKIP: {
- skip "INSERT failed", 5 unless $insert_success;
-
- is ( GetAuthorisedValueByCode($data->{category}, $data->{authorised_value}), $data->{lib}, "GetAuthorisedValueByCode" );
- is ( GetKohaImageurlFromAuthorisedValues($data->{category}, $data->{lib}), $data->{imageurl}, "GetKohaImageurlFromAuthorisedValues" );
-
- my $sortdet=C4::Members::GetSortDetails("lost", "3");
- is ($sortdet, "Lost and Paid For", "lost and paid works");
-
- my $sortdet2=C4::Members::GetSortDetails("loc", "child");
- is ($sortdet2, "Children's Area", "Child area works");
-
- my $sortdet3=C4::Members::GetSortDetails("withdrawn", "1");
- is ($sortdet3, "Withdrawn", "Withdrawn works");
- }
-
# Clean up
if($insert_success){
- $query = "DELETE FROM authorised_values WHERE category=? AND authorised_value=? AND lib=? AND lib_opac=? AND imageurl=?;";
- $sth = $dbh->prepare($query);
+ my $query = "DELETE FROM authorised_values WHERE category=? AND authorised_value=? AND lib=? AND lib_opac=? AND imageurl=?;";
+ my $sth = $dbh->prepare($query);
$sth->execute($data->{category}, $data->{authorised_value}, $data->{lib}, $data->{lib_opac}, $data->{imageurl});
}
-};
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-### test for C4::Koha->GetDailyQuote()
-SKIP:
- {
- skip "Test::Deep required to run the GetDailyQuote tests.", 1 if $@;
-
- subtest 'Daily Quotes Test' => sub {
- plan tests => 4;
-
- SKIP: {
-
- skip "C4::Koha can't \'GetDailyQuote\'!", 3 unless can_ok('C4::Koha','GetDailyQuote');
-
- my $expected_quote = {
- id => 3,
- source => 'Abraham Lincoln',
- text => 'Four score and seven years ago our fathers brought forth on this continent, a new nation, conceived in Liberty, and dedicated to the proposition that all men are created equal.',
- timestamp => re('\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}'), #'0000-00-00 00:00:00',
- };
-
-# test quote retrieval based on id
-
- my $quote = GetDailyQuote('id'=>3);
- cmp_deeply ($quote, $expected_quote, "Got a quote based on id.") or
- diag('Be sure to run this test on a clean install of sample data.');
-
-# test random quote retrieval
-
- $quote = GetDailyQuote('random'=>1);
- ok ($quote, "Got a random quote.");
-
-# test quote retrieval based on today's date
-
- my $query = 'UPDATE quotes SET timestamp = ? WHERE id = ?';
- my $sth = C4::Context->dbh->prepare($query);
- $sth->execute(DateTime::Format::MySQL->format_datetime(DateTime->now), $expected_quote->{'id'});
-
- DateTime::Format::MySQL->format_datetime(DateTime->now) =~ m/(\d{4}-\d{2}-\d{2})/;
- $expected_quote->{'timestamp'} = re("^$1");
-
-# $expected_quote->{'timestamp'} = DateTime::Format::MySQL->format_datetime(DateTime->now); # update the timestamp of expected quote data
-
- $quote = GetDailyQuote(); # this is the "default" mode of selection
- cmp_deeply ($quote, $expected_quote, "Got a quote based on today's date.") or
- diag('Be sure to run this test on a clean install of sample data.');
+ SKIP: {
+ eval { require Test::Deep; import Test::Deep; };
+ skip "Test::Deep required to run the GetAuthorisedValues() tests.", 2 if $@;
+ Koha::AuthorisedValueCategory->new({ category_name => 'BUG10656' })->store;
+ Koha::AuthorisedValue->new(
+ { category => 'BUG10656',
+ authorised_value => 'ZZZ',
+ lib => 'Z_STAFF',
+ lib_opac => 'A_PUBLIC',
+ imageurl => ''
}
- };
-}
+ )->store;
+ Koha::AuthorisedValue->new(
+ { category => 'BUG10656',
+ authorised_value => 'AAA',
+ lib => 'A_STAFF',
+ lib_opac => 'Z_PUBLIC',
+ imageurl => ''
+ }
+ )->store;
+
+ # the next one sets lib_opac to NULL; in that case, the staff
+ # display value is meant to be used.
+ Koha::AuthorisedValue->new(
+ { category => 'BUG10656',
+ authorised_value => 'DDD',
+ lib => 'D_STAFF',
+ lib_opac => undef,
+ imageurl => ''
+ }
+ )->store;
+
+ my $authvals = GetAuthorisedValues('BUG10656');
+ cmp_deeply(
+ $authvals,
+ [
+ {
+ id => ignore(),
+ category => 'BUG10656',
+ authorised_value => 'AAA',
+ lib => 'A_STAFF',
+ lib_opac => 'Z_PUBLIC',
+ imageurl => '',
+ },
+ {
+ id => ignore(),
+ category => 'BUG10656',
+ authorised_value => 'DDD',
+ lib => 'D_STAFF',
+ lib_opac => undef,
+ imageurl => '',
+ },
+ {
+ id => ignore(),
+ category => 'BUG10656',
+ authorised_value => 'ZZZ',
+ lib => 'Z_STAFF',
+ lib_opac => 'A_PUBLIC',
+ imageurl => '',
+ },
+ ],
+ 'list of authorised values in staff mode sorted by staff label (bug 10656)'
+ );
+ $authvals = GetAuthorisedValues('BUG10656', 1);
+ cmp_deeply(
+ $authvals,
+ [
+ {
+ id => ignore(),
+ category => 'BUG10656',
+ authorised_value => 'ZZZ',
+ lib => 'A_PUBLIC',
+ lib_opac => 'A_PUBLIC',
+ imageurl => '',
+ },
+ {
+ id => ignore(),
+ category => 'BUG10656',
+ authorised_value => 'DDD',
+ lib => 'D_STAFF',
+ lib_opac => undef,
+ imageurl => '',
+ },
+ {
+ id => ignore(),
+ category => 'BUG10656',
+ authorised_value => 'AAA',
+ lib => 'Z_PUBLIC',
+ lib_opac => 'Z_PUBLIC',
+ imageurl => '',
+ },
+ ],
+ 'list of authorised values in OPAC mode sorted by OPAC label (bug 10656)'
+ );
+ }
+};
-#
-# test that &slashifyDate returns correct (non-US) date
-#
-subtest 'Date and ISBN tests' => sub {
- plan tests => 7;
+subtest 'ISBN tests' => sub {
+ plan tests => 6;
- my $date = "01/01/2002";
- my $newdate = &slashifyDate("2002-01-01");
my $isbn13 = "9780330356473";
my $isbn13D = "978-0-330-35647-3";
my $isbn10 = "033035647X";
my $isbn10D = "0-330-35647-X";
- ok( $date eq $newdate, 'slashifyDate' );
- my $undef = undef;
- is( xml_escape($undef), '',
+ is( xml_escape(undef), '',
'xml_escape() returns empty string on undef input' );
my $str = q{'"&<>'};
is(
'0321496949', '_isbn_cleanup converts ISBN-13 to ISBN-10' );
};
+
+subtest 'GetItemTypesCategorized test' => sub{
+ plan tests => 9;
+
+ my $avc = Koha::AuthorisedValueCategories->find('ITEMTYPECAT');
+ Koha::AuthorisedValueCategory->new({ category_name => 'ITEMTYPECAT' })->store unless $avc;
+ my $insertGroup = Koha::AuthorisedValue->new(
+ { category => 'ITEMTYPECAT',
+ authorised_value => 'Qwertyware',
+ lib => 'Keyboard software',
+ lib_opac => 'Computer stuff',
+ }
+ )->store;
+
+ ok($insertGroup, "Create group Qwertyware");
+
+ my $query = "INSERT into itemtypes (itemtype, description, searchcategory, hideinopac) values (?,?,?,?)";
+ my $insertSth = C4::Context->dbh->prepare($query);
+ $insertSth->execute('BKghjklo1', 'One type of book', '', 0);
+ $insertSth->execute('BKghjklo2', 'Another type of book', 'Qwertyware', 0);
+ $insertSth->execute('BKghjklo3', 'Yet another type of book', 'Qwertyware', 0);
+
+ # Azertyware should not exist.
+ my @itemtypes = Koha::ItemTypes->search({ searchcategory => 'Azertyware' });
+ is( @itemtypes, 0, 'Search item types by searchcategory: Invalid category returns nothing');
+
+ @itemtypes = Koha::ItemTypes->search({ searchcategory => 'Qwertyware' });
+ my @got = map { $_->itemtype } @itemtypes;
+ my @expected = ( 'BKghjklo2', 'BKghjklo3' );
+ is_deeply(\@got,\@expected,'Search item types by searchcategory: valid category returns itemtypes');
+
+ # add more data since GetItemTypesCategorized's search is more subtle
+ $insertGroup = Koha::AuthorisedValue->new(
+ { category => 'ITEMTYPECAT',
+ authorised_value => 'Veryheavybook',
+ lib => 'Weighty literature',
+ }
+ )->store;
+
+ $insertSth->execute('BKghjklo4', 'Another hidden book', 'Veryheavybook', 1);
+
+ my $hrCat = GetItemTypesCategorized();
+ ok(exists $hrCat->{Qwertyware}, 'GetItemTypesCategorized: fully visible category exists');
+ ok($hrCat->{Veryheavybook} &&
+ $hrCat->{Veryheavybook}->{hideinopac}==1, 'GetItemTypesCategorized: non-visible category hidden' );
+
+ is( $hrCat->{Veryheavybook}->{description}, 'Weighty literature', 'A category with only lib description passes through');
+ is( $hrCat->{Qwertyware}->{description}, 'Computer stuff', 'A category with lib_opac description uses that');
+
+ $insertSth->execute('BKghjklo5', 'An hidden book', 'Qwertyware', 1);
+ $hrCat = GetItemTypesCategorized();
+ ok(exists $hrCat->{Qwertyware}, 'GetItemTypesCategorized: partially visible category exists');
+
+ my @only = ( 'BKghjklo1', 'BKghjklo2', 'BKghjklo3', 'BKghjklo4', 'BKghjklo5', 'Qwertyware', 'Veryheavybook' );
+ my @results = ();
+ foreach my $key (@only) {
+ push @results, $key if exists $hrCat->{$key};
+ }
+ @expected = ( 'BKghjklo1', 'Qwertyware', 'Veryheavybook' );
+ is_deeply(\@results,\@expected, 'GetItemTypesCategorized: grouped and ungrouped items returned as expected.');
+};
+
+$schema->storage->txn_rollback;