Bug 20912: (QA follow-up) Move Fees to Charges::
[koha.git] / t / RecordProcessor.t
index 32acc6b..63683c1 100755 (executable)
 #
 # 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 2 of the License, or (at your option) any later
-# version.
+# 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.
+# 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.
+# 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 strict;
-use warnings;
 use File::Spec;
 use MARC::Record;
-
+use English qw( -no_match_vars );
 use Test::More;
 
 BEGIN {
-        use_ok('Koha::RecordProcessor');
+    use_ok('Koha::RecordProcessor');
 }
 
-my $isbn = '0590353403';
-my $title = 'Foundation';
-my $marc_record=MARC::Record->new;
-my $field = MARC::Field->new('020','','','a' => $isbn);
+my $isbn        = '0590353403';
+my $title       = 'Foundation';
+my $marc_record = MARC::Record->new;
+my $field       = MARC::Field->new( '020', q{}, q{}, 'a' => $isbn );
 $marc_record->append_fields($field);
-$field = MARC::Field->new('245','','','a' => $title);
+$field = MARC::Field->new( '245', q{}, q{}, 'a' => $title );
 $marc_record->append_fields($field);
 
-
 my $filterdir = File::Spec->rel2abs('Koha/Filter') . '/MARC';
 
-opendir(my $dh, $filterdir);
-my @installed_filters = map { ( /\.pm$/ && -f "$filterdir/$_" && s/\.pm$// ) ? "Koha::Filters::MARC::$_" : () } readdir($dh);
+my $dh;
+opendir $dh, $filterdir;
+my @installed_filters;
+my @directory_entries = readdir $dh;
+foreach my $entry (@directory_entries) {
+    if ( $entry =~ /[.]pm$/xsm && -f "$filterdir/$entry" ) {
+        my $filter_name = $entry;
+        $filter_name =~ s/[.]pm$//xsm;
+        push @installed_filters, $filter_name;
+    }
+}
+closedir $dh;
 my @available_filters = Koha::RecordProcessor::AvailableFilters();
 
 foreach my $filter (@installed_filters) {
-    ok(grep($filter, @available_filters), "Found filter $filter");
+    ok( grep { /${filter}/xsm } @available_filters, "Found filter $filter" );
 }
 
-my $marc_filters = grep (/MARC/, @available_filters);
-is(scalar Koha::RecordProcessor::AvailableFilters('MARC'), $marc_filters, 'Retrieved list of MARC filters');
+my $marc_filters = grep { /MARC/sm } @available_filters;
+is( scalar Koha::RecordProcessor::AvailableFilters('MARC'),
+    $marc_filters, 'Retrieved list of MARC filters' );
 
-my $processor = Koha::RecordProcessor->new( { filters => ( 'ABCD::EFGH::IJKL' ) } );
+my $processor =
+  Koha::RecordProcessor->new( { filters => ('ABCD::EFGH::IJKL') } );
 
-is(ref($processor), 'Koha::RecordProcessor', 'Created record processor with invalid filter');
+is( ref($processor), 'Koha::RecordProcessor',
+    'Created record processor with invalid filter' );
 
-is($processor->process($marc_record), $marc_record, 'Process record with empty processor');
+is( $processor->process($marc_record),
+    $marc_record, 'Process record with empty processor' );
 
-$processor = Koha::RecordProcessor->new( { filters => ( 'Null' ) } );
-is(ref($processor->filters->[0]), 'Koha::Filter::MARC::Null', 'Created record processor with implicitly scoped Null filter');
+$processor = Koha::RecordProcessor->new( { filters => ('Null') } );
+is( ref( $processor->filters->[0] ),
+    'Koha::Filter::MARC::Null',
+    'Created record processor with implicitly scoped Null filter' );
 
-$processor = Koha::RecordProcessor->new( { filters => ( 'Koha::Filter::MARC::Null' ) } );
-is(ref($processor->filters->[0]), 'Koha::Filter::MARC::Null', 'Created record processor with explicitly scoped Null filter');
+$processor =
+  Koha::RecordProcessor->new( { filters => ('Koha::Filter::MARC::Null') } );
+is( ref( $processor->filters->[0] ),
+    'Koha::Filter::MARC::Null',
+    'Created record processor with explicitly scoped Null filter' );
 
-is($processor->process($marc_record), $marc_record, 'Process record');
+is( $processor->process($marc_record), $marc_record, 'Process record' );
 
 $processor->bind($marc_record);
 
-is($processor->record, $marc_record, 'Bound record to processor');
+is( $processor->record, $marc_record, 'Bound record to processor' );
 
-is($processor->process(), $marc_record, 'Filter bound record');
+is( $processor->process(), $marc_record, 'Filter bound record' );
 
-eval {
-    $processor = Koha::RecordProcessor->new( { filters => ( 'Koha::Filter::MARC::Null' ) } );
+my $destroy_test = eval {
+    $processor =
+      Koha::RecordProcessor->new( { filters => ('Koha::Filter::MARC::Null') } );
     undef $processor;
+    return 1;
 };
 
-ok(!$@, 'Destroyed processor successfully');
+ok( !$EVAL_ERROR && $destroy_test == 1, 'Destroyed processor successfully' );
+
+subtest 'new() tests' => sub {
+
+    plan tests => 14;
+
+    my $record_processor;
+
+    # Create a processor with a valid filter
+    $record_processor = Koha::RecordProcessor->new( { filters => 'Null' } );
+    is( ref($record_processor), 'Koha::RecordProcessor', 'Processor created' );
+    is( scalar @{ $record_processor->filters }, 1, 'One filter initialized' );
+    is( ref( $record_processor->filters->[0] ),
+        'Koha::Filter::MARC::Null', 'Correct filter initialized' );
+
+    # Create a processor with an invalid filter
+    $record_processor = Koha::RecordProcessor->new( { filters => 'Dummy' } );
+    is( ref($record_processor), 'Koha::RecordProcessor', 'Processor created' );
+    is( scalar @{ $record_processor->filters }, 0, 'No filter initialized' );
+    is( ref( $record_processor->filters->[0] ),
+        q{}, 'Make sure no filter initialized' );
+
+    # Create a processor with two valid filters
+    $record_processor = Koha::RecordProcessor->new(
+        { filters => [ 'Null', 'EmbedSeeFromHeadings' ] } );
+    is( ref($record_processor), 'Koha::RecordProcessor', 'Processor created' );
+    is( scalar @{ $record_processor->filters }, 2, 'Two filters initialized' );
+    is(
+        ref( $record_processor->filters->[0] ),
+        'Koha::Filter::MARC::Null',
+        'Correct first filter initialized'
+    );
+    is(
+        ref( $record_processor->filters->[1] ),
+        'Koha::Filter::MARC::EmbedSeeFromHeadings',
+        'Correct second filter initialized'
+    );
+
+    # Create a processor with both valid and invalid filters.
+    # use hash reference for regression testing
+    my $parameters = {
+        filters => [ 'Null', 'Dummy' ],
+        options => { 'test' => 'true' }
+    };
+    $record_processor = Koha::RecordProcessor->new($parameters);
+    is( ref($record_processor), 'Koha::RecordProcessor', 'Processor created' );
+    is( scalar @{ $record_processor->filters }, 1, 'Invalid filter skipped' );
+    is( ref( $record_processor->filters->[0] ),
+        'Koha::Filter::MARC::Null', 'Correct filter initialized' );
+
+    my $filter_params = $record_processor->filters->[0]->params;
+    is_deeply( $filter_params, $parameters, 'Initialization parameters' );
+};
 
 done_testing();