From 2378ba83fc3d79fc981935475aa8f15ce9878563 Mon Sep 17 00:00:00 2001 From: Marcel de Rooy Date: Tue, 25 Feb 2020 14:56:15 +0000 Subject: [PATCH] Bug 24052: Fix Koha/XSLT/Base.t Content-Type: text/plain; charset=utf-8 Moving the separate small attachments into the test script. Creating them now as temporary files or code fragments. Deleting original files. Since Breeding.t also used one of these files, a similar change was made in that script. Test plan: Run t/db_dependent/Koha/XSLT/Base.t. Should pass now. Run t/db_dependent/Breeding.t again. Git grep on XSLT_Handler. You should only find release notes. Signed-off-by: Marcel de Rooy --- t/db_dependent/Breeding.t | 40 ++++++++- t/db_dependent/Koha/XSLT/Base.t | 154 ++++++++++++++++++++++++--------- t/db_dependent/XSLT_Handler/test01.xsl | 24 ----- t/db_dependent/XSLT_Handler/test02.xsl | 13 --- t/db_dependent/XSLT_Handler/test03.xsl | 17 ---- t/db_dependent/XSLT_Handler/test04.xsl | 18 ---- 6 files changed, 149 insertions(+), 117 deletions(-) delete mode 100644 t/db_dependent/XSLT_Handler/test01.xsl delete mode 100644 t/db_dependent/XSLT_Handler/test02.xsl delete mode 100644 t/db_dependent/XSLT_Handler/test03.xsl delete mode 100644 t/db_dependent/XSLT_Handler/test04.xsl diff --git a/t/db_dependent/Breeding.t b/t/db_dependent/Breeding.t index 5cd6a46f9b..f3eb54373a 100755 --- a/t/db_dependent/Breeding.t +++ b/t/db_dependent/Breeding.t @@ -25,10 +25,10 @@ # TODO We need additional tests for Z3950SearchAuth, BreedingSearch use Modern::Perl; - -use FindBin; +use File::Temp qw/tempfile/; use Test::More tests => 5; use Test::Warn; + use t::lib::Mocks qw( mock_preference ); use C4::Context; @@ -206,7 +206,7 @@ sub test_do_xslt { MARC::Field->new('100', ' ', ' ', a => 'John Writer'), MARC::Field->new('245', ' ', ' ', a => 'Just a title'), ); - my $file= $FindBin::Bin.'/XSLT_Handler/test01.xsl'; + my $file= xsl_file(); my $server= { add_xslt => $file }; my $engine=Koha::XSLT::Base->new; @@ -266,3 +266,37 @@ sub test_add_rowdata { # Test repeatble tags,the trailing whitespace is a normal side-effect of _add_custom_row_data is_deeply(\$returned_row->{"035\$a"}, \["First 035 ", "Second 035 "],"_add_rowdata supports repeatable tags"); } + +sub xsl_file { + return mytempfile( q{ + + + + + + + + I saw you + + + + + + + + + + + +} ); +} + +sub mytempfile { + my ( $fh, $fn ) = tempfile( SUFFIX => '.xsl', UNLINK => 1 ); + print $fh $_[0]//''; + close $fh; + return $fn; +} diff --git a/t/db_dependent/Koha/XSLT/Base.t b/t/db_dependent/Koha/XSLT/Base.t index 6a06d96577..cf4bf2ff14 100644 --- a/t/db_dependent/Koha/XSLT/Base.t +++ b/t/db_dependent/Koha/XSLT/Base.t @@ -19,9 +19,8 @@ use Modern::Perl; -use FindBin; -use File::Slurp; -use Test::More tests => 35; +use File::Temp qw/tempfile/; +use Test::More tests => 32; use Test::Warn; use Koha::XSLT::Base; @@ -37,32 +36,52 @@ is( $engine->err, Koha::XSLT::Base::XSLTH_ERR_2, 'Engine returns error on bad fi is( $engine->refresh( 'asdjhaskjh'), 0, 'Test on invalid refresh' ); #check first test xsl -my $path= $FindBin::Bin.'/XSLT_Handler/'; -my $xsltfile_1 = 'test01.xsl'; -is( -e $path.$xsltfile_1, 1, "Found my test stylesheet $xsltfile_1" ); -exit if !-e $path.$xsltfile_1; -$xsltfile_1= $path.$xsltfile_1; - -#Testing not-xml strings (undef, empty, some text, malformed xml -my $output; - +my $xsl_1 = <<'XSL_1'; + + + + + + + + + I saw you + + + + + + + + + + + + +XSL_1 + +# Testing not-xml strings (undef, empty, some text, malformed xml # Undefined text tests -$output = $engine->transform( undef, $xsltfile_1 ); +my $output; +$output = $engine->transform({ xml => undef, code => $xsl_1 }); is( $engine->err, Koha::XSLT::Base::XSLTH_ERR_7, 'Engine returns error on undefined text' ); # Empty string tests -$output = $engine->transform( '', $xsltfile_1 ); +$output = $engine->transform({ xml => '', code => $xsl_1 }); is( $engine->err, Koha::XSLT::Base::XSLTH_ERR_5, 'Engine returns error on empty string' ); # Non-XML tests $engine->print_warns(1); -warning_like { $output = $engine->transform( 'abcdef', $xsltfile_1 ) } +warning_like { $output = $engine->transform({ xml => 'abcdef', code => $xsl_1 }) } qr{parser error : Start tag expected, '<' not found}, "Non-XML warning correctly displayed"; is( $engine->err, Koha::XSLT::Base::XSLTH_ERR_5, 'Engine returns error on non-xml' ); # Malformed XML tests -warning_like { $output = $engine->transform( '', $xsltfile_1 ) } +warning_like { $output = $engine->transform({ xml => '', code => $xsl_1 }) } qr{parser error : Opening and ending tag mismatch: a line 1 and b}, "Malformed XML warning correctly displayed"; is( $engine->err, Koha::XSLT::Base::XSLTH_ERR_5, 'Engine returns error on malformed xml' ); @@ -74,33 +93,35 @@ my $secondengine=Koha::XSLT::Base->new( { some_unknown_attrib => 'just_for_fun', }); $engine->do_not_return_source(1); -warning_like { $output = $engine->transform( '', $xsltfile_1 ) } +warning_like { $output = $engine->transform({ xml => '', code => $xsl_1 }) } qr{parser error : Opening and ending tag mismatch: a line 1 and b}, "Malformed XML warning correctly displayed"; is( defined $output? 1: 0, 0, 'Engine respects do_not_return_source==1'); $secondengine->print_warns(1); -warning_like { $output = $secondengine->transform( '', $xsltfile_1 ) } +warning_like { $output = $secondengine->transform({ xml => '', code => $xsl_1 }) } qr{parser error : Opening and ending tag mismatch: a line 1 and b}, "Malformed XML warning correctly displayed"; is( defined $output? 1: 0, 0, 'Second engine respects it too'); undef $secondengine; #bye $engine->do_not_return_source(0); -warning_like { $output = $engine->transform( '', $xsltfile_1 ) } +warning_like { $output = $engine->transform({ xml => '', code => $xsl_1 }) } qr{parser error : Opening and ending tag mismatch: a line 1 and b}, "Malformed XML warning correctly displayed"; is( defined $output? 1: 0, 1, 'Engine respects do_not_return_source==0'); #Testing valid refresh now +my $xsltfile_1 = mytempfile($xsl_1); +$output = $engine->transform( '', $xsltfile_1 ); is( $engine->refresh($xsltfile_1), 1, 'Test on valid refresh' ); -#A second time (for all) should return 0 now -is( $engine->refresh, 0, 'Test on repeated refresh' ); +is( $engine->refresh, 1, 'Second refresh returns 1 for code xsl_1' ); +is( $engine->refresh, 0, 'Third refresh: nothing left' ); #Testing a string that should not change too much my $xml_1=<<'EOT'; EOT -$output= $engine->transform( $xml_1, $xsltfile_1 ); +$output= $engine->transform({ xml => $xml_1, code => $xsl_1 }); is( $engine->err, undef, 'Engine returned no error for xml_1' ); is( index($output,'')>0, 1, 'No real change expected for xml_1' ); #Just very simple check if the tag was still there @@ -115,15 +136,14 @@ my $xml_2=<<'EOT'; EOT $output= $engine->transform( $xml_2 ); - #note: second parameter (file) not passed again + #note: second parameter not passed again is( $engine->err, undef, 'Engine returned no error for xml_2' ); is( index($output,'I saw you')>0, 1, 'Saw the expected change for xml_2' ); #Just very simple check if new datafield was added #Test alternative parameter passing my $output2; $output2 = $engine->transform( { file => $xsltfile_1, xml => $xml_2 } ); is( $output, $output2, 'Try hash parameter file'); -my $code = read_file( $xsltfile_1 ); -$output2 = $engine->transform( { code => $code, xml => $xml_2 } ); +$output2 = $engine->transform( { code => $xsl_1, xml => $xml_2 } ); is( $output, $output2, 'Try hash parameter code'); #Check rerun on last code $output2 = $engine->transform( $xml_2 ); @@ -135,33 +155,77 @@ is( ref $engine->transform({ 'Format parameter returns a xml document object' ); #The second test xsl contains bad code -my $xsltfile_2 = 'test02.xsl'; -is( -e $path.$xsltfile_2, 1, "Found my test stylesheet $xsltfile_2" ); -exit if !-e $path.$xsltfile_2; -$xsltfile_2= $path.$xsltfile_2; +my $xsl_2 = <<'XSL_2'; + + + + + + + + + + +XSL_2 $engine->print_warns(0); -$output = $engine->transform( $xml_2, $xsltfile_2 ); +$output = $engine->transform({ xml => $xml_2, code => $xsl_2 }); is( $engine->err, Koha::XSLT::Base::XSLTH_ERR_4, 'Engine returned error for parsing bad xsl' ); #The third test xsl is okay again; main use is clearing two items from cache -my $xsltfile_3 = 'test03.xsl'; -is( -e $path.$xsltfile_3, 1, "Found my test stylesheet $xsltfile_3" ); -exit if !-e $path.$xsltfile_3; -$xsltfile_3= $path.$xsltfile_3; -$output= $engine->transform( $xml_2, $xsltfile_3 ); +my $xsl_3 = <<'XSL_3'; + + + + + + + + + + + + + + +XSL_3 + +$output= $engine->transform({ xml => $xml_2, code => $xsl_3 }); is( $engine->err, undef, 'Unexpected error on transform with third xsl' ); is( $engine->refresh, 3, 'Final test on clearing cache' ); -my $xsltfile_4 = 'test04.xsl'; -is( -e $path.$xsltfile_4, 1, "Found my test stylesheet $xsltfile_4" ); -exit if !-e $path.$xsltfile_4; -$xsltfile_4 = $path.$xsltfile_4; +# Test xsl no 4 +my $xsl_4 = <<'XSL_4'; + + + + + + + + + + + + + + + +XSL_4 my $parameters = { injected_variable => "'this is a test'",}; $output = $engine->transform({ xml => $xml_1, - file => $xsltfile_4, + code => $xsl_4, parameters => $parameters, }); require XML::LibXML; @@ -171,9 +235,15 @@ is ( $result->to_literal(), 'this is a test', "Successfully injected string into $output = $engine->transform({ xml => $xml_1, - file => $xsltfile_4, + code => $xsl_4, }); $dom = XML::LibXML->load_xml(string => $output); $result = $dom->find( '/just_a_tagname' ); is ( $result->to_literal(), '', "As expected, no XSLT parameters/variables were added"); -#End of tests + +sub mytempfile { + my ( $fh, $fn ) = tempfile( SUFFIX => '.xsl', UNLINK => 1 ); + print $fh $_[0]//''; + close $fh; + return $fn; +} diff --git a/t/db_dependent/XSLT_Handler/test01.xsl b/t/db_dependent/XSLT_Handler/test01.xsl deleted file mode 100644 index 9200198b8a..0000000000 --- a/t/db_dependent/XSLT_Handler/test01.xsl +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - I saw you - - - - - - - - - - - - diff --git a/t/db_dependent/XSLT_Handler/test02.xsl b/t/db_dependent/XSLT_Handler/test02.xsl deleted file mode 100644 index 89f11a5421..0000000000 --- a/t/db_dependent/XSLT_Handler/test02.xsl +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - diff --git a/t/db_dependent/XSLT_Handler/test03.xsl b/t/db_dependent/XSLT_Handler/test03.xsl deleted file mode 100644 index 6ade5517c7..0000000000 --- a/t/db_dependent/XSLT_Handler/test03.xsl +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - diff --git a/t/db_dependent/XSLT_Handler/test04.xsl b/t/db_dependent/XSLT_Handler/test04.xsl deleted file mode 100644 index 7b20ed71fc..0000000000 --- a/t/db_dependent/XSLT_Handler/test04.xsl +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - -- 2.11.0