Bug 18208: Add RecordProcessor filter to inject not onloan count to MARC records
[srvgit] / t / db_dependent / Koha / Filter / EmbedItemsAvailability.t
1 #!/usr/bin/perl
2
3 # This file is part of Koha.
4 #
5 # Koha is free software; you can redistribute it and/or modify it
6 # under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 3 of the License, or
8 # (at your option) any later version.
9 #
10 # Koha is distributed in the hope that it will be useful, but
11 # WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with Koha; if not, see <http://www.gnu.org/licenses>.
17
18 use Modern::Perl;
19
20 use Test::More tests => 1;
21 use t::lib::Mocks;
22 use t::lib::TestBuilder;
23
24 use MARC::Record;
25
26 use C4::Biblio qw/AddBiblio GetMarcBiblio/;
27 use Koha::Database;
28 use Koha::RecordProcessor;
29
30 my $schema  = Koha::Database->schema();
31 my $builder = t::lib::TestBuilder->new();
32
33 subtest 'EmbedItemsAvailability tests' => sub {
34
35     plan tests => 6;
36
37     $schema->storage->txn_begin();
38
39     # MARC21 tests
40     t::lib::Mocks::mock_preference( 'marcflavour', 'MARC21' );
41     # Create a dummy record
42     my ( $biblionumber, $biblioitemnumber ) = AddBiblio(MARC::Record->new(), '');
43
44     # Add some items with different onloan values
45     $builder->build(
46         {   source => 'Item',
47             value  => {
48                 biblionumber     => $biblionumber,
49                 biblioitemnumber => $biblioitemnumber,
50                 onloan           => '2017-01-01'
51             }
52         }
53     );
54     $builder->build(
55         {   source => 'Item',
56             value  => {
57                 biblionumber     => $biblionumber,
58                 biblioitemnumber => $biblioitemnumber,
59                 onloan           => undef
60             }
61         }
62     );
63     $builder->build(
64         {   source => 'Item',
65             value  => {
66                 biblionumber     => $biblionumber,
67                 biblioitemnumber => $biblioitemnumber,
68                 onloan           => '2017-01-02'
69             }
70         }
71     );
72
73     my $processor = Koha::RecordProcessor->new( { filters => ('EmbedItemsAvailability') } );
74     is( ref($processor), 'Koha::RecordProcessor', 'Created record processor' );
75
76     my $record = GetMarcBiblio($biblionumber);
77     ok( !defined $record->field('999')->subfield('x'), q{The record doesn't originally contain 999$x} );
78     # Apply filter
79     $processor->process($record);
80     is($record->field('999')->subfield('x'), 1, 'There is only one item with undef onloan');
81
82     $schema->storage->txn_rollback();
83
84     # UNIMARC tests (999 is not created)
85     t::lib::Mocks::mock_preference( 'marcflavour', 'UNIMARC' );
86
87     $schema->storage->txn_begin();
88
89     # Create a dummy record
90     ( $biblionumber, $biblioitemnumber ) = AddBiblio(MARC::Record->new(), '');
91
92     # Add some items with different onloan values
93     $builder->build(
94         {   source => 'Item',
95             value  => {
96                 biblionumber     => $biblionumber,
97                 biblioitemnumber => $biblioitemnumber,
98                 onloan           => '2017-01-01'
99             }
100         }
101     );
102     $builder->build(
103         {   source => 'Item',
104             value  => {
105                 biblionumber     => $biblionumber,
106                 biblioitemnumber => $biblioitemnumber,
107                 onloan           => undef
108             }
109         }
110     );
111     $builder->build(
112         {   source => 'Item',
113             value  => {
114                 biblionumber     => $biblionumber,
115                 biblioitemnumber => $biblioitemnumber,
116                 onloan           => '2017-01-02'
117             }
118         }
119     );
120
121     $processor = Koha::RecordProcessor->new( { filters => ('EmbedItemsAvailability') } );
122     is( ref($processor), 'Koha::RecordProcessor', 'Created record processor' );
123
124     $record = GetMarcBiblio($biblionumber);
125     ok( !defined $record->field('999')->subfield('x'), q{The record doesn't originally contain 999$x} );
126     # Apply filter
127     $processor->process($record);
128     is($record->field('999')->subfield('x'), 1, 'There is only one item with undef onloan');
129
130     $schema->storage->txn_rollback();
131 };
132
133 1;