@@ -169,24 +169,13 @@ def it_can_establish_an_external_relationship(self, rels_prop_: Mock, rels_: Moc
169
169
rels_ .get_or_add_ext_rel .assert_called_once_with ("http://rel/type" , "https://hyper/link" )
170
170
assert rId == "rId27"
171
171
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 ):
183
173
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" )
186
175
187
176
part .drop_rel ("rId42" )
188
177
189
- assert ( "rId42" not in part .rels ) is rel_should_be_dropped
178
+ assert "rId42" not in part .rels
190
179
191
180
def it_can_find_a_related_part_by_reltype (
192
181
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):
411
400
xml_part = part_fixture
412
401
assert xml_part .part is xml_part
413
402
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
+
414
421
# fixtures -------------------------------------------------------
415
422
416
423
@pytest .fixture
@@ -452,6 +459,10 @@ def parse_xml_(self, request, element_):
452
459
def partname_ (self , request ):
453
460
return instance_mock (request , PackURI )
454
461
462
+ @pytest .fixture
463
+ def rels_prop_ (self , request : FixtureRequest ):
464
+ return property_mock (request , XmlPart , "rels" )
465
+
455
466
@pytest .fixture
456
467
def serialize_part_xml_ (self , request ):
457
468
return function_mock (request , "docx.opc.part.serialize_part_xml" )
0 commit comments