4 use Test
::More tests
=> 15;
7 use File
::Temp qw
/tempfile/;
10 use t
::lib
::TestBuilder
;
16 # Mock pluginsdir before loading Plugins module
17 my $path = dirname
(__FILE__
) . '/../lib';
18 t
::lib
::Mocks
::mock_config
( 'pluginsdir', $path );
19 use_ok
('C4::ImportBatch');
23 my $schema = Koha
::Database
->new->schema;
24 $schema->storage->txn_begin;
25 my $builder = t
::lib
::TestBuilder
->new;
26 my $dbh = C4
::Context
->dbh;
29 $dbh->do('DELETE FROM import_batches');
31 my $sample_import_batch1 = {
35 overlay_action
=> 'create_new',
36 nomatch_action
=> 'create_new',
37 item_action
=> 'always_add',
38 import_status
=> 'staged',
39 batch_type
=> 'z3950',
40 file_name
=> 'test.mrc',
42 record_type
=> 'auth',
45 my $sample_import_batch2 = {
49 overlay_action
=> 'create_new',
50 nomatch_action
=> 'create_new',
51 item_action
=> 'always_add',
52 import_status
=> 'staged',
53 batch_type
=> 'z3950',
54 file_name
=> 'test.mrc',
56 record_type
=> 'auth',
59 my $id_import_batch1 = C4
::ImportBatch
::AddImportBatch
($sample_import_batch1);
60 my $id_import_batch2 = C4
::ImportBatch
::AddImportBatch
($sample_import_batch2);
62 like
( $id_import_batch1, '/^\d+$/', "AddImportBatch for sample_import_batch1 return an id" );
63 like
( $id_import_batch2, '/^\d+$/', "AddImportBatch for sample_import_batch2 return an id" );
66 my $importbatch2 = C4
::ImportBatch
::GetImportBatch
( $id_import_batch2 );
67 delete $importbatch2->{upload_timestamp
};
68 delete $importbatch2->{import_batch_id
};
69 delete $importbatch2->{num_records
};
70 delete $importbatch2->{num_items
};
72 is_deeply
( $importbatch2, $sample_import_batch2,
73 "GetImportBatch returns the right informations about $sample_import_batch2" );
75 my $importbatch1 = C4
::ImportBatch
::GetImportBatch
( $id_import_batch1 );
76 delete $importbatch1->{upload_timestamp
};
77 delete $importbatch1->{import_batch_id
};
78 delete $importbatch1->{num_records
};
79 delete $importbatch1->{num_items
};
81 is_deeply
( $importbatch1, $sample_import_batch1,
82 "GetImportBatch returns the right informations about $sample_import_batch1" );
84 my $record = MARC
::Record
->new;
85 # FIXME Create another MARC::Record which won't be modified
86 # AddItemsToImportBiblio will remove the items field from the record passed in parameter.
87 my $original_record = MARC
::Record
->new;
88 $record->leader('03174nam a2200445 a 4500');
89 $original_record->leader('03174nam a2200445 a 4500');
90 my ($item_tag, $item_subfield) = C4
::Biblio
::GetMarcFromKohaField
( 'items.itemnumber' );
94 a
=> 'Knuth, Donald Ervin',
99 a
=> 'The art of computer programming',
100 c
=> 'Donald E. Knuth.',
104 a
=> 'Computer programming.',
115 i
=> 'my item part 2',
118 $record->append_fields(@fields);
119 $original_record->append_fields(@fields);
120 my $import_record_id = AddBiblioToBatch
( $id_import_batch1, 0, $record, 'utf8', int(rand(99999)), 0 );
121 AddItemsToImportBiblio
( $id_import_batch1, $import_record_id, $record, 0 );
123 my $record_from_import_biblio_with_items = C4
::ImportBatch
::GetRecordFromImportBiblio
( $import_record_id, 'embed_items' );
124 $original_record->leader($record_from_import_biblio_with_items->leader());
125 is_deeply
( $record_from_import_biblio_with_items, $original_record, 'GetRecordFromImportBiblio should return the record with items if specified' );
126 my $utf8_field = $record_from_import_biblio_with_items->subfield($item_tag, 'e');
127 is
($utf8_field, 'my edition ❤');
128 $original_record->delete_fields($original_record->field($item_tag)); #Remove items fields
129 my $record_from_import_biblio_without_items = C4
::ImportBatch
::GetRecordFromImportBiblio
( $import_record_id );
130 $original_record->leader($record_from_import_biblio_without_items->leader());
131 is_deeply
( $record_from_import_biblio_without_items, $original_record, 'GetRecordFromImportBiblio should return the record without items by default' );
133 # Add a few tests for GetItemNumbersFromImportBatch
134 my @a = GetItemNumbersFromImportBatch
( $id_import_batch1 );
135 is
( @a, 0, 'No item numbers expected since we did not commit' );
136 my $itemno = $builder->build({ source
=> 'Item' })->{itemnumber
};
137 # Link this item to the import item to fool GetItemNumbersFromImportBatch
138 my $sql = "UPDATE import_items SET itemnumber=? WHERE import_record_id=?";
139 $dbh->do( $sql, undef, $itemno, $import_record_id );
140 @a = GetItemNumbersFromImportBatch
( $id_import_batch1 );
141 is
( @a, 2, 'Expecting two items now' );
142 is
( $a[0], $itemno, 'Check the first returned itemnumber' );
143 # Now delete the item and check again
144 $dbh->do( "DELETE FROM items WHERE itemnumber=?", undef, $itemno );
145 @a = GetItemNumbersFromImportBatch
( $id_import_batch1 );
146 is
( @a, 0, 'No item numbers expected since we deleted the item' );
147 $dbh->do( $sql, undef, undef, $import_record_id ); # remove link again
150 my $sample_import_batch3 = {
154 overlay_action
=> 'create_new',
155 nomatch_action
=> 'create_new',
156 item_action
=> 'always_add',
157 import_status
=> 'staged',
158 batch_type
=> 'z3950',
159 file_name
=> 'test.mrc',
161 record_type
=> 'auth',
164 my $id_import_batch3 = C4
::ImportBatch
::AddImportBatch
($sample_import_batch3);
167 C4
::ImportBatch
::CleanBatch
( $id_import_batch3 );
168 my $batch3_clean = $dbh->do('SELECT * FROM import_records WHERE import_batch_id = "$id_import_batch3"');
169 is
( $batch3_clean, "0E0", "Batch 3 has been cleaned" );
172 C4
::ImportBatch
::DeleteBatch
( $id_import_batch3 );
173 my $batch3_results = $dbh->do('SELECT * FROM import_batches WHERE import_batch_id = "$id_import_batch3"');
174 is
( $batch3_results, "0E0", "Batch 3 has been deleted");
176 subtest
"RecordsFromMarcPlugin" => sub {
180 my ( $fh, $name ) = tempfile
();
185 245,a
= Silence
in the library
189 245,a
= Noise
in the library
|;
192 t
::lib
::Mocks
::mock_config
( 'enable_plugins', 1 );
194 my $plugins = Koha
::Plugins
->new;
195 $plugins->InstallPlugins;
196 my ($plugin) = $plugins->GetPlugins({ all
=> 1, metadata
=> { name
=> 'MarcFieldValues' } });
197 isnt
( $plugin, undef, "Plugin found" );
198 my $records = C4
::ImportBatch
::RecordsFromMarcPlugin
( $name, ref $plugin, 'UTF-8' );
199 is
( @
$records, 2, 'Two results returned' );
200 is
( ref $records->[0], 'MARC::Record', 'Returned MARC::Record object' );
201 is
( $records->[0]->subfield('245', 'a'), 'Silence in the library',
202 'Checked one field in first record' );
203 is
( $records->[1]->subfield('100', 'a'), 'Another',
204 'Checked one field in second record' );
207 $schema->storage->txn_rollback;