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;