Bugzilla – Attachment 31193 Details for
Bug 6536
Z3950 Search Enhancements: SRU targets and additional XSLT processing
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 6536: QA Follow-up: Add some unit tests for Z3950Search in Breeding.pm
Bug-6536-QA-Follow-up-Add-some-unit-tests-for-Z395.patch (text/plain), 8.92 KB, created by
Marcel de Rooy
on 2014-08-27 15:04:51 UTC
(
hide
)
Description:
Bug 6536: QA Follow-up: Add some unit tests for Z3950Search in Breeding.pm
Filename:
MIME Type:
Creator:
Marcel de Rooy
Created:
2014-08-27 15:04:51 UTC
Size:
8.92 KB
patch
obsolete
>From 7a2718d0debc08e683ad796114edfd0284bb6601 Mon Sep 17 00:00:00 2001 >From: Marcel de Rooy <m.de.rooy@rijksmuseum.nl> >Date: Wed, 27 Aug 2014 16:45:56 +0200 >Subject: [PATCH] Bug 6536: QA Follow-up: Add some unit tests for Z3950Search > in Breeding.pm >Content-Type: text/plain; charset=utf-8 > >This patch may serve as a starting point for more unit tests in this part >of the code. >In this patch most internal subroutines of Z3950Search are covered. >In the XSLT part we reuse a XSL template from the XSLT_Handler.t test. >It needed a little tweaking for namespaces. And added the indicators on >the 990 field. > >Test plan: >Run both Breeding.t and XSLT_Handler.t. > >Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl> >--- > t/db_dependent/Breeding.t | 181 ++++++++++++++++++++++++++++++++ > t/db_dependent/XSLT_Handler/test01.xsl | 4 +- > 2 files changed, 183 insertions(+), 2 deletions(-) > create mode 100644 t/db_dependent/Breeding.t > >diff --git a/t/db_dependent/Breeding.t b/t/db_dependent/Breeding.t >new file mode 100644 >index 0000000..1f43852 >--- /dev/null >+++ b/t/db_dependent/Breeding.t >@@ -0,0 +1,181 @@ >+#!/usr/bin/perl >+ >+# Copyright 2014 Rijksmuseum >+# >+# 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, write to the Free Software Foundation, Inc., >+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. >+ >+use Modern::Perl; >+ >+use FindBin; >+use Test::More tests => 3; >+ >+use C4::Breeding; >+use Koha::XSLT_Handler; >+ >+#Main object of this unit test is the Breeding module and its subroutines >+#A start has been made to define tests for subroutines of Z3950Search. >+#These subroutines are actually internal, but these tests may pave the way for >+#a more comprehensive test of Z3950Search itself. >+#TODO >+#Furthermore, we need additional tests for: >+#Z3950SearchAuth, BreedingSearch, ImportBreedingAuth >+ >+#Group 1: testing _build_query and _translate_query (part of Z3950Search) >+subtest '_build_query' => sub { >+ plan tests => 12; >+ test_build_translate_query(); >+}; >+#Group 2: testing _create_connection (part of Z3950Search) >+subtest '_create_connection' => sub { >+ plan tests => 5; >+ test_create_connection(); >+}; >+#Group 3: testing _do_xslt_proc (part of Z3950Search) >+subtest '_do_xslt_proc' => sub { >+ plan tests => 6; >+ test_do_xslt(); >+}; >+ >+#------------------------------------------------------------------------------- >+ >+sub test_build_translate_query { >+ my $str; >+ #First pass no parameters >+ my @queries= C4::Breeding::_build_query( {} ); >+ is( defined $queries[0] && $queries[0] eq '' && defined $queries[1] && >+ $queries[1] eq '', 1, '_build_query gets no parameters'); >+ >+ #We now pass one parameter >+ my $pars1= { isbn => '234567' }; >+ @queries= C4::Breeding::_build_query( $pars1 ); >+ #Passed only one par: zquery should start with @attr 1=\d+ >+ is( $queries[0] =~ /^\@attr 1=\d+/, 1, 'Z39.50 query with one parameter'); >+ $str=$pars1->{isbn}; >+ #Find back ISBN? >+ is( $queries[0] =~ /$str/, 1, 'First Z39.50 query contains ISBN'); >+ #SRU query should contain translation for ISBN >+ my $server= { sru_fields => 'isbn=ie-es-bee-en,srchany=overal' }; >+ my $squery= C4::Breeding::_translate_query( $server, $queries[1] ); >+ is( $squery =~ /ie-es-bee-en/, 1, 'SRU query has translated ISBN index'); >+ #Another try with fallback to any >+ $server= { sru_fields => 'srchany=overal' }; >+ $squery= C4::Breeding::_translate_query( $server, $queries[1] ); >+ is( $squery =~ /overal/, 1, 'SRU query fallback to translated any'); >+ #Another try even without any >+ $server= { sru_fields => 'this,is,bad,input' }; >+ $squery= C4::Breeding::_translate_query( $server, $queries[1] ); >+ is( $squery =~ /$str/ && $squery !~ /=/, 1, 'SRU query without indexes'); >+ >+ #We now pass two parameters >+ my $pars2= { isbn => '123456', title => 'You should read this.' }; >+ @queries= C4::Breeding::_build_query( $pars2 ); >+ #The Z39.50 query should start with @and (we passed two pars) >+ is( $queries[0] =~ /^\@and/, 1, 'Second Z39.50 query starts with @and'); >+ #We should also find two @attr 1=\d+ >+ my @matches= $queries[0] =~ /\@attr 1=\d+/g; >+ is( @matches == 2, 1, 'Second Z39.50 query includes two @attr 1='); >+ #We should find text of both parameters in the query >+ $str= $pars2->{isbn}; >+ is( $queries[0] =~ /$str/, 1, 'Second query contains ISBN'); >+ $str= $pars2->{title}; >+ is( $queries[0] =~ /$str/, 1, 'Second query contains title'); >+ #SRU revisited >+ $server= { sru_fields => 'isbn=nb,title=dc.title,srchany=overal' }; >+ $squery= C4::Breeding::_translate_query( $server, $queries[1] ); >+ is ( $squery =~ /dc.title/ && $squery =~ / and / && >+ $squery =~ /nb=/, 1, 'SRU query with two parameters'); >+ >+ #We now pass a third wrong parameter (should not make a difference) >+ my $pars3= { isbn => '123456', title => 'You should read this.', xyz => 1 }; >+ my @queries2= C4::Breeding::_build_query( $pars3 ); >+ is( $queries[0] eq $queries2[0] && $queries[1] eq $queries2[1], 1, >+ 'Third query makes no difference'); >+} >+ >+sub test_create_connection { >+ #TODO This is just a *simple* start >+ >+ my $str; >+ my $server= { servertype => 'zed', db => 'MyDatabase', >+ host => 'really-not-a-domain-i-hope.nl', port => 80, >+ }; >+ my $obj= C4::Breeding::_create_connection( $server ); >+ >+ #We should get back an object, even if it did not connect >+ is( ref $obj eq 'ZOOM::Connection', 1, 'Got back a ZOOM connection'); >+ >+ #Remember: it is async >+ my $i= ZOOM::event( [ $obj ] ); >+ if( $i == 1 ) { >+ #We could examine ZOOM::event_str( $obj->last_event ) >+ #For now we are satisfied with an error message >+ #Probably: Connect failed >+ is( ($obj->errmsg//'') ne '', 1, 'Connection failed as expected'); >+ >+ } else { >+ ok( 1, 'No ZOOM event found: skipped errmsg' ); >+ } >+ >+ #Checking the databaseName for Z39.50 server >+ $str=$obj->option('databaseName')//''; >+ is( $str eq $server->{db}, 1, 'Check ZOOM option for database'); >+ >+ #Another test for SRU >+ $obj->destroy(); >+ $server->{ servertype } = 'sru'; >+ $server->{ sru_options } = 'just_testing=fun'; >+ $obj= C4::Breeding::_create_connection( $server ); >+ #In this case we expect no databaseName, but we expect just_testing >+ $str=$obj->option('databaseName'); >+ is( $str, undef, 'No databaseName for SRU connection'); >+ $str=$obj->option('just_testing')//''; >+ is( $str eq 'fun', 1, 'Additional ZOOM option for SRU found'); >+ $obj->destroy(); >+} >+ >+sub test_do_xslt { >+ my $biblio = MARC::Record->new(); >+ $biblio->append_fields( >+ MARC::Field->new('100', ' ', ' ', a => 'John Writer'), >+ MARC::Field->new('245', ' ', ' ', a => 'Just a title'), >+ ); >+ my $file= $FindBin::Bin.'/XSLT_Handler/test01.xsl'; >+ my $server= { add_xslt => $file }; >+ my $engine=Koha::XSLT_Handler->new; >+ >+ #ready for the main test >+ my @res = C4::Breeding::_do_xslt_proc( $biblio, $server, $engine ); >+ is( $res[1] && $res[1] eq 'xslt_err', undef, >+ 'Check error code of _do_xslt_proc'); >+ if( !$res[1] ) { >+ is( ref $res[0] eq 'MARC::Record', 1, 'Got back MARC record'); >+ my $sub = $res[0]->subfield('990','a')//''; >+ is( $sub eq 'I saw you', 1, 'Found 990a in the record'); >+ } else { >+ ok( 1, 'Skipped one test'); >+ ok( 1, 'Skipped another one'); >+ } >+ >+ #forcing an error on the xslt side >+ $server->{add_xslt} = 'notafile.xsl'; >+ @res = C4::Breeding::_do_xslt_proc( $biblio, $server, $engine ); >+ is( $res[1] && $res[1] eq 'xslt_err', 1, >+ 'Check error code again'); >+ #We still expect the original record back >+ is( ref $res[0] eq 'MARC::Record', 1, 'Still got back MARC record'); >+ is ( $res[0]->subfield('245','a') eq 'Just a title', 1, >+ 'At least the title is the same :)' ); >+} >diff --git a/t/db_dependent/XSLT_Handler/test01.xsl b/t/db_dependent/XSLT_Handler/test01.xsl >index 3c2b188..9200198 100644 >--- a/t/db_dependent/XSLT_Handler/test01.xsl >+++ b/t/db_dependent/XSLT_Handler/test01.xsl >@@ -4,10 +4,10 @@ > > > <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> > >- <xsl:template match="record"> >+ <xsl:template match="record|marc:record"> > <record> > <xsl:apply-templates/> >- <datafield tag="990"> >+ <datafield tag="990" ind1='' ind2=''> > <subfield code="a"> > <xsl:text>I saw you</xsl:text> > </subfield> >-- >1.7.7.6
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 6536
:
4540
|
4541
|
4959
|
6901
|
6919
|
6920
|
6924
|
13462
|
26169
|
26170
|
26171
|
26172
|
29754
|
29755
|
29756
|
29779
|
29780
|
29788
|
29790
|
29791
|
29812
|
29813
|
29814
|
29815
|
29816
|
29817
|
29818
|
29819
|
30189
|
30190
|
30191
|
30192
|
30193
|
30194
|
30900
|
30901
|
30902
|
30903
|
30904
|
30905
|
30906
|
30907
|
30929
|
30930
|
30931
|
30932
|
30933
|
30934
|
30935
|
30936
|
31046
|
31048
|
31137
| 31193 |
31194
|
31195
|
31227
|
31247
|
31248
|
37264