Bug 11529: Use new biblio fields whenever possible
[koha.git] / t / Biblio2.t
1 #!/usr/bin/perl
2
3 use Modern::Perl;
4 use Test::More;
5 use Test::MockModule;
6
7 use MARC::Record;
8
9 use C4::Biblio;
10
11 subtest "_koha_marc_update_bib_ids basic Field", \&_koha_marc_update_bib_ids_simple;
12 sub _koha_marc_update_bib_ids_simple {
13     my $module = Test::MockModule->new('C4::Biblio');
14     $module->mock('GetMarcFromKohaField', sub {
15             my ($source) = @_;
16             return ('999','c') if $source eq 'biblio.biblionumber';
17             return ('999','d') if $source eq 'biblioitems.biblioitemnumber';
18         }
19     );
20
21     my $r = MARC::Record->new();
22     C4::Biblio::_koha_marc_update_bib_ids($r, undef, 10, 20);
23     is($r->subfield('999', 'c'), 10, 'Biblionumber');
24     is($r->subfield('999', 'd'), 20, 'Biblioitemnumber');
25
26     C4::Biblio::_koha_marc_update_bib_ids($r, undef, 10, 20);
27     my @f = $r->field('999');
28     is(scalar(@f), 1, 'Field not duplicated');
29     is($r->subfield('999', 'c'), 10, 'Biblionumber');
30     is($r->subfield('999', 'd'), 20, 'Biblioitemnumber');
31 }
32
33 subtest "_koha_marc_update_bib_ids ControlField", \&_koha_marc_update_bib_ids_control;
34 sub _koha_marc_update_bib_ids_control {
35     my $module = Test::MockModule->new('C4::Biblio');
36     $module->mock('GetMarcFromKohaField', sub {
37             my ($source) = @_;
38             return ('001',undef) if $source eq 'biblio.biblionumber';
39             return ('004',undef) if $source eq 'biblioitems.biblioitemnumber';
40         }
41     );
42
43     my $r = MARC::Record->new();
44     C4::Biblio::_koha_marc_update_bib_ids($r, undef, 10, 20);
45     is($r->field('001')->data(), 10, 'Biblionumber to control field');
46     is($r->field('004')->data(), 20, 'Biblioitemnumber to control field');
47
48     C4::Biblio::_koha_marc_update_bib_ids($r, undef, 10, 20);
49     my @f = $r->field('001');
50     is(scalar(@f), 1, 'Control field not duplicated');
51     is($r->field('001')->data(), 10, 'Biblionumber to control field');
52     is($r->field('004')->data(), 20, 'Biblioitemnumber to control field');
53 }
54
55 subtest 'SplitSubtitle' => sub {
56     plan tests => 4;
57
58     my $res = C4::Biblio::SplitSubtitle(undef);
59     is_deeply($res, [], 'undef returned as an array');
60
61     $res = C4::Biblio::SplitSubtitle('');
62     is_deeply($res, [], 'Empty string returned as an array');
63
64     $res = C4::Biblio::SplitSubtitle('Single');
65     is_deeply($res, [{'subfield' => 'Single'}], 'Single subtitle returns an array');
66
67     $res = C4::Biblio::SplitSubtitle('First | Second');
68     is_deeply($res, [{'subfield' => 'First'}, {'subfield' => 'Second'}], 'Two subtitles returns an array');
69 };
70
71 done_testing();