Bug 31555: change holds GET permission to place_holds
[koha-ffzg.git] / t / db_dependent / Biblio.t
index 1ffa014..67cba63 100755 (executable)
@@ -17,7 +17,7 @@
 
 use Modern::Perl;
 
-use Test::More tests => 14;
+use Test::More tests => 15;
 use Test::MockModule;
 use Test::Warn;
 use List::MoreUtils qw( uniq );
@@ -33,7 +33,7 @@ use Koha::MarcSubfieldStructures;
 use C4::Linker::Default qw( get_link );
 
 BEGIN {
-    use_ok('C4::Biblio', qw( AddBiblio GetMarcFromKohaField BiblioAutoLink GetMarcSubfieldStructure GetMarcSubfieldStructureFromKohaField LinkBibHeadingsToAuthorities GetBiblioData GetMarcBiblio ModBiblio GetMarcISSN GetMarcControlnumber GetMarcISBN GetMarcPrice GetFrameworkCode GetMarcUrls IsMarcStructureInternal GetMarcStructure GetXmlBiblio DelBiblio ));
+    use_ok('C4::Biblio', qw( AddBiblio GetMarcFromKohaField BiblioAutoLink GetMarcSubfieldStructure GetMarcSubfieldStructureFromKohaField LinkBibHeadingsToAuthorities GetBiblioData ModBiblio GetMarcISSN GetMarcControlnumber GetMarcISBN GetMarcPrice GetFrameworkCode GetMarcUrls IsMarcStructureInternal GetMarcStructure GetXmlBiblio DelBiblio ));
 }
 
 my $schema = Koha::Database->new->schema;
@@ -68,8 +68,9 @@ subtest 'AddBiblio' => sub {
     is( Koha::Biblios->count, $nb_biblios,
         'No biblio should have been added if something went wrong' );
 
-    t::lib::Mocks::mock_preference( 'BiblioAddsAuthorities', $marcflavour );
+    t::lib::Mocks::mock_preference( 'AutoLinkBiblios', $marcflavour );
     t::lib::Mocks::mock_preference( 'AutoCreateAuthorities', $marcflavour );
+    t::lib::Mocks::mock_preference( 'autoControlNumber', "OFF" );
 
     my $mock_biblio = Test::MockModule->new("C4::Biblio");
     $mock_biblio->mock( BiblioAutoLink => sub {
@@ -170,7 +171,7 @@ subtest "Authority creation with default linker" => sub {
     plan tests => 4;
     # Automatic authority creation
     t::lib::Mocks::mock_preference('LinkerModule', 'Default');
-    t::lib::Mocks::mock_preference('BiblioAddsAuthorities', 1);
+    t::lib::Mocks::mock_preference('AutoLinkBiblios', 1);
     t::lib::Mocks::mock_preference('AutoCreateAuthorities', 1);
     t::lib::Mocks::mock_preference('marcflavour', 'MARC21');
     my $linker = C4::Linker::Default->new({});
@@ -250,9 +251,9 @@ sub run_tests {
     # Authority tests don't interact well with Elasticsearch at the moment due to the fact that there's currently no way to
     # roll back ES index changes.
     t::lib::Mocks::mock_preference('SearchEngine', 'Zebra');
+    t::lib::Mocks::mock_preference('autoControlNumber', 'OFF');
 
-    my $bgj_mock = Test::MockModule->new('Koha::BackgroundJob::BatchUpdateBiblioHoldsQueue');
-    $bgj_mock->mock( 'enqueue', undef );
+    t::lib::Mocks::mock_preference( 'RealTimeHoldsQueue', 0 );
 
     my $isbn = '0590353403';
     my $title = 'Foundation';
@@ -274,8 +275,10 @@ sub run_tests {
     is( $data->{ title }, undef,
         '(GetBiblioData) Title field is empty in fresh biblio.');
 
+    my $biblio = Koha::Biblios->find($biblionumber);
+
     my ( $isbn_field, $isbn_subfield ) = get_isbn_field();
-    my $marc = GetMarcBiblio({ biblionumber => $biblionumber });
+    my $marc = $biblio->metadata->record;
     is( $marc->subfield( $isbn_field, $isbn_subfield ), $isbn, );
 
     # Add title
@@ -286,7 +289,7 @@ sub run_tests {
     is( $data->{ title }, $title,
         'ModBiblio correctly added the title field, and GetBiblioData.');
     is( $data->{ isbn }, $isbn, '(ModBiblio) ISBN is still there after ModBiblio.');
-    $marc = GetMarcBiblio({ biblionumber => $biblionumber });
+    $marc = $biblio->get_from_storage->metadata->record;
     my ( $title_field, $title_subfield ) = get_title_field();
     is( $marc->subfield( $title_field, $title_subfield ), $title, );
 
@@ -423,10 +426,8 @@ sub run_tests {
 
     is( GetMarcPrice( $record_for_isbn, $marcflavour ), 100,
         "GetMarcPrice returns the correct value");
-    my $updatedrecord = GetMarcBiblio({
-        biblionumber => $biblionumber,
-        embed_items  => 0 });
     my $frameworkcode = GetFrameworkCode($biblionumber);
+    my $updatedrecord = $biblio->metadata->record;
     my ( $biblioitem_tag, $biblioitem_subfield ) = GetMarcFromKohaField( "biblioitems.biblioitemnumber" );
     die qq{No biblioitemnumber tag for framework "$frameworkcode"} unless $biblioitem_tag;
     my $biblioitemnumbertotest;
@@ -448,7 +449,7 @@ sub run_tests {
         'GetMarcUrls prefixed a MARC21 URL with http://' );
 
     # Automatic authority creation
-    t::lib::Mocks::mock_preference('BiblioAddsAuthorities', 1);
+    t::lib::Mocks::mock_preference('AutoLinkBiblios', 1);
     t::lib::Mocks::mock_preference('AutoCreateAuthorities', 1);
     my $authorities_mod = Test::MockModule->new( 'C4::Heading' );
     $authorities_mod->mock(
@@ -492,7 +493,7 @@ sub run_tests {
     is($field->subfield($author_relator_subfield), undef, 'Authority does not contain relator subfield');
 
     # Reset settings
-    t::lib::Mocks::mock_preference('BiblioAddsAuthorities', 0);
+    t::lib::Mocks::mock_preference('AutoLinkBiblios', 0);
     t::lib::Mocks::mock_preference('AutoCreateAuthorities', 0);
 }
 
@@ -639,8 +640,7 @@ subtest 'IsMarcStructureInternal' => sub {
 subtest 'deletedbiblio_metadata' => sub {
     plan tests => 2;
 
-    my $bgj_mock = Test::MockModule->new('Koha::BackgroundJob::BatchUpdateBiblioHoldsQueue');
-    $bgj_mock->mock( 'enqueue', undef );
+    t::lib::Mocks::mock_preference( 'RealTimeHoldsQueue', 0 );
 
     my ($biblionumber, $biblioitemnumber) = AddBiblio(MARC::Record->new, '');
     my $biblio_metadata = C4::Biblio::GetXmlBiblio( $biblionumber );
@@ -655,8 +655,7 @@ subtest 'DelBiblio' => sub {
 
     plan tests => 5;
 
-    my $bgj_mock = Test::MockModule->new('Koha::BackgroundJob::BatchUpdateBiblioHoldsQueue');
-    $bgj_mock->mock( 'enqueue', undef );
+    t::lib::Mocks::mock_preference( 'RealTimeHoldsQueue', 0 );
 
     my ($biblionumber, $biblioitemnumber) = C4::Biblio::AddBiblio(MARC::Record->new, '');
     my $deleted = C4::Biblio::DelBiblio( $biblionumber );
@@ -709,7 +708,8 @@ subtest 'MarcFieldForCreatorAndModifier' => sub {
     my $record = MARC::Record->new();
     my ($biblionumber) = C4::Biblio::AddBiblio($record, '');
 
-    $record = GetMarcBiblio({biblionumber => $biblionumber});
+    my $biblio = Koha::Biblios->find($biblionumber);
+    $record = $biblio->metadata->record;
     is($record->subfield('998', 'a'), 123, '998$a = 123');
     is($record->subfield('998', 'b'), 'John Doe', '998$b = John Doe');
     is($record->subfield('998', 'c'), 123, '998$c = 123');
@@ -718,7 +718,7 @@ subtest 'MarcFieldForCreatorAndModifier' => sub {
     $c4_context->mock('userenv', sub { return { number => 321, firstname => 'Jane', surname => 'Doe'}; });
     C4::Biblio::ModBiblio($record, $biblionumber, '');
 
-    $record = GetMarcBiblio({biblionumber => $biblionumber});
+    $record = $biblio->get_from_storage->metadata->record;
     is($record->subfield('998', 'a'), 123, '998$a = 123');
     is($record->subfield('998', 'b'), 'John Doe', '998$b = John Doe');
     is($record->subfield('998', 'c'), 321, '998$c = 321');
@@ -728,7 +728,7 @@ subtest 'MarcFieldForCreatorAndModifier' => sub {
 subtest 'ModBiblio called from linker test' => sub {
     plan tests => 2;
     my $called = 0;
-    t::lib::Mocks::mock_preference('BiblioAddsAuthorities', 1);
+    t::lib::Mocks::mock_preference('AutoLinkBiblios', 1);
     my $biblio_mod = Test::MockModule->new( 'C4::Biblio' );
     $biblio_mod->mock( 'LinkBibHeadingsToAuthorities', sub {
         $called = 1;
@@ -825,6 +825,34 @@ subtest "LinkBibHeadingsToAuthorities record generation tests" => sub {
     );
 };
 
+subtest 'autoControlNumber tests' => sub {
+
+    plan tests => 3;
+
+    t::lib::Mocks::mock_preference('autoControlNumber', 'OFF');
+
+    my $record = MARC::Record->new();
+    my ($biblio_id) = C4::Biblio::AddBiblio($record, '');
+    my $biblio = Koha::Biblios->find($biblio_id);
+
+    $record = $biblio->metadata->record;
+    is($record->field('001'), undef, '001 not set when pref is off');
+
+    t::lib::Mocks::mock_preference('autoControlNumber', 'biblionumber');
+    C4::Biblio::ModBiblio($record, $biblio_id, "", { skip_record_index => 1, disable_autolink => 1 });
+    $biblio->discard_changes;
+    $record = $biblio->metadata->record;
+    is($record->field('001')->as_string(), $biblio_id, '001 set to biblionumber when pref set and field is blank');
+
+    $record->field('001')->update('Not biblionumber');
+    C4::Biblio::ModBiblio($record, $biblio_id, "", { skip_record_index => 1, disable_autolink => 1 });
+    $biblio->discard_changes;
+    $record = $biblio->metadata->record;
+    is($record->field('001')->as_string(), 'Not biblionumber', '001 not set to biblionumber when pref set and field exists');
+
+};
+
+
 # Cleanup
 Koha::Caches->get_instance->clear_from_cache( "MarcSubfieldStructure-" );
 $schema->storage->txn_rollback;