3 # Tests for Koha/SearchEngine/Search
7 use Test
::More tests
=> 2;
18 use C4
::AuthoritiesMarc
;
22 use Koha
::SearchEngine
::Indexer
;
24 use t
::lib
::TestBuilder
;
27 my $schema = Koha
::Database
->new->schema;
28 my $builder = t
::lib
::TestBuilder
->new;
30 $schema->storage->txn_begin;
32 subtest
'Test indexer object creation' => sub {
35 t
::lib
::Mocks
::mock_preference
( 'SearchEngine', 'Zebra' );
36 my $indexer = Koha
::SearchEngine
::Indexer
->new({ index => $Koha::SearchEngine
::BIBLIOS_INDEX
});
37 is
( ref $indexer, 'Koha::SearchEngine::Zebra::Indexer', 'We get the correct class for Zebra biblios');
38 $indexer = Koha
::SearchEngine
::Indexer
->new({ index => $Koha::SearchEngine
::AUTHORITIES_INDEX
});
39 is
( ref $indexer, 'Koha::SearchEngine::Zebra::Indexer', 'We get the correct class for Zebra authorities');
41 t
::lib
::Mocks
::mock_preference
( 'SearchEngine', 'Elasticsearch' );
45 eval { Koha
::SearchEngine
::Elasticsearch
->get_elasticsearch_params; };
47 skip
'Elasticsearch configuration not available', 4
50 $indexer = Koha
::SearchEngine
::Indexer
->new({ index => $Koha::SearchEngine
::BIBLIOS_INDEX
});
51 is
( ref $indexer, 'Koha::SearchEngine::Elasticsearch::Indexer', 'We get the correct class for Elasticsearch biblios');
52 ok
( $indexer->index_name =~ /biblios$/, "The index is set correctly for biblios");
53 $indexer = Koha
::SearchEngine
::Indexer
->new({ index => $Koha::SearchEngine
::AUTHORITIES_INDEX
});
54 is
( ref $indexer, 'Koha::SearchEngine::Elasticsearch::Indexer', 'We get the correct class for Elasticsearch authorities');
55 ok
( $indexer->index_name =~ /authorities$/, "The index is set correctly for authorities");
60 subtest
'Test indexer calls' => sub {
63 my @engines = ('Zebra');
64 eval { Koha
::SearchEngine
::Elasticsearch
->get_elasticsearch_params; };
65 push @engines, 'Elasticsearch' unless $@
;
67 skip
'Elasticsearch configuration not available', 12
68 if scalar @engines == 1;
71 for my $engine ( @engines ){
72 t
::lib
::Mocks
::mock_preference
( 'SearchEngine', $engine );
73 my $mock_index = Test
::MockModule
->new("Koha::SearchEngine::".$engine."::Indexer");
75 my $biblionumber1 = $builder->build_sample_biblio()->biblionumber;
76 my $biblionumber2 = $builder->build_sample_biblio()->biblionumber;
78 my $mock_zebra = Test
::MockModule
->new("Koha::SearchEngine::Zebra::Indexer");
79 $mock_zebra->mock( ModZebra
=> sub { warn "ModZebra"; } );
80 my $indexer = Koha
::SearchEngine
::Indexer
->new({ index => $Koha::SearchEngine
::BIBLIOS_INDEX
});
82 $indexer->index_records([$biblionumber1,$biblionumber1],"specialUpdate","biblioserver",undef);
83 } ["ModZebra","ModZebra"],"ModZebra called for each record being indexed for $engine";
85 $mock_index->mock( index_records
=> sub {
87 my ($package, undef, undef) = caller;
91 my $auth = MARC
::Record
->new;
94 $authid = AddAuthority
( $auth, undef, 'TOPIC_TERM' );
95 } [$engine,"C4::AuthoritiesMarc"], "index_records is called for $engine is called when adding authority";
98 $authid = DelAuthority
({ authid
=> $authid });
99 } [$engine,"C4::AuthoritiesMarc"], "index_records is called for $engine is called when adding authority";
104 $biblio = $builder->build_sample_biblio();
105 $biblio2 = $builder->build_sample_biblio();
106 } [$engine,'C4::Biblio',$engine,'C4::Biblio'], "index_records is called for $engine when adding a biblio (ModBiblioMarc)";
112 $item = $builder->build_sample_item({biblionumber
=> $biblio->biblionumber});
113 $item2 = $builder->build_sample_item({biblionumber
=> $biblio->biblionumber});
114 } [$engine,"Koha::Item",$engine,"Koha::Item"], "index_records is called for $engine when adding an item (Item->store)";
116 $item->store({ skip_record_index
=> 1 });
117 } undef, "index_records is not called for $engine when adding an item (Item->store) if skip_record_index passed";
120 source
=> 'Branchtransfer',
122 itemnumber
=> $item->itemnumber,
123 datearrived
=> undef}
126 LostItem
( $item->itemnumber, "tests");
127 } [$engine,"Koha::Item"], "index_records is called for $engine when calling LostItem and transfer exists";
129 source
=> 'Branchtransfer',
131 itemnumber
=> $item2->itemnumber,
132 datearrived
=> undef}
135 LostItem
( $item->itemnumber, "tests", undef, { skip_record_index
=> 1 });
136 } undef, "index_records is not called for $engine when calling LostItem and transfer exists if skip_record_index";
140 } [$engine,"Koha::Item"], "index_records is called for $engine when deleting an item (Item->delete)";
142 $item2->delete({ skip_record_index
=> 1 });
143 } undef, "index_records is not called for $engine when adding an item (Item->store) if skip_record_index passed";
146 DelBiblio
( $biblio->biblionumber );
147 } [$engine, "C4::Biblio"], "index_records is called for $engine when calling DelBiblio";
149 DelBiblio
( $biblio->biblionumber, { skip_record_index
=>1 });
150 } undef, "index_records is not called for $engine when calling DelBiblio if skip_record_index passed";
156 $schema->storage->txn_rollback;