Bug 32648: Avoid skipping record or hiding item
authorNick Clemens <nick@bywatersolutions.com>
Fri, 31 Mar 2023 10:44:45 +0000 (10:44 +0000)
committerTomas Cohen Arazi <tomascohen@theke.io>
Fri, 31 Mar 2023 11:13:37 +0000 (13:13 +0200)
It seems that depending on other tests, the item could be hidden from the record, or
the entire record hidden because of the way we count hidden items.

I add a mock for the two HIddenItems prefs and hardcode an xml record
to avoid problematic data from test builder

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
t/Search.t

index 9eaf5ba..a6fed41 100755 (executable)
@@ -189,18 +189,59 @@ subtest "searchResults PassItemMarcToXSLT test" => sub {
 
     my $builder = t::lib::TestBuilder->new;
 
-    my $item = $builder->build_sample_item();
-    my $record = $item->biblio->metadata->record({ embed_items => 1 });
-
+    my $xml_record = q{
+<record
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"
+    xmlns="http://www.loc.gov/MARC21/slim">
+
+  <leader>00144    a2200073   4500</leader>
+  <datafield tag="245" ind1=" " ind2=" ">
+    <subfield code="a">Some boring read</subfield>
+  </datafield>
+  <datafield tag="100" ind1=" " ind2=" ">
+    <subfield code="a">Some boring author</subfield>
+  </datafield>
+  <datafield tag="942" ind1=" " ind2=" ">
+    <subfield code="c">gOlAIZMF</subfield>
+  </datafield>
+  <datafield tag="952" ind1=" " ind2=" ">
+    <subfield code="0">0</subfield>
+    <subfield code="1">0</subfield>
+    <subfield code="4">0</subfield>
+    <subfield code="7">0</subfield>
+    <subfield code="9">1117</subfield>
+    <subfield code="a">D6C8Pj</subfield>
+    <subfield code="b">D6C8Pj</subfield>
+    <subfield code="d">2023-03-31</subfield>
+    <subfield code="l">0</subfield>
+    <subfield code="p">g57ad1Zn3NOYZ</subfield>
+    <subfield code="r">2023-03-31</subfield>
+    <subfield code="w">2023-03-31</subfield>
+    <subfield code="y">gOlAIZMF</subfield>
+  </datafield>
+  <datafield tag="999" ind1=" " ind2=" ">
+    <subfield code="c">553</subfield>
+    <subfield code="d">553</subfield>
+  </datafield>
+</record>
+};
     t::lib::Mocks::mock_preference('PassItemMarcToXSLT','1');
 
-    warnings_like { C4::Search::searchResults({ interface => "opac" },"test",1,1,0,0,[ $record->as_xml_record ] ,undef) }
+    # The routine uses a count of items in DB to determine if record should be hidden.
+    # Our item is not in the DB, so we avoid hiding the record which would
+    # mean we don't call XSLTParse4Display.
+    # Also ensure item is not hidden
+    t::lib::Mocks::mock_preference('OpacHiddenItems','');
+    t::lib::Mocks::mock_preference('OpacHiddenItemsHidesRecord','0');
+
+    warnings_like { C4::Search::searchResults({ interface => "opac" },"test",1,1,0,0,[ $xml_record ] ,undef) }
         [qr/Item here/],
         "Item field returned from default XSLT if pref set";
 
     t::lib::Mocks::mock_preference('PassItemMarcToXSLT','0');
 
-    warnings_like { C4::Search::searchResults({ interface => "opac" },"test",1,1,0,0,[ $record->as_xml_record ] ,undef) }
+    warnings_like { C4::Search::searchResults({ interface => "opac" },"test",1,1,0,0,[ $xml_record ] ,undef) }
         [qr/No item/],
         "Item field returned from default XSLT if pref set";