# This Koha test module is a stub!
# Add more tests here!!!
-use strict;
-use warnings;
+use Modern::Perl;
-use Test::More tests => 5;
+use Test::More tests => 9;
use Test::MockModule;
+use Test::Warn;
use MARC::Record;
+use t::lib::Mocks;
+use t::lib::TestBuilder;
+use Koha::Database;
+use Koha::Authority::Types;
+
BEGIN {
use_ok('C4::AuthoritiesMarc');
}
return $record;
});
+my $schema = Koha::Database->new->schema;
+$schema->storage->txn_begin;
+my $dbh = C4::Context->dbh;
+my $builder = t::lib::TestBuilder->new;
+
+t::lib::Mocks::mock_preference('marcflavour', 'MARC21');
+
+# Authority type GEOGR_NAME is hardcoded here
+if( ! Koha::Authority::Types->find('GEOGR_NAME') ) {
+ $builder->build({ source => 'AuthType', value => { authtypecode => 'GEOGR_NAME' }});
+};
+
is(BuildAuthHierarchies(3, 1), '1,2,3', "Built linked authtrees hierarchy string");
my $expectedhierarchy = [ [ {
'parents' => []
} ] ];
is_deeply(GenerateHierarchy(4), $expectedhierarchy, "Generated hierarchy data structure for unlinked hierarchy");
+
+# set up auth_types for next tests
+$dbh->do('DELETE FROM auth_types');
+$dbh->do(q{
+ INSERT INTO auth_types (authtypecode, authtypetext, auth_tag_to_report, summary)
+ VALUES ('GEOGR_NAME', 'Geographic Name', '151', 'Geographic Name')
+});
+
+t::lib::Mocks::mock_preference('marcflavour', 'MARC21');
+my $expected_marc21_summary = {
+ 'authorized' => [
+ {
+ 'field' => '151',
+ 'heading' => 'New York (State)',
+ 'hemain' => 'New York (State)'
+ }
+ ],
+ 'authtypecode' => 'GEOGR_NAME',
+ 'mainentry' => 'New York (State)',
+ 'mainmainentry' => 'New York (State)',
+ 'notes' => [],
+ 'otherscript' => [],
+ 'seealso' => [
+ {
+ 'authid' => '1',
+ 'field' => '551',
+ 'heading' => 'United States',
+ 'hemain' => 'United States',
+ 'search' => 'United States',
+ 'type' => 'broader'
+ }
+ ],
+ 'seefrom' => [],
+ 'label' => 'Geographic Name',
+ 'type' => 'Geographic Name'
+};
+is_deeply(
+ BuildSummary(C4::AuthoritiesMarc::GetAuthority(2), 2, 'GEOGR_NAME'),
+ $expected_marc21_summary,
+ 'test BuildSummary for MARC21'
+);
+
+my $marc21_subdiv = MARC::Record->new();
+$marc21_subdiv->add_fields(
+ [ '181', ' ', ' ', x => 'Political aspects' ]
+);
+warning_is { BuildSummary($marc21_subdiv, 99999, 'GEN_SUBDIV') } [],
+ 'BuildSummary does not generate warning if main heading subfield not present';
+
+t::lib::Mocks::mock_preference('marcflavour', 'UNIMARC');
+$dbh->do(q{
+ INSERT INTO auth_types (authtypecode, authtypetext, auth_tag_to_report, summary)
+ VALUES ('NP', 'Auteur', '200', '[200a][, 200b][ 200d][ ; 200c][ (200f)]')
+});
+
+my $unimarc_name_auth = MARC::Record->new();
+$unimarc_name_auth->add_fields(
+ ['100', ' ', ' ', a => '20121025 frey50 '],
+ ['200', ' ', ' ', a => 'Fossey', b => 'Brigitte' ],
+ ['152', ' ', ' ', a => 'NP'],
+);
+my $expected_unimarc_name_summary = {
+ 'authorized' => [
+ {
+ 'field' => '200',
+ 'heading' => 'Fossey Brigitte',
+ 'hemain' => 'Fossey'
+ }
+ ],
+ 'authtypecode' => 'NP',
+ 'mainentry' => 'Fossey Brigitte',
+ 'mainmainentry' => 'Fossey',
+ 'notes' => [],
+ 'otherscript' => [],
+ 'seealso' => [],
+ 'seefrom' => [],
+ 'summary' => 'Fossey, Brigitte',
+ 'type' => 'Auteur'
+};
+
+is_deeply(
+ BuildSummary($unimarc_name_auth, 99999, 'NP'),
+ $expected_unimarc_name_summary,
+ 'test BuildSummary for UNIMARC'
+);
+
+subtest 'AddAuthority should respect AUTO_INCREMENT (BZ 18104)' => sub {
+ plan tests => 3;
+
+ t::lib::Mocks::mock_preference( 'marcflavour', 'MARC21' );
+ my $record = C4::AuthoritiesMarc::GetAuthority(1);
+ my $id1 = AddAuthority( $record, undef, 'GEOGR_NAME' );
+ DelAuthority({ authid => $id1 });
+ my $id2 = AddAuthority( $record, undef, 'GEOGR_NAME' );
+ isnt( $id1, $id2, 'Do not return the same id again' );
+ t::lib::Mocks::mock_preference( 'marcflavour', 'UNIMARC' );
+ my $id3 = AddAuthority( $record, undef, 'GEOGR_NAME' );
+ ok( $id3 > 0, 'Tested AddAuthority with UNIMARC' );
+ is( $record->field('001')->data, $id3, 'Check updated 001' );
+};
+
+$schema->storage->txn_rollback;