Bug 21450: Unit tests
authorNick Clemens <nick@bywatersolutions.com>
Wed, 23 Jan 2019 21:07:41 +0000 (21:07 +0000)
committerMartin Renvoize <martin.renvoize@ptfs-europe.com>
Thu, 30 May 2019 20:24:06 +0000 (21:24 +0100)
To test:
1 - Apply just this patch
2 - prove -v t/db_dependent/Linker_Default.t
3 - It fails
4 - Apply second patch
5 - prove -v t/db_dependent/Linker_Default.t
6 - It passes

Signed-off-by: Liz Rea <wizzyrea@gmail.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

Bug 21450: Remove copyright lines

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
(cherry picked from commit 366ef794969c3bc67c70ea7c9d85cb04944f4f05)
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

t/db_dependent/Linker_Default.t [new file with mode: 0755]

diff --git a/t/db_dependent/Linker_Default.t b/t/db_dependent/Linker_Default.t
new file mode 100755 (executable)
index 0000000..340f7e1
--- /dev/null
@@ -0,0 +1,81 @@
+#!/usr/bin/perl
+#
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# Koha is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
+
+use Modern::Perl;
+use Test::More tests => 2;
+
+use MARC::Record;
+use MARC::Field;
+use MARC::File::XML;
+use C4::Heading;
+use C4::Linker::FirstMatch;
+use Test::MockModule;
+use t::lib::Mocks qw( mock_preference );
+use t::lib::TestBuilder;
+
+BEGIN {
+    use_ok('C4::Linker');
+}
+
+# Mock C4::Heading->authorities() so tests will all pass.
+# This completely bypasses any search engine calls.
+my $authid=0;
+my $mock_heading = Test::MockModule->new('C4::Heading');
+$mock_heading->mock( authorities => sub { return [ { authid => $authid++ } ]; } );
+
+my $builder = t::lib::TestBuilder->new();
+my $schema  = $builder->schema();
+$schema->storage->txn_begin;
+
+subtest 'Test caching in get_link and update_cache' => sub {
+    plan tests => 6;
+
+    my @tags = C4::Context->preference('marcflavour') eq 'UNIMARC' ? (601,'j',602,'a') : (650,'a',655,'a');
+
+    my $subject_field = MARC::Field->new($tags[0],0,2,$tags[1]=>'Science fiction');
+    my $subject_field2 = MARC::Field->new($tags[0],0,2,$tags[1]=>'Science fiction');
+    my $genre_field = MARC::Field->new($tags[2],0,2,$tags[3]=>'Science fiction');
+    # Can we build a heading from it?
+    my $subject_heading = C4::Heading->new_from_bib_field( $subject_field, q{} );
+    my $subject_heading2 = C4::Heading->new_from_bib_field( $subject_field, q{} );
+    my $genre_heading = C4::Heading->new_from_bib_field( $genre_field, q{} );
+
+
+    # Now test to see if C4::Linker can find it.
+    my $authmatch;
+    my $fuzzy;
+    my $linker = C4::Linker::Default->new();
+
+    $linker->get_link($subject_heading);
+    is( keys %{$linker->{cache}},1, "First term added to cache");
+
+    $linker->get_link($genre_heading);
+    is( keys %{$linker->{cache}},2, "Second (matching) term added to cache because of different type");
+
+    $linker->get_link($subject_heading2);
+    is( keys %{$linker->{cache}},2, "Third (matching) term not added to cache because of matching type");
+
+
+    $linker->update_cache($subject_heading,32);
+    is( $linker->{cache}->{$subject_heading->search_form.$subject_heading->auth_type}->{authid}, 32, "Linker cache is correctly updated by 'update_cache'");
+    my ( $authid, undef ) = $linker->get_link($subject_heading);
+    is( $authid, 32, "Correct id is retrieved from the cache" );
+    ( $authid, undef ) = $linker->get_link($genre_heading);
+    isnt( $authid, 32, "Genre term is not updated by update_cache");
+};
+
+$schema->storage->txn_rollback;