@@ -169,24 +169,13 @@ def it_can_establish_an_external_relationship(self, rels_prop_: Mock, rels_: Moc
169169 rels_ .get_or_add_ext_rel .assert_called_once_with ("http://rel/type" , "https://hyper/link" )
170170 assert rId == "rId27"
171171
172- @pytest .mark .parametrize (
173- ("part_cxml" , "rel_should_be_dropped" ),
174- [
175- ("w:p" , True ),
176- ("w:p/r:a{r:id=rId42}" , True ),
177- ("w:p/r:a{r:id=rId42}/r:b{r:id=rId42}" , False ),
178- ],
179- )
180- def it_can_drop_a_relationship (
181- self , part_cxml : str , rel_should_be_dropped : bool , rels_prop_ : Mock
182- ):
172+ def it_can_drop_a_relationship (self , rels_prop_ : Mock ):
183173 rels_prop_ .return_value = {"rId42" : None }
184- part = Part ("partname" , "content_type" )
185- part ._element = element (part_cxml ) # pyright: ignore[reportAttributeAccessIssue]
174+ part = Part (PackURI ("/partname" ), "content_type" )
186175
187176 part .drop_rel ("rId42" )
188177
189- assert ( "rId42" not in part .rels ) is rel_should_be_dropped
178+ assert "rId42" not in part .rels
190179
191180 def it_can_find_a_related_part_by_reltype (
192181 self , rels_prop_ : Mock , rels_ : Mock , other_part_ : Mock
@@ -411,6 +400,24 @@ def it_knows_its_the_part_for_its_child_objects(self, part_fixture):
411400 xml_part = part_fixture
412401 assert xml_part .part is xml_part
413402
403+ @pytest .mark .parametrize (
404+ ("part_cxml" , "rel_should_be_dropped" ),
405+ [
406+ ("w:p" , True ),
407+ ("w:p/r:a{r:id=rId42}" , True ),
408+ ("w:p/r:a{r:id=rId42}/r:b{r:id=rId42}" , False ),
409+ ],
410+ )
411+ def it_only_drops_a_relationship_with_zero_reference_count (
412+ self , part_cxml : str , rel_should_be_dropped : bool , rels_prop_ : Mock , package_ : Mock
413+ ):
414+ rels_prop_ .return_value = {"rId42" : None }
415+ part = XmlPart (PackURI ("/partname" ), "content_type" , element (part_cxml ), package_ )
416+
417+ part .drop_rel ("rId42" )
418+
419+ assert ("rId42" not in part .rels ) is rel_should_be_dropped
420+
414421 # fixtures -------------------------------------------------------
415422
416423 @pytest .fixture
@@ -452,6 +459,10 @@ def parse_xml_(self, request, element_):
452459 def partname_ (self , request ):
453460 return instance_mock (request , PackURI )
454461
462+ @pytest .fixture
463+ def rels_prop_ (self , request : FixtureRequest ):
464+ return property_mock (request , XmlPart , "rels" )
465+
455466 @pytest .fixture
456467 def serialize_part_xml_ (self , request ):
457468 return function_mock (request , "docx.opc.part.serialize_part_xml" )
0 commit comments