88
99import pytest
1010
11+ from docx .opc .constants import RELATIONSHIP_TYPE as RT
1112from docx .opc .coreprops import CoreProperties
1213from docx .opc .package import OpcPackage , Unmarshaller
1314from docx .opc .packuri import PACKAGE_URI
@@ -116,6 +117,26 @@ def it_provides_access_to_the_core_properties(self, core_props_fixture):
116117 core_properties = opc_package .core_properties
117118 assert core_properties is core_properties_
118119
120+ def it_provides_access_to_the_core_properties_part_to_help (
121+ self , core_props_part_fixture ):
122+ opc_package , core_properties_part_ = core_props_part_fixture
123+ core_properties_part = opc_package ._core_properties_part
124+ assert core_properties_part is core_properties_part_
125+
126+ def it_creates_a_default_core_props_part_if_none_present (
127+ self , default_core_props_fixture ):
128+ opc_package , CorePropertiesPart_ , core_properties_part_ = (
129+ default_core_props_fixture
130+ )
131+
132+ core_properties_part = opc_package ._core_properties_part
133+
134+ CorePropertiesPart_ .default .assert_called_once_with (opc_package )
135+ opc_package .relate_to .assert_called_once_with (
136+ core_properties_part_ , RT .CORE_PROPERTIES
137+ )
138+ assert core_properties_part is core_properties_part_
139+
119140 # fixtures ---------------------------------------------
120141
121142 @pytest .fixture
@@ -127,6 +148,22 @@ def core_props_fixture(
127148 core_properties_part_ .core_properties = core_properties_
128149 return opc_package , core_properties_
129150
151+ @pytest .fixture
152+ def core_props_part_fixture (
153+ self , part_related_by_ , core_properties_part_ ):
154+ opc_package = OpcPackage ()
155+ part_related_by_ .return_value = core_properties_part_
156+ return opc_package , core_properties_part_
157+
158+ @pytest .fixture
159+ def default_core_props_fixture (
160+ self , part_related_by_ , CorePropertiesPart_ , relate_to_ ,
161+ core_properties_part_ ):
162+ opc_package = OpcPackage ()
163+ part_related_by_ .side_effect = KeyError
164+ CorePropertiesPart_ .default .return_value = core_properties_part_
165+ return opc_package , CorePropertiesPart_ , core_properties_part_
166+
130167 @pytest .fixture
131168 def relate_to_part_fixture_ (self , request , pkg , rels_ , reltype ):
132169 rId = 'rId99'
@@ -146,6 +183,10 @@ def related_part_fixture_(self, request, rels_, reltype):
146183
147184 # fixture components -----------------------------------
148185
186+ @pytest .fixture
187+ def CorePropertiesPart_ (self , request ):
188+ return class_mock (request , 'docx.opc.package.CorePropertiesPart' )
189+
149190 @pytest .fixture
150191 def core_properties_ (self , request ):
151192 return instance_mock (request , CoreProperties )
@@ -170,6 +211,10 @@ def PackageWriter_(self, request):
170211 def PartFactory_ (self , request ):
171212 return class_mock (request , 'docx.opc.package.PartFactory' )
172213
214+ @pytest .fixture
215+ def part_related_by_ (self , request ):
216+ return method_mock (request , OpcPackage , 'part_related_by' )
217+
173218 @pytest .fixture
174219 def parts (self , request , parts_ ):
175220 """
@@ -214,6 +259,10 @@ def rel_attrs_(self, request):
214259 rId = 'rId99'
215260 return reltype , target_ , rId
216261
262+ @pytest .fixture
263+ def relate_to_ (self , request ):
264+ return method_mock (request , OpcPackage , 'relate_to' )
265+
217266 @pytest .fixture
218267 def rels_ (self , request ):
219268 return instance_mock (request , Relationships )
0 commit comments