1414 RELATIONSHIP_TYPE as RT,
1515)
1616from pptx.opc.oxml import CT_Relationship, CT_Relationships
17- from pptx.opc.packuri import PACKAGE_URI, PackURI
1817from pptx.opc.package import (
1918 OpcPackage,
2019 Part,
2524 _Relationship,
2625 _Relationships,
2726)
28- from pptx.opc.serialized import PackageReader
27+ from pptx.opc.packuri import PACKAGE_URI, PackURI
2928from pptx.oxml import parse_xml
3029
3130from ..unitutil.cxml import element
@@ -125,32 +124,6 @@ def it_can_iterate_over_its_relationships(self, request, _rels_prop_):
125124 rels[2],
126125 )
127126
128- def it_can_establish_a_relationship_to_another_part(
129- self, request, _rels_prop_, relationships_
130- ):
131- relationships_.get_or_add.return_value = "rId99"
132- _rels_prop_.return_value = relationships_
133- part_ = instance_mock(request, Part)
134- package = OpcPackage(None)
135-
136- rId = package.relate_to(part_, "http://rel/type")
137-
138- relationships_.get_or_add.assert_called_once_with("http://rel/type", part_)
139- assert rId == "rId99"
140-
141- def it_can_find_a_part_related_by_reltype(
142- self, request, _rels_prop_, relationships_
143- ):
144- related_part_ = instance_mock(request, Part, name="related_part_")
145- relationships_.part_with_reltype.return_value = related_part_
146- _rels_prop_.return_value = relationships_
147- package = OpcPackage(None)
148-
149- related_part = package.part_related_by(RT.SLIDE)
150-
151- relationships_.part_with_reltype.assert_called_once_with(RT.SLIDE)
152- assert related_part is related_part_
153-
154127 @pytest.mark.parametrize(
155128 "ns, expected_n",
156129 (((), 1), ((1,), 2), ((1, 2), 3), ((2, 4), 3), ((1, 4), 3)),
@@ -174,6 +147,32 @@ def it_can_find_the_next_available_partname(self, request, ns, expected_n):
174147 PackURI_.assert_called_once_with(next_partname)
175148 assert partname == next_partname
176149
150+ def it_can_find_a_part_related_by_reltype(
151+ self, request, _rels_prop_, relationships_
152+ ):
153+ related_part_ = instance_mock(request, Part, name="related_part_")
154+ relationships_.part_with_reltype.return_value = related_part_
155+ _rels_prop_.return_value = relationships_
156+ package = OpcPackage(None)
157+
158+ related_part = package.part_related_by(RT.SLIDE)
159+
160+ relationships_.part_with_reltype.assert_called_once_with(RT.SLIDE)
161+ assert related_part is related_part_
162+
163+ def it_can_establish_a_relationship_to_another_part(
164+ self, request, _rels_prop_, relationships_
165+ ):
166+ relationships_.get_or_add.return_value = "rId99"
167+ _rels_prop_.return_value = relationships_
168+ part_ = instance_mock(request, Part)
169+ package = OpcPackage(None)
170+
171+ rId = package.relate_to(part_, "http://rel/type")
172+
173+ relationships_.get_or_add.assert_called_once_with("http://rel/type", part_)
174+ assert rId == "rId99"
175+
177176 def it_can_save_to_a_pkg_file(self, request, _rels_prop_, relationships_):
178177 _rels_prop_.return_value = relationships_
179178 parts_ = tuple(instance_mock(request, Part) for _ in range(3))
@@ -314,18 +313,6 @@ def it_loads_the_xml_relationships_from_the_package_to_help(self, request):
314313 def package_(self, request):
315314 return instance_mock(request, OpcPackage)
316315
317- @pytest.fixture
318- def package_reader_(self, request):
319- return instance_mock(request, PackageReader)
320-
321- @pytest.fixture
322- def _package_reader_prop_(self, request):
323- return property_mock(request, _PackageLoader, "_package_reader")
324-
325- @pytest.fixture
326- def _parts_prop_(self, request):
327- return property_mock(request, _PackageLoader, "_parts")
328-
329316 @pytest.fixture
330317 def _xml_rels_prop_(self, request):
331318 return property_mock(request, _PackageLoader, "_xml_rels")
@@ -335,25 +322,24 @@ class DescribePart(object):
335322 """Unit-test suite for `pptx.opc.package.Part` objects."""
336323
337324 def it_can_be_constructed_by_PartFactory(self, request, package_):
338- partname_ = PackURI("/ppt/slides/slide1.xml" )
325+ partname_ = instance_mock(request, PackURI )
339326 _init_ = initializer_mock(request, Part)
340327
341- part = Part.load(partname_, CT.PML_SLIDE, b"blob", package_ )
328+ part = Part.load(partname_, CT.PML_SLIDE, package_, b"blob")
342329
343- _init_.assert_called_once_with(part, partname_, CT.PML_SLIDE, b"blob", package_ )
330+ _init_.assert_called_once_with(part, partname_, CT.PML_SLIDE, package_, b"blob")
344331 assert isinstance(part, Part)
345332
346333 def it_uses_the_load_blob_as_its_blob(self):
347334 assert Part(None, None, None, b"blob").blob == b"blob"
348335
349336 def it_can_change_its_blob(self):
350- part, new_blob = Part(None, None, "xyz", None), "foobar"
351- part.blob = new_blob
352- assert part.blob == new_blob
337+ part = Part(None, None, None, b"old-blob")
338+ part.blob = b"new-blob"
339+ assert part.blob == b"new-blob"
353340
354- def it_knows_its_content_type(self, content_type_fixture):
355- part, expected_content_type = content_type_fixture
356- assert part.content_type == expected_content_type
341+ def it_knows_its_content_type(self):
342+ assert Part(None, CT.PML_SLIDE, None).content_type == CT.PML_SLIDE
357343
358344 @pytest.mark.parametrize("ref_count, calls", ((2, []), (1, [call("rId42")])))
359345 def it_can_drop_a_relationship(
@@ -370,26 +356,26 @@ def it_can_drop_a_relationship(
370356 _rel_ref_count_.assert_called_once_with(part, "rId42")
371357 assert relationships_.pop.call_args_list == calls
372358
373- def it_knows_the_package_it_belongs_to(self, package_get_fixture):
374- part, expected_package = package_get_fixture
375- assert part.package == expected_package
359+ def it_knows_the_package_it_belongs_to(self, package_):
360+ assert Part(None, None, package_).package is package_
376361
377- def it_can_find_a_related_part_by_reltype(self, related_part_fixture):
378- part, reltype_, related_part_ = related_part_fixture
362+ def it_can_find_a_part_related_by_reltype(self, _rels_prop_, relationships_, part_):
363+ relationships_.part_with_reltype.return_value = part_
364+ _rels_prop_.return_value = relationships_
365+ part = Part(None, None, None)
379366
380- related_part = part.part_related_by(reltype_ )
367+ related_part = part.part_related_by(RT.CHART )
381368
382- part.rels. part_with_reltype.assert_called_once_with(reltype_ )
383- assert related_part is related_part_
369+ relationships_. part_with_reltype.assert_called_once_with(RT.CHART )
370+ assert related_part is part_
384371
385- def it_knows_its_partname(self, partname_get_fixture):
386- part, expected_partname = partname_get_fixture
387- assert part.partname == expected_partname
372+ def it_knows_its_partname(self):
373+ assert Part(PackURI("/part/name"), None, None).partname == PackURI("/part/name")
388374
389- def it_can_change_its_partname(self, partname_set_fixture ):
390- part, new_partname = partname_set_fixture
391- part.partname = new_partname
392- assert part.partname == new_partname
375+ def it_can_change_its_partname(self):
376+ part = Part(PackURI("/old/part/name"), None, None)
377+ part.partname = PackURI("/new/part/name")
378+ assert part.partname == PackURI("/new/part/name")
393379
394380 def it_can_establish_a_relationship_to_another_part(
395381 self, _rels_prop_, relationships_, part_
@@ -403,13 +389,19 @@ def it_can_establish_a_relationship_to_another_part(
403389 relationships_.get_or_add.assert_called_once_with(RT.SLIDE, part_)
404390 assert rId == "rId42"
405391
406- def it_can_establish_an_external_relationship(self, relate_to_url_fixture):
407- part, url_, reltype_, rId_ = relate_to_url_fixture
392+ def and_it_can_establish_an_external_relationship(
393+ self, _rels_prop_, relationships_
394+ ):
395+ relationships_.get_or_add_ext_rel.return_value = "rId24"
396+ _rels_prop_.return_value = relationships_
397+ part = Part(None, None, None)
408398
409- rId = part.relate_to(url_, reltype_ , is_external=True)
399+ rId = part.relate_to("http://url", RT.HYPERLINK , is_external=True)
410400
411- part.rels.get_or_add_ext_rel.assert_called_once_with(reltype_, url_)
412- assert rId is rId_
401+ relationships_.get_or_add_ext_rel.assert_called_once_with(
402+ RT.HYPERLINK, "http://url"
403+ )
404+ assert rId == "rId24"
413405
414406 def it_can_find_a_related_part_by_rId(
415407 self, request, _rels_prop_, relationships_, relationship_, part_
@@ -424,20 +416,18 @@ def it_can_find_a_related_part_by_rId(
424416 relationships_.__getitem__.assert_called_once_with("rId17")
425417 assert related_part is part_
426418
427- def it_provides_access_to_its_relationships(self, rels_fixture):
428- part, Relationships_, partname_, rels_ = rels_fixture
429-
430- rels = part.rels
431-
432- Relationships_.assert_called_once_with(partname_.baseURI)
433- assert rels is rels_
434-
435- def it_can_find_the_uri_of_an_external_relationship(self, target_ref_fixture):
436- part, rId_, url_ = target_ref_fixture
419+ def it_can_find_a_target_ref_URI_by_rId(
420+ self, request, _rels_prop_, relationships_, relationship_
421+ ):
422+ relationship_.target_ref = "http://url"
423+ relationships_.__getitem__.return_value = relationship_
424+ _rels_prop_.return_value = relationships_
425+ part = Part(None, None, None)
437426
438- url = part.target_ref(rId_ )
427+ target_ref = part.target_ref("rId9" )
439428
440- assert url == url_
429+ relationships_.__getitem__.assert_called_once_with("rId9")
430+ assert target_ref == "http://url"
441431
442432 def it_can_load_a_blob_from_a_file_path_to_help(self):
443433 path = absjoin(test_file_dir, "minimal.pptx")
@@ -451,89 +441,27 @@ def it_can_load_a_blob_from_a_file_like_object_to_help(self):
451441 part = Part(None, None, None, None)
452442 assert part._blob_from_file(io.BytesIO(b"012345")) == b"012345"
453443
454- # fixtures ---------------------------------------------
455-
456- @pytest.fixture
457- def blob_fixture(self, blob_):
458- part = Part(None, None, blob_, None)
459- return part, blob_
460-
461- @pytest.fixture
462- def content_type_fixture(self):
463- content_type = "content/type"
464- part = Part(None, content_type, None, None)
465- return part, content_type
466-
467- @pytest.fixture
468- def package_get_fixture(self, package_):
469- part = Part(None, None, package_)
470- return part, package_
471-
472- @pytest.fixture
473- def partname_get_fixture(self):
474- partname = PackURI("/part/name")
475- part = Part(partname, None, None, None)
476- return part, partname
477-
478- @pytest.fixture
479- def partname_set_fixture(self):
480- old_partname = PackURI("/old/part/name")
481- new_partname = PackURI("/new/part/name")
482- part = Part(old_partname, None, None, None)
483- return part, new_partname
484-
485- @pytest.fixture
486- def relate_to_url_fixture(self, part, _rels_prop_, rels_, url_, reltype_, rId_):
487- _rels_prop_.return_value = rels_
488- return part, url_, reltype_, rId_
489-
490- @pytest.fixture
491- def related_part_fixture(self, part, _rels_prop_, rels_, reltype_, part_):
492- _rels_prop_.return_value = rels_
493- return part, reltype_, part_
444+ def it_constructs_its_relationships_object_to_help(self, request, relationships_):
445+ _Relationships_ = class_mock(
446+ request, "pptx.opc.package._Relationships", return_value=relationships_
447+ )
448+ part = Part(PackURI("/ppt/slides/slide1.xml"), None, None)
494449
495- @pytest.fixture
496- def rels_fixture(self, Relationships_, partname_, rels_):
497- part = Part(partname_, None, None)
498- return part, Relationships_, partname_, rels_
450+ rels = part._rels
499451
500- @pytest.fixture
501- def target_ref_fixture(self, part, _rels_prop_, rId_, rel_, url_):
502- _rels_prop_.return_value = {rId_: rel_}
503- return part, rId_, url_
452+ _Relationships_.assert_called_once_with("/ppt/slides")
453+ assert rels is relationships_
504454
505455 # fixture components ---------------------------------------------
506456
507- @pytest.fixture
508- def blob_(self, request):
509- return instance_mock(request, bytes)
510-
511457 @pytest.fixture
512458 def package_(self, request):
513459 return instance_mock(request, OpcPackage)
514460
515- @pytest.fixture
516- def part(self):
517- return Part(None, None, None)
518-
519461 @pytest.fixture
520462 def part_(self, request):
521463 return instance_mock(request, Part)
522464
523- @pytest.fixture
524- def partname_(self, request):
525- return instance_mock(request, PackURI)
526-
527- @pytest.fixture
528- def Relationships_(self, request, rels_):
529- return class_mock(
530- request, "pptx.opc.package._Relationships", return_value=rels_
531- )
532-
533- @pytest.fixture
534- def rel_(self, request, rId_, url_):
535- return instance_mock(request, _Relationship, rId=rId_, target_ref=url_)
536-
537465 @pytest.fixture
538466 def relationship_(self, request):
539467 return instance_mock(request, _Relationship)
@@ -542,30 +470,10 @@ def relationship_(self, request):
542470 def relationships_(self, request):
543471 return instance_mock(request, _Relationships)
544472
545- @pytest.fixture
546- def rels_(self, request, part_, rel_, rId_):
547- rels_ = instance_mock(request, _Relationships)
548- rels_.part_with_reltype.return_value = part_
549- rels_.get_or_add.return_value = rel_
550- rels_.get_or_add_ext_rel.return_value = rId_
551- return rels_
552-
553473 @pytest.fixture
554474 def _rels_prop_(self, request):
555475 return property_mock(request, Part, "_rels")
556476
557- @pytest.fixture
558- def reltype_(self, request):
559- return instance_mock(request, str)
560-
561- @pytest.fixture
562- def rId_(self, request):
563- return instance_mock(request, str)
564-
565- @pytest.fixture
566- def url_(self, request):
567- return instance_mock(request, str)
568-
569477
570478class DescribeXmlPart(object):
571479 """Unit-test suite for `pptx.opc.package.XmlPart` objects."""
0 commit comments