1010
1111import pytest
1212
13- from docx .api import Document
13+ import docx
14+
15+ from docx .api import Document , DocumentNew
1416from docx .enum .text import WD_BREAK
1517from docx .opc .constants import CONTENT_TYPE as CT , RELATIONSHIP_TYPE as RT
1618from docx .opc .coreprops import CoreProperties
2527from docx .text .run import Run
2628
2729from .unitutil .mock import (
28- instance_mock , class_mock , method_mock , property_mock , var_mock
30+ function_mock , instance_mock , class_mock , method_mock , property_mock
2931)
3032
3133
3234class DescribeDocument (object ):
3335
34- def it_opens_a_docx_on_construction (self , init_fixture ):
35- docx_ , open_ = init_fixture
36- document = Document (docx_ )
37- open_ .assert_called_once_with (docx_ )
38- assert isinstance (document , Document )
39-
40- def it_can_open_a_docx_file (self , open_fixture ):
41- docx_ , Package_ , package_ , document_part_ = open_fixture
42- document_part , package = Document ._open (docx_ )
43- Package_ .open .assert_called_once_with (docx_ )
44- assert document_part is document_part
45- assert package is package_
46-
47- def it_opens_default_template_if_no_file_provided (
48- self , Package_ , default_docx_ ):
49- Document ._open (None )
50- Package_ .open .assert_called_once_with (default_docx_ )
51-
52- def it_should_raise_if_not_a_Word_file (self , Package_ , package_ , docx_ ):
53- package_ .main_document .content_type = 'foobar'
36+ def it_opens_a_docx_file (self , open_fixture ):
37+ docx , Package_ , document_ = open_fixture
38+ document = DocumentNew (docx )
39+ Package_ .open .assert_called_once_with (docx )
40+ assert document is document_
41+
42+ def it_opens_the_default_docx_if_none_specified (self , default_fixture ):
43+ docx , Package_ , document_ = default_fixture
44+ document = DocumentNew ()
45+ Package_ .open .assert_called_once_with (docx )
46+ assert document is document_
47+
48+ def it_raises_on_not_a_Word_file (self , raise_fixture ):
49+ not_a_docx = raise_fixture
5450 with pytest .raises (ValueError ):
55- Document ._open (docx_ )
51+ Document (not_a_docx )
52+
53+ # fixtures -------------------------------------------------------
54+
55+ @pytest .fixture
56+ def default_fixture (self , _default_docx_path_ , Package_ , document_ ):
57+ docx = 'barfoo.docx'
58+ _default_docx_path_ .return_value = docx
59+ document_part = Package_ .open .return_value .main_document_part
60+ document_part .document = document_
61+ document_part .content_type = CT .WML_DOCUMENT_MAIN
62+ return docx , Package_ , document_
63+
64+ @pytest .fixture
65+ def open_fixture (self , Package_ , document_ ):
66+ docx = 'foobar.docx'
67+ document_part = Package_ .open .return_value .main_document_part
68+ document_part .document = document_
69+ document_part .content_type = CT .WML_DOCUMENT_MAIN
70+ return docx , Package_ , document_
71+
72+ @pytest .fixture
73+ def raise_fixture (self , Package_ ):
74+ not_a_docx = 'foobar.xlsx'
75+ Package_ .open .return_value .main_document_part .content_type = 'BOGUS'
76+ return not_a_docx
77+
78+ # fixture components ---------------------------------------------
79+
80+ @pytest .fixture
81+ def _default_docx_path_ (self , request ):
82+ return function_mock (request , 'docx.api._default_docx_path' )
83+
84+ @pytest .fixture
85+ def document_ (self , request ):
86+ return instance_mock (request , docx .document .Document )
87+
88+ @pytest .fixture
89+ def Package_ (self , request ):
90+ return class_mock (request , 'docx.api.Package' )
91+
92+
93+ class DescribeDocumentOld (object ):
5694
5795 def it_can_add_a_heading (self , add_heading_fixture ):
5896 document , text , level , style , paragraph_ = add_heading_fixture
@@ -219,10 +257,6 @@ def num_part_get_fixture(self, document, document_part_, numbering_part_):
219257 document_part_ .part_related_by .return_value = numbering_part_
220258 return document , document_part_ , numbering_part_
221259
222- @pytest .fixture
223- def open_fixture (self , docx_ , Package_ , package_ , document_part_ ):
224- return docx_ , Package_ , package_ , document_part_
225-
226260 @pytest .fixture
227261 def paragraphs_fixture (self , document , paragraphs_ ):
228262 return document , paragraphs_
@@ -254,10 +288,6 @@ def add_paragraph_(self, request, paragraph_):
254288 def core_properties_ (self , request ):
255289 return instance_mock (request , CoreProperties )
256290
257- @pytest .fixture
258- def default_docx_ (self , request ):
259- return var_mock (request , 'docx.api._default_docx_path' )
260-
261291 @pytest .fixture
262292 def Document_inline_shapes_ (self , request , inline_shapes_ ):
263293 return property_mock (
@@ -268,6 +298,10 @@ def Document_inline_shapes_(self, request, inline_shapes_):
268298 def document (self , open_ ):
269299 return Document ()
270300
301+ @pytest .fixture
302+ def document_obj_ (self , request ):
303+ return instance_mock (request , docx .document .Document )
304+
271305 @pytest .fixture
272306 def document_part_ (
273307 self , request , paragraph_ , paragraphs_ , section_ , table_ ,
@@ -282,10 +316,6 @@ def document_part_(
282316 document_part_ .tables = tables_
283317 return document_part_
284318
285- @pytest .fixture
286- def docx_ (self , request ):
287- return instance_mock (request , str )
288-
289319 @pytest .fixture
290320 def inline_shapes_ (self , request ):
291321 return instance_mock (request , InlineShapes )
@@ -307,10 +337,12 @@ def numbering_part_(self, request):
307337 return instance_mock (request , NumberingPart )
308338
309339 @pytest .fixture
310- def open_ (self , request , document_part_ , package_ ):
311- return method_mock (
312- request , Document , '_open' ,
313- return_value = (document_part_ , package_ )
340+ def open_ (self , request , document_obj_ , document_part_ , package_ ):
341+ document_part_ .package = package_
342+ document_obj_ ._part = document_part_
343+ return function_mock (
344+ request , 'docx.api.DocumentNew' ,
345+ return_value = document_obj_
314346 )
315347
316348 @pytest .fixture
@@ -322,7 +354,7 @@ def Package_(self, request, package_):
322354 @pytest .fixture
323355 def package_ (self , request , document_part_ ):
324356 package_ = instance_mock (request , Package )
325- package_ .main_document = document_part_
357+ package_ .main_document_part = document_part_
326358 return package_
327359
328360 @pytest .fixture
0 commit comments