BEGIN;
SELECT plan(4);
CREATE OR REPLACE FUNCTION test_marc_merges() RETURNS SETOF TEXT AS $func$
DECLARE
incoming_marc TEXT;
existing_marc TEXT;
merge_profile_1 BIGINT;
merge_profile_2 BIGINT;
merge_profile_3 BIGINT;
merge_profile_4 BIGINT;
BEGIN
incoming_marc := $$
00531nam a2200157 a 4500
20080729170300.0
t19981999enka 0 eng
merge-example-incoming
contents-notes-incoming
https://example.org/page-incoming
$$;
existing_marc := $$
00531nam a2200157 a 4500
20080729170300.0
t19981999enka 0 eng
merge-example-existing
contents-notes-existing
https://example.org/page-existing
$$;
INSERT INTO vandelay.merge_profile (owner, name, add_spec, replace_spec, strip_spec, preserve_spec)
VALUES (1, 'Test MP 1', '505', NULL, NULL, NULL);
SELECT CURRVAL('vandelay.merge_profile_id_seq') INTO merge_profile_1;
INSERT INTO vandelay.merge_profile (owner, name, add_spec, replace_spec, strip_spec, preserve_spec)
VALUES (1, 'Test MP 2', NULL, '505', NULL, NULL);
SELECT CURRVAL('vandelay.merge_profile_id_seq') INTO merge_profile_2;
INSERT INTO vandelay.merge_profile (owner, name, add_spec, replace_spec, strip_spec, preserve_spec)
VALUES (1, 'Test MP 3', NULL, NULL, NULL, '505');
SELECT CURRVAL('vandelay.merge_profile_id_seq') INTO merge_profile_3;
INSERT INTO vandelay.merge_profile (owner, name, add_spec, replace_spec, strip_spec, preserve_spec)
VALUES (1, 'Test MP 4', '856', '505', NULL, NULL);
SELECT CURRVAL('vandelay.merge_profile_id_seq') INTO merge_profile_4;
-- using evergreen.xml_pretty_print(textval::XML)::TEXT to normalize the
-- values we're comparing
RETURN NEXT is(evergreen.xml_pretty_print(vandelay.merge_record_xml_using_profile(incoming_marc, existing_marc, merge_profile_1)::XML)::TEXT, evergreen.xml_pretty_print($$
00531nam a2200157 a 4500
20080729170300.0
t19981999enka 0 eng
merge-example-existing
contents-notes-incoming
contents-notes-existing
https://example.org/page-existing
$$::XML)::TEXT, 'merge with add 505 rule');
RETURN NEXT is(evergreen.xml_pretty_print(vandelay.merge_record_xml_using_profile(incoming_marc, existing_marc, merge_profile_2)::XML)::TEXT, evergreen.xml_pretty_print($$
00531nam a2200157 a 4500
20080729170300.0
t19981999enka 0 eng
merge-example-existing
contents-notes-incoming
https://example.org/page-existing
$$::XML)::TEXT, 'merge with replace 505 rule');
RETURN NEXT is(evergreen.xml_pretty_print(vandelay.merge_record_xml_using_profile(incoming_marc, existing_marc, merge_profile_3)::XML)::TEXT, evergreen.xml_pretty_print($$
00531nam a2200157 a 4500
20080729170300.0
t19981999enka 0 eng
merge-example-incoming
contents-notes-existing
https://example.org/page-incoming
$$::XML)::TEXT, 'merge with preserve 505 rule');
RETURN NEXT is(evergreen.xml_pretty_print(vandelay.merge_record_xml_using_profile(incoming_marc, existing_marc, merge_profile_4)::XML)::TEXT, evergreen.xml_pretty_print($$
00531nam a2200157 a 4500
20080729170300.0
t19981999enka 0 eng
merge-example-existing
contents-notes-incoming
https://example.org/page-incoming
https://example.org/page-existing
$$::XML)::TEXT, 'merge with add 856 and replace 505 rule');
END;
$func$ LANGUAGE plpgsql;
SELECT * FROM test_marc_merges();
ROLLBACK;