View | Details | Raw Unified | Return to bug 17909
Collapse All | Expand All

(-)a/t/db_dependent/Authorities/Merge.t (-78 / +108 lines)
Lines 35-119 my $zoom_obj = Test::MockObject->new; Link Here
35
my $zoom_record_obj = Test::MockObject->new;
35
my $zoom_record_obj = Test::MockObject->new;
36
set_mocks();
36
set_mocks();
37
37
38
# Framework operations
39
my ( $authtype1, $authtype2 ) = modify_framework();
40
38
subtest 'Test merge A1 to A2 (withing same authtype)' => sub {
41
subtest 'Test merge A1 to A2 (withing same authtype)' => sub {
39
# Tests originate from bug 11700
42
# Tests originate from bug 11700
40
    plan tests => 5;
43
    plan tests => 9;
41
44
42
    # Create authority type TEST_PERSO
45
    # Add two authority records
43
    $dbh->do("INSERT INTO auth_types(authtypecode, authtypetext, auth_tag_to_report, summary) VALUES('TEST_PERSO', 'Personal Name', '109', 'Personal Names');");
46
    my $auth1 = MARC::Record->new;
44
    $dbh->do("INSERT INTO auth_tag_structure (authtypecode, tagfield, liblibrarian, libopac, repeatable, mandatory, authorised_value) VALUES('TEST_PERSO', '109', 'HEADING--PERSONAL NAME', 'HEADING--PERSONAL NAME', 0, 0, NULL)");
47
    $auth1->append_fields( MARC::Field->new( '109', '0', '0', 'a' => 'George Orwell' ));
45
    $dbh->do("INSERT INTO auth_subfield_structure (authtypecode, tagfield, tagsubfield, liblibrarian, libopac, repeatable, mandatory, tab, authorised_value, value_builder, seealso, isurl, hidden, linkid, kohafield, frameworkcode) VALUES ('TEST_PERSO', '109', 'a', 'Personal name', 'Personal name', 0, 0, 1, NULL, NULL, '', 0, 0, '', '', '')");
48
    my $authid1 = AddAuthority( $auth1, undef, $authtype1 );
46
49
    my $auth2 = MARC::Record->new;
47
    my $auth1 = new MARC::Record;
50
    $auth2->append_fields( MARC::Field->new( '109', '0', '0', 'a' => 'G. Orwell' ));
48
    $auth1->append_fields(new MARC::Field('109', '0', '0', 'a' => 'George Orwell'));
51
    my $authid2 = AddAuthority( $auth2, undef, $authtype1 );
49
    my $authid1 = AddAuthority($auth1, undef, 'TEST_PERSO');
52
50
    my $auth2 = new MARC::Record;
53
    # Add two biblio records
51
    $auth2->append_fields(new MARC::Field('109', '0', '0', 'a' => 'G. Orwell'));
54
    my $biblio1 = MARC::Record->new;
52
    my $authid2 = AddAuthority($auth2, undef, 'TEST_PERSO');
55
    $biblio1->append_fields( MARC::Field->new( '609', '0', '0', '9' => $authid1, 'a' => 'George Orwell' ));
53
54
    $dbh->do("INSERT IGNORE INTO marc_subfield_structure(tagfield, tagsubfield, liblibrarian, libopac, repeatable, mandatory, kohafield, tab, authorised_value, authtypecode, value_builder, isurl, hidden, frameworkcode, seealso, link, defaultvalue) VALUES('609', 'a', 'Personal name', 'Personal name', 0, 0, '', 6, '', 'TEST_PERSO', '', NULL, 0, '', '', '', NULL)");
55
    $dbh->do("UPDATE marc_subfield_structure SET authtypecode = 'TEST_PERSO' WHERE tagfield='609' AND tagsubfield='a' AND frameworkcode='';");
56
    my $tagfields = $dbh->selectcol_arrayref("select distinct tagfield from marc_subfield_structure where authtypecode='TEST_PERSO'");
57
    my $biblio1 = new MARC::Record;
58
    $biblio1->append_fields(
59
        new MARC::Field('609', '0', '0', '9' => $authid1, 'a' => 'George Orwell')
60
    );
61
    my ( $biblionumber1 ) = AddBiblio($biblio1, '');
56
    my ( $biblionumber1 ) = AddBiblio($biblio1, '');
62
    my $biblio2 = new MARC::Record;
57
    my $biblio2 = MARC::Record->new;
63
    $biblio2->append_fields(
58
    $biblio2->append_fields( MARC::Field->new( '609', '0', '0', '9' => $authid2, 'a' => 'G. Orwell' ));
64
        new MARC::Field('609', '0', '0', '9' => $authid2, 'a' => 'G. Orwell')
65
    );
66
    my ( $biblionumber2 ) = AddBiblio($biblio2, '');
59
    my ( $biblionumber2 ) = AddBiblio($biblio2, '');
67
60
61
    # Time to merge
68
    @zebrarecords = ( $biblio1, $biblio2 );
62
    @zebrarecords = ( $biblio1, $biblio2 );
69
    $index = 0;
63
    $index = 0;
70
    my $rv = C4::AuthoritiesMarc::merge( $authid2, $auth2, $authid1, $auth1 );
64
    my $rv = C4::AuthoritiesMarc::merge( $authid2, $auth2, $authid1, $auth1 );
71
    is( $rv, 1, 'We expect one biblio record (out of two) to be updated' );
65
    is( $rv, 1, 'We expect one biblio record (out of two) to be updated' );
72
66
73
    $biblio1 = GetMarcBiblio($biblionumber1);
67
    # Check the results
74
    is($biblio1->subfield('609', '9'), $authid1, 'Check biblio1 609$9' );
68
    my $newbiblio1 = GetMarcBiblio($biblionumber1);
75
    is($biblio1->subfield('609', 'a'), 'George Orwell',
69
    compare_field_count( $biblio1, $newbiblio1, 1 );
70
    compare_field_order( $biblio1, $newbiblio1, 1 );
71
    is( $newbiblio1->subfield('609', '9'), $authid1, 'Check biblio1 609$9' );
72
    is( $newbiblio1->subfield('609', 'a'), 'George Orwell',
76
        'Check biblio1 609$a' );
73
        'Check biblio1 609$a' );
77
    $biblio2 = GetMarcBiblio($biblionumber2);
74
    my $newbiblio2 = GetMarcBiblio($biblionumber2);
78
    is($biblio2->subfield('609', '9'), $authid1, 'Check biblio2 609$9' );
75
    compare_field_count( $biblio2, $newbiblio2, 1 );
79
    is($biblio2->subfield('609', 'a'), 'George Orwell',
76
    compare_field_order( $biblio2, $newbiblio2, 1 );
77
    is( $newbiblio2->subfield('609', '9'), $authid1, 'Check biblio2 609$9' );
78
    is( $newbiblio2->subfield('609', 'a'), 'George Orwell',
80
        'Check biblio2 609$a' );
79
        'Check biblio2 609$a' );
81
};
80
};
82
81
83
subtest 'Test merge A1 to modified A1' => sub {
82
subtest 'Test merge A1 to modified A1' => sub {
84
# Tests originate from bug 11700
83
# Tests originate from bug 11700
85
    plan tests => 4;
84
    plan tests => 8;
86
87
    $dbh->do("INSERT IGNORE INTO marc_subfield_structure(tagfield, tagsubfield, liblibrarian, libopac, repeatable, mandatory, kohafield, tab, authorised_value, authtypecode, value_builder, isurl, hidden, frameworkcode, seealso, link, defaultvalue) VALUES('109', 'a', 'Personal name', 'Personal name', 0, 0, '', 6, '', 'TEST_PERSO', '', NULL, 0, '', '', '', NULL)");
88
    $dbh->do("UPDATE marc_subfield_structure SET authtypecode = 'TEST_PERSO' WHERE tagfield='109' AND tagsubfield='a' AND frameworkcode='';");
89
85
86
    # Simulate modifying an authority from auth1old to auth1new
90
    my $auth1old = MARC::Record->new;
87
    my $auth1old = MARC::Record->new;
91
    $auth1old->append_fields( MARC::Field->new( '109', '0', '0', 'a' => 'Bruce Wayne' ));
88
    $auth1old->append_fields( MARC::Field->new( '109', '0', '0', 'a' => 'Bruce Wayne' ));
92
    my $auth1new = $auth1old->clone;
89
    my $auth1new = $auth1old->clone;
93
    $auth1new->field('109')->update( a => 'Batman' );
90
    $auth1new->field('109')->update( a => 'Batman' );
94
    my $authid1 = AddAuthority( $auth1new, undef, 'TEST_PERSO' );
91
    my $authid1 = AddAuthority( $auth1new, undef, $authtype1 );
95
92
96
    my $MARC1 = MARC::Record->new();
93
    # Add two biblio records
97
    $MARC1->append_fields( MARC::Field->new( '245', '', '', 'a' => 'From the depths' ));
94
    my $MARC1 = MARC::Record->new;
98
    $MARC1->append_fields( MARC::Field->new( '109', '', '', 'a' => 'Bruce Wayne', 'b' => '2014', '9' => $authid1 ));
95
    $MARC1->append_fields( MARC::Field->new( '109', '', '', 'a' => 'Bruce Wayne', 'b' => '2014', '9' => $authid1 ));
99
    my $MARC2 = MARC::Record->new();
96
    $MARC1->append_fields( MARC::Field->new( '245', '', '', 'a' => 'From the depths' ));
100
    $MARC2->append_fields( MARC::Field->new( '245', '', '', 'a' => 'All the way to heaven' ));
97
    my $MARC2 = MARC::Record->new;
101
    $MARC2->append_fields( MARC::Field->new( '109', '', '', 'a' => 'Batman', '9' => $authid1 ));
98
    $MARC2->append_fields( MARC::Field->new( '109', '', '', 'a' => 'Batman', '9' => $authid1 ));
99
    $MARC2->append_fields( MARC::Field->new( '245', '', '', 'a' => 'All the way to heaven' ));
102
    my ( $biblionumber1 ) = AddBiblio( $MARC1, '');
100
    my ( $biblionumber1 ) = AddBiblio( $MARC1, '');
103
    my ( $biblionumber2 ) = AddBiblio( $MARC2, '');
101
    my ( $biblionumber2 ) = AddBiblio( $MARC2, '');
104
102
103
    # Time to merge
105
    @zebrarecords = ( $MARC1, $MARC2 );
104
    @zebrarecords = ( $MARC1, $MARC2 );
106
    $index = 0;
105
    $index = 0;
107
108
    my $rv = C4::AuthoritiesMarc::merge( $authid1, $auth1old, $authid1, $auth1new );
106
    my $rv = C4::AuthoritiesMarc::merge( $authid1, $auth1old, $authid1, $auth1new );
109
    is( $rv, 2, 'Both records are updated now' );
107
    is( $rv, 2, 'Both records are updated now' );
110
108
109
    #Check the results
111
    my $biblio1 = GetMarcBiblio($biblionumber1);
110
    my $biblio1 = GetMarcBiblio($biblionumber1);
111
    compare_field_count( $MARC1, $biblio1, 1 );
112
    compare_field_order( $MARC1, $biblio1, 1 );
113
    is( $auth1new->field(109)->subfield('a'), $biblio1->field(109)->subfield('a'), 'Record1 values updated correctly' );
112
    my $biblio2 = GetMarcBiblio($biblionumber1);
114
    my $biblio2 = GetMarcBiblio($biblionumber1);
113
115
    compare_field_count( $MARC2, $biblio2, 1 );
114
    my $auth_field = $auth1new->field(109)->subfield('a');
116
    compare_field_order( $MARC2, $biblio2, 1 );
115
    is( $auth_field, $biblio1->field(109)->subfield('a'), 'Record1 values updated correctly' );
117
    is( $auth1new->field(109)->subfield('a'), $biblio2->field(109)->subfield('a'), 'Record2 values updated correctly' );
116
    is( $auth_field, $biblio2->field(109)->subfield('a'), 'Record2 values updated correctly' );
117
118
118
    # TODO Following test will change when we improve merge
119
    # TODO Following test will change when we improve merge
119
    # Will depend on a preference
120
    # Will depend on a preference
Lines 126-167 subtest 'Test merge A1 to B1 (changing authtype)' => sub { Link Here
126
# The merge routine still needs the fixes on bug 17913
127
# The merge routine still needs the fixes on bug 17913
127
    plan tests => 8;
128
    plan tests => 8;
128
129
129
    # create another authtype
130
    # create two auth recs of different type
130
    my $authtype2 = $builder->build({
131
        source => 'AuthType',
132
        value  => {
133
            auth_tag_to_report => '112',
134
        },
135
    });
136
    # create two fields linked to this auth type
137
    $schema->resultset('MarcSubfieldStructure')->search({ tagfield => [ '112', '712' ] })->delete;
138
    $builder->build({
139
        source => 'MarcSubfieldStructure',
140
        value  => {
141
            tagfield => '112',
142
            tagsubfield => 'a',
143
            authtypecode => $authtype2->{authtypecode},
144
            frameworkcode => '',
145
        },
146
    });
147
    $builder->build({
148
        source => 'MarcSubfieldStructure',
149
        value  => {
150
            tagfield => '712',
151
            tagsubfield => 'a',
152
            authtypecode => $authtype2->{authtypecode},
153
            frameworkcode => '',
154
        },
155
    });
156
157
    # create auth1 (from the earlier type)
158
    my $auth1 = MARC::Record->new;
131
    my $auth1 = MARC::Record->new;
159
    $auth1->append_fields( MARC::Field->new( '109', '0', '0', 'a' => 'George Orwell', b => 'bb' ));
132
    $auth1->append_fields( MARC::Field->new( '109', '0', '0', 'a' => 'George Orwell', b => 'bb' ));
160
    my $authid1 = AddAuthority($auth1, undef, 'TEST_PERSO');
133
    my $authid1 = AddAuthority( $auth1, undef, $authtype1 );
161
    # create auth2 (new type)
162
    my $auth2 = MARC::Record->new;
134
    my $auth2 = MARC::Record->new;
163
    $auth2->append_fields( MARC::Field->new( '112', '0', '0', 'a' => 'Batman', c => 'cc' ));
135
    $auth2->append_fields( MARC::Field->new( '112', '0', '0', 'a' => 'Batman', c => 'cc' ));
164
    my $authid2 = AddAuthority($auth1, undef, $authtype2->{authtypecode} );
136
    my $authid2 = AddAuthority($auth1, undef, $authtype2 );
165
137
166
    # create a biblio with one 109 and two 609s to be touched
138
    # create a biblio with one 109 and two 609s to be touched
167
    # seems exceptional see bug 13760 comment10
139
    # seems exceptional see bug 13760 comment10
Lines 178-183 subtest 'Test merge A1 to B1 (changing authtype)' => sub { Link Here
178
    my ( $biblionumber ) = C4::Biblio::AddBiblio( $marc, '' );
150
    my ( $biblionumber ) = C4::Biblio::AddBiblio( $marc, '' );
179
    my $oldbiblio = C4::Biblio::GetMarcBiblio( $biblionumber );
151
    my $oldbiblio = C4::Biblio::GetMarcBiblio( $biblionumber );
180
152
153
    # Time to merge
181
    @zebrarecords = ( $marc );
154
    @zebrarecords = ( $marc );
182
    $index = 0;
155
    $index = 0;
183
    my $retval = C4::AuthoritiesMarc::merge( $authid1, $auth1, $authid2, $auth2 );
156
    my $retval = C4::AuthoritiesMarc::merge( $authid1, $auth1, $authid2, $auth2 );
Lines 225-230 sub set_mocks { Link Here
225
    $zoom_record_obj->mock( 'raw', sub {} );
198
    $zoom_record_obj->mock( 'raw', sub {} );
226
}
199
}
227
200
201
sub modify_framework {
202
    # create two auth types
203
    my $authtype1 = $builder->build({
204
        source => 'AuthType',
205
        value  => {
206
            auth_tag_to_report => '109',
207
        },
208
    });
209
    my $authtype2 = $builder->build({
210
        source => 'AuthType',
211
        value  => {
212
            auth_tag_to_report => '112',
213
        },
214
    });
215
216
    # Link 109/609 to the first authtype
217
    $builder->build({
218
        source => 'MarcSubfieldStructure',
219
        value  => {
220
            tagfield => '109',
221
            tagsubfield => 'a',
222
            authtypecode => $authtype1->{authtypecode},
223
            frameworkcode => '',
224
        },
225
    });
226
    $builder->build({
227
        source => 'MarcSubfieldStructure',
228
        value  => {
229
            tagfield => '609',
230
            tagsubfield => 'a',
231
            authtypecode => $authtype1->{authtypecode},
232
            frameworkcode => '',
233
        },
234
    });
235
236
    # Link 112/712 to the second authtype
237
    $builder->build({
238
        source => 'MarcSubfieldStructure',
239
        value  => {
240
            tagfield => '112',
241
            tagsubfield => 'a',
242
            authtypecode => $authtype2->{authtypecode},
243
            frameworkcode => '',
244
        },
245
    });
246
    $builder->build({
247
        source => 'MarcSubfieldStructure',
248
        value  => {
249
            tagfield => '712',
250
            tagsubfield => 'a',
251
            authtypecode => $authtype2->{authtypecode},
252
            frameworkcode => '',
253
        },
254
    });
255
256
    return ( $authtype1->{authtypecode}, $authtype2->{authtypecode} );
257
}
258
228
sub compare_field_count {
259
sub compare_field_count {
229
    my ( $oldmarc, $newmarc, $pass ) = @_;
260
    my ( $oldmarc, $newmarc, $pass ) = @_;
230
    my $t;
261
    my $t;
231
- 

Return to bug 17909