From e468072694cd21f777f3b2d517360b955c00525a Mon Sep 17 00:00:00 2001 From: prculley Date: Mon, 10 Aug 2020 10:20:21 -0500 Subject: [PATCH] Tests update for Note rework --- .../filters/rules/test/media_rules_test.py | 3 +- gramps/gen/lib/test/merge_test.py | 52 ++++++ gramps/gen/merge/test/merge_ref_test.py | 173 +++++++++++++++++- 3 files changed, 225 insertions(+), 3 deletions(-) diff --git a/gramps/gen/filters/rules/test/media_rules_test.py b/gramps/gen/filters/rules/test/media_rules_test.py index 395496109..5d2ddd338 100644 --- a/gramps/gen/filters/rules/test/media_rules_test.py +++ b/gramps/gen/filters/rules/test/media_rules_test.py @@ -114,7 +114,8 @@ class BaseTest(unittest.TestCase): """ rule = HasReferenceCountOf(['greater than', '1']) self.assertEqual(self.filter_with_rule(rule), set([ - '238CGQ939HG18SS5MG', 'b39fe1cfc1305ac4a21'])) + '238CGQ939HG18SS5MG', 'b39fe1cfc1305ac4a21', + 'Y3ARGQWE088EQRTTDH'])) def test_hassourcecount(self): """ diff --git a/gramps/gen/lib/test/merge_test.py b/gramps/gen/lib/test/merge_test.py index 69997e36d..ff6faf89d 100644 --- a/gramps/gen/lib/test/merge_test.py +++ b/gramps/gen/lib/test/merge_test.py @@ -967,6 +967,49 @@ class NoteCheck(unittest.TestCase, PrivacyBaseTest): self.titanic = Note("hello world") self.ref_obj = Note("hello world") + def test_note_replace_handle_reference(self): + ptag = StyledTextTag(name=StyledTextTagType.LINK, + value="gramps://Event/handle/e0000", + ranges=[0, 3]) + self.phoenix.text.set_tags([ptag]) + rtag = StyledTextTag(name=StyledTextTagType.LINK, + value="gramps://Event/handle/e0001", + ranges=[0, 3]) + self.ref_obj.text.set_tags([rtag]) + self.phoenix.replace_handle_reference('Event', 'e0000', 'e0001') + self.assertEqual(self.phoenix.serialize(), self.ref_obj.serialize()) + + def test_note_has_handle_reference(self): + ptag = StyledTextTag(name=StyledTextTagType.LINK, + value="gramps://Event/handle/e0000", + ranges=[0, 3]) + self.phoenix.text.set_tags([ptag]) + self.assertTrue(self.phoenix.has_handle_reference('Event', 'e0000')) + self.assertFalse(self.phoenix.has_handle_reference('Event', 'e0001')) + + def test_note_get_referenced_handles(self): + tag0 = StyledTextTag(name=StyledTextTagType.LINK, + value="gramps://Event/handle/e0000", + ranges=[0, 2]) + tag1 = StyledTextTag(name=StyledTextTagType.LINK, + value="gramps://Person/handle/i0001", + ranges=[2, 3]) + self.phoenix.text.set_tags([tag0, tag1]) + self.phoenix.add_tag("t1234") + tag_list = self.phoenix.get_referenced_handles() + self.assertEqual(tag_list, [('Event', 'e0000'), ('Person', 'i0001'), + ('Tag', 't1234')]) + self.assertFalse(self.phoenix.has_handle_reference('Event', 'e0001')) + + def test_note_remove_handle_references(self): + ptag = StyledTextTag(name=StyledTextTagType.LINK, + value="gramps://Event/handle/e0000", + ranges=[0, 3]) + self.phoenix.text.set_tags([ptag]) + self.phoenix.remove_handle_references('Event', ['e0000']) + self.assertEqual(self.phoenix.serialize(), self.ref_obj.serialize()) + + class NoteBaseCheck(unittest.TestCase): def setUp(self): self.phoenix = NoteBase() @@ -984,6 +1027,7 @@ class NoteBaseCheck(unittest.TestCase): def test_different(self): ref_note_list = NoteBase(self.phoenix) note = Note("note other") + note.set_handle('654321') self.titanic.add_note(note.get_handle()) ref_note_list.add_note(note.get_handle()) self.phoenix._merge_note_list(self.titanic) @@ -1018,6 +1062,14 @@ class NoteBaseCheck(unittest.TestCase): self.phoenix.replace_note_references('','') self.assertEqual(self.phoenix.serialize(), ref_note_list.serialize()) + def test_remove_note_references(self): + note = Note("note other") + note.set_handle('654321') + self.phoenix.add_note(note.get_handle()) + self.phoenix.remove_note_references(['123456', '654321']) + ref_note_list = NoteBase() + self.assertEqual(self.phoenix.serialize(), ref_note_list.serialize()) + class PersonCheck(unittest.TestCase, PrivacyBaseTest, MediaBaseTest, AttrBaseTest, NoteBaseTest, CitationBaseTest): def setUp(self): diff --git a/gramps/gen/merge/test/merge_ref_test.py b/gramps/gen/merge/test/merge_ref_test.py index 265c91a1a..590356c66 100644 --- a/gramps/gen/merge/test/merge_ref_test.py +++ b/gramps/gen/merge/test/merge_ref_test.py @@ -258,6 +258,7 @@ class PersonCheck(BaseMergeCheck): Source 1 + @@ -278,9 +279,40 @@ class PersonCheck(BaseMergeCheck): + + + New York Public Library + Library + + + Aunt Martha's Attic + Collection + + - Note 0 + Note 0. + + + + + + + Note 1 @@ -291,7 +323,8 @@ class PersonCheck(BaseMergeCheck): encoding='utf-8')) def test_event_merge(self): - """Merge two events""" + """Merge two events. Also checks that Event link in note is updated. + """ expect = ET.fromstring(self.basedoc, parser=self.parser) eventref = expect.xpath("//g:person[@handle='_i0001']/g:eventref", namespaces={"g": NS_G})[0] @@ -299,6 +332,8 @@ class PersonCheck(BaseMergeCheck): event = expect.xpath("//g:event[@handle='_e0001']", namespaces={"g": NS_G})[0] event.getparent().remove(event) + notetag = expect.xpath("//g:style", namespaces={"g": NS_G})[1] + notetag.attrib['value'] = "gramps://Event/handle/e0000" self.do_case('E0000', 'E0001', self.basedoc, expect) #print(str(ET.tostring(expect, pretty_print=True), 'utf-8')) @@ -313,6 +348,8 @@ class PersonCheck(BaseMergeCheck): placeobj.getparent().remove(placeobj) placeobj = expect.xpath("//g:placeobj[@handle='_p0000']", namespaces={"g": NS_G})[0] + notetag = expect.xpath("//g:style", namespaces={"g": NS_G})[4] + notetag.attrib['value'] = "gramps://Place/handle/p0000" ET.SubElement(placeobj, NSP + 'pname', value='Place 1') self.do_case('P0000', 'P0001', self.basedoc, expect) @@ -325,6 +362,8 @@ class PersonCheck(BaseMergeCheck): citation = expect.xpath("//g:citation[@handle='_c0001']", namespaces={"g": NS_G})[0] citation.getparent().remove(citation) + notetag = expect.xpath("//g:style", namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Citation/handle/c0000" self.do_case('C0000', 'C0001', self.basedoc, expect) def test_media_merge(self): @@ -336,6 +375,8 @@ class PersonCheck(BaseMergeCheck): object_ = expect.xpath("//g:object[@handle='_o0001']", namespaces={"g": NS_G})[0] object_.getparent().remove(object_) + notetag = expect.xpath("//g:style", namespaces={"g": NS_G})[2] + notetag.attrib['value'] = "gramps://Media/handle/o0000" self.do_case('O0000', 'O0001', self.basedoc, expect) def test_note_merge(self): @@ -346,9 +387,24 @@ class PersonCheck(BaseMergeCheck): noteref.attrib['hlink'] = '_n0000' note = expect.xpath("//g:note[@handle='_n0001']", namespaces={"g": NS_G})[0] + notetag = expect.xpath("//g:style", namespaces={"g": NS_G})[3] + notetag.attrib['value'] = "gramps://Note/handle/n0000" note.getparent().remove(note) self.do_case('N0000', 'N0001', self.basedoc, expect) + def test_repository_merge(self): + """Merge two repository objects""" + expect = ET.fromstring(self.basedoc, parser=self.parser) + reporef = expect.xpath("//g:source[@handle='_s0001']/g:reporef", + namespaces={"g": NS_G})[0] + reporef.attrib['hlink'] = '_r0000' + object_ = expect.xpath("//g:repository[@handle='_r0001']", + namespaces={"g": NS_G})[0] + object_.getparent().remove(object_) + notetag = expect.xpath("//g:style", namespaces={"g": NS_G})[5] + notetag.attrib['value'] = "gramps://Repository/handle/r0000" + self.do_case('R0000', 'R0001', self.basedoc, expect) + #------------------------------------------------------------------------- # @@ -1226,6 +1282,14 @@ class PersonPersonCheck(BaseMergeCheck): + + + Note 0. + + + """ self.basedoc = bytes(bytearray(self.base_str + base_str, encoding='utf-8')) @@ -1256,6 +1320,8 @@ class PersonPersonCheck(BaseMergeCheck): person = expect.xpath("//g:person[@handle='_i0001']", namespaces={"g": NS_G})[0] person.getparent().remove(person) + notetag = expect.xpath("//g:style", namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Person/handle/i0000" input_doc = ET.tostring(input_ctxt) self.do_case('I0000', 'I0001', input_doc, expect) @@ -1286,6 +1352,8 @@ class PersonPersonCheck(BaseMergeCheck): person = expect.xpath("//g:person[@handle='_i0001']", namespaces={"g": NS_G})[0] person.getparent().remove(person) + notetag = expect.xpath("//g:style", namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Person/handle/i0000" input_doc = ET.tostring(input_ctxt) self.do_case('I0000', 'I0001', input_doc, expect) @@ -1309,6 +1377,8 @@ class PersonPersonCheck(BaseMergeCheck): person = expect.xpath("//g:person[@handle='_i0001']", namespaces={"g": NS_G})[0] person.getparent().remove(person) + notetag = expect.xpath("//g:style", namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Person/handle/i0000" input_doc = ET.tostring(input_ctxt) self.do_case('I0000', 'I0001', input_doc, expect) @@ -1422,6 +1492,26 @@ class FamilyPersonCheck(BaseMergeCheck): + + + Note 0 + + + + Note 1 + + + + Note 0 + + + """ self.basedoc = bytes(bytearray(self.base_str + base_str, encoding='utf-8')) @@ -1439,6 +1529,9 @@ class FamilyPersonCheck(BaseMergeCheck): parentref = expect.xpath("//g:person[@handle='_i0000']/g:parentin", namespaces={"g": NS_G})[0] attr.addnext(parentref) # restore order of elements + notetag = expect.xpath("//g:note[@handle='_n0000']/g:style", + namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Person/handle/i0000" persons[2].getparent().remove(persons[2]) self.do_case('I0000', 'I0002', self.basedoc, expect) @@ -1467,6 +1560,9 @@ class FamilyPersonCheck(BaseMergeCheck): father = expect.xpath("//g:family[@handle='_f0001']/g:father", namespaces={"g": NS_G})[0] father.attrib['hlink'] = '_i0000' + notetag = expect.xpath("//g:note[@handle='_n0000']/g:style", + namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Person/handle/i0000" persons[2].getparent().remove(persons[2]) input_doc = ET.tostring(input_ctxt) self.do_case('I0000', 'I0002', input_doc, expect) @@ -1501,6 +1597,9 @@ class FamilyPersonCheck(BaseMergeCheck): ET.SubElement(family, NSP + 'rel', type='Married') ET.SubElement(family, NSP + 'father', hlink='_i0000') ET.SubElement(family, NSP + 'mother', hlink='_i0003') + notetag = expect.xpath("//g:note[@handle='_n0000']/g:style", + namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Person/handle/i0000" persons[2].getparent().remove(persons[2]) persons = input_ctxt.xpath("//g:person", @@ -1547,7 +1646,13 @@ class FamilyPersonCheck(BaseMergeCheck): parentref = expect.xpath("//g:person[@handle='_i0000']/g:parentin", namespaces={"g": NS_G})[0] attr.addnext(parentref) # restore order of elements + notetag = expect.xpath("//g:note[@handle='_n0000']/g:style", + namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Person/handle/i0000" persons[2].getparent().remove(persons[2]) + notetag = expect.xpath("//g:note[@handle='_n0001']/g:style", + namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Family/handle/f0000" family = expect.xpath("//g:family[@handle='_f0001']", namespaces={"g": NS_G})[0] family.getparent().remove(family) @@ -1583,6 +1688,12 @@ class FamilyPersonCheck(BaseMergeCheck): parentref = expect.xpath("//g:person[@handle='_i0000']/g:parentin", namespaces={"g": NS_G})[0] attr.addnext(parentref) # restore order of elements + notetag = expect.xpath("//g:note[@handle='_n0000']/g:style", + namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Person/handle/i0000" + notetag = expect.xpath("//g:note[@handle='_n0001']/g:style", + namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Family/handle/f0000" persons[2].getparent().remove(persons[2]) family = expect.xpath("//g:family[@handle='_f0001']", namespaces={"g": NS_G})[0] @@ -1615,6 +1726,12 @@ class FamilyPersonCheck(BaseMergeCheck): namespaces={"g": NS_G})[0] attr.addnext(parentref) # restore order of elements persons[3].getparent().remove(persons[3]) + notetag = expect.xpath("//g:note[@handle='_n0001']/g:style", + namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Family/handle/f0000" + notetag = expect.xpath("//g:note[@handle='_n0003']/g:style", + namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Person/handle/i0001" family = expect.xpath("//g:family[@handle='_f0001']", namespaces={"g": NS_G})[0] family.getparent().remove(family) @@ -1655,7 +1772,13 @@ class FamilyPersonCheck(BaseMergeCheck): parentref = expect.xpath("//g:person[@handle='_i0000']/g:parentin", namespaces={"g": NS_G})[0] attr.addnext(parentref) # restore order of elements + notetag = expect.xpath("//g:note[@handle='_n0000']/g:style", + namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Person/handle/i0000" persons[2].getparent().remove(persons[2]) + notetag = expect.xpath("//g:note[@handle='_n0001']/g:style", + namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Family/handle/f0000" families = expect.xpath("//g:family", namespaces={"g": NS_G}) families[1].getparent().remove(families[1]) @@ -1695,7 +1818,13 @@ class FamilyPersonCheck(BaseMergeCheck): parentref = expect.xpath("//g:person[@handle='_i0000']/g:parentin", namespaces={"g": NS_G})[0] attr.addnext(parentref) # restore order of elements + notetag = expect.xpath("//g:note[@handle='_n0000']/g:style", + namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Person/handle/i0000" persons[2].getparent().remove(persons[2]) + notetag = expect.xpath("//g:note[@handle='_n0001']/g:style", + namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Family/handle/f0000" families = expect.xpath("//g:family", namespaces={"g": NS_G}) families[1].getparent().remove(families[1]) @@ -1733,7 +1862,13 @@ class FamilyPersonCheck(BaseMergeCheck): parentref = expect.xpath("//g:person[@handle='_i0000']/g:parentin", namespaces={"g": NS_G})[0] attr.addnext(parentref) # restore order of elements + notetag = expect.xpath("//g:note[@handle='_n0000']/g:style", + namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Person/handle/i0000" persons[2].getparent().remove(persons[2]) + notetag = expect.xpath("//g:note[@handle='_n0001']/g:style", + namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Family/handle/f0000" families = expect.xpath("//g:family", namespaces={"g": NS_G}) families[1].getparent().remove(families[1]) @@ -1776,7 +1911,13 @@ class FamilyPersonCheck(BaseMergeCheck): parentref = expect.xpath("//g:person[@handle='_i0000']/g:parentin", namespaces={"g": NS_G})[0] attr.addnext(parentref) # restore order of elements + notetag = expect.xpath("//g:note[@handle='_n0000']/g:style", + namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Person/handle/i0000" persons[2].getparent().remove(persons[2]) + notetag = expect.xpath("//g:note[@handle='_n0001']/g:style", + namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Family/handle/f0000" families = expect.xpath("//g:family", namespaces={"g": NS_G}) families[1].getparent().remove(families[1]) @@ -1817,7 +1958,13 @@ class FamilyPersonCheck(BaseMergeCheck): parentref = expect.xpath("//g:person[@handle='_i0000']/g:parentin", namespaces={"g": NS_G})[0] attr.addnext(parentref) # restore order of elements + notetag = expect.xpath("//g:note[@handle='_n0000']/g:style", + namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Person/handle/i0000" persons[2].getparent().remove(persons[2]) + notetag = expect.xpath("//g:note[@handle='_n0001']/g:style", + namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Family/handle/f0000" families = expect.xpath("//g:family", namespaces={"g": NS_G}) families[1].getparent().remove(families[1]) @@ -1879,6 +2026,14 @@ class FamilyMergeCheck(BaseMergeCheck): + + + Note 0. + + + """ self.basedoc = bytes(bytearray(self.base_str + base_str, encoding='utf-8')) @@ -1974,6 +2129,8 @@ class FamilyMergeCheck(BaseMergeCheck): family = expect.xpath("//g:family[@handle='_f0001']", namespaces={"g": NS_G})[0] family.getparent().remove(family) + notetag = expect.xpath("//g:style", namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Family/handle/f0000" self.do_family_case('F0000', 'F0001', 'i0000', 'i0001', self.basedoc, expect) @@ -2004,6 +2161,8 @@ class FamilyMergeCheck(BaseMergeCheck): family = expect.xpath("//g:family[@handle='_f0001']", namespaces={"g": NS_G})[0] family.getparent().remove(family) + notetag = expect.xpath("//g:style", namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Family/handle/f0000" father = expect.xpath("//g:family[@handle='_f0000']/g:father", namespaces={"g": NS_G})[0] father.attrib['hlink'] = '_i0002' @@ -2036,6 +2195,8 @@ class FamilyMergeCheck(BaseMergeCheck): family = expect.xpath("//g:family[@handle='_f0001']", namespaces={"g": NS_G})[0] family.getparent().remove(family) + notetag = expect.xpath("//g:style", namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Family/handle/f0000" input_doc = ET.tostring(input_ctxt) self.do_family_case('F0000', 'F0001', 'i0000', 'i0001', input_doc, expect) @@ -2068,6 +2229,8 @@ class FamilyMergeCheck(BaseMergeCheck): family = expect.xpath("//g:family[@handle='_f0001']", namespaces={"g": NS_G})[0] family.getparent().remove(family) + notetag = expect.xpath("//g:style", namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Family/handle/f0000" family = expect.xpath("//g:family[@handle='_f0000']", namespaces={"g": NS_G})[0] mother = ET.SubElement(family, NSP + 'mother', hlink='_i0003') @@ -2115,6 +2278,8 @@ class FamilyMergeCheck(BaseMergeCheck): family = expect.xpath("//g:family[@handle='_f0001']", namespaces={"g": NS_G})[0] family.getparent().remove(family) + notetag = expect.xpath("//g:style", namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Family/handle/f0000" childof = expect.xpath("//g:person[@handle='_i0004']/g:childof", namespaces={"g": NS_G})[0] childof.attrib['hlink'] = '_f0000' @@ -2167,6 +2332,8 @@ class FamilyMergeCheck(BaseMergeCheck): family = expect.xpath("//g:family[@handle='_f0001']", namespaces={"g": NS_G})[0] family.getparent().remove(family) + notetag = expect.xpath("//g:style", namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Family/handle/f0000" childof = expect.xpath("//g:person[@handle='_i0004']/g:childof", namespaces={"g": NS_G})[1] childof.getparent().remove(childof) @@ -2214,6 +2381,8 @@ class FamilyMergeCheck(BaseMergeCheck): family = expect.xpath("//g:family[@handle='_f0001']", namespaces={"g": NS_G})[0] family.getparent().remove(family) + notetag = expect.xpath("//g:style", namespaces={"g": NS_G})[0] + notetag.attrib['value'] = "gramps://Family/handle/f0000" sealedto = expect.xpath("//g:sealed_to", namespaces={"g": NS_G})[0] sealedto.attrib['hlink'] = '_f0000'