66
77import pytest
88
9- from docx .api import Document , _Document
9+ from docx .api import Document
1010from docx .opc .constants import CONTENT_TYPE as CT
1111from docx .package import Package
1212from docx .parts .document import DocumentPart , InlineShapes
1313
14- from .unitutil import class_mock , instance_mock , var_mock
14+ from .unitutil import class_mock , instance_mock , method_mock , var_mock
1515
1616
1717class DescribeDocument (object ):
1818
19- def it_opens_a_docx_file (self , open_fixture ):
20- docx_ , Package_ , _Document_ , package , document_part = open_fixture
21- _document = Document (docx_ )
19+ def it_opens_a_docx_on_construction (self , init_fixture ):
20+ docx_ , open_ = init_fixture
21+ document = Document (docx_ )
22+ open_ .assert_called_once_with (docx_ )
23+ assert isinstance (document , Document )
24+
25+ def it_can_open_a_docx_file (self , open_fixture ):
26+ docx_ , Package_ , package_ , document_part_ = open_fixture
27+ document_part , package = Document ._open (docx_ )
2228 Package_ .open .assert_called_once_with (docx_ )
23- _Document_ . assert_called_once_with ( package , document_part )
24- assert _document is _Document_ . return_value
29+ assert document_part is document_part
30+ assert package is package_
2531
26- def it_uses_default_if_no_file_provided (self , Package_ , default_docx_ ):
27- Document ()
32+ def it_opens_default_template_if_no_file_provided (
33+ self , Package_ , default_docx_ ):
34+ Document ._open (None )
2835 Package_ .open .assert_called_once_with (default_docx_ )
2936
3037 def it_should_raise_if_not_a_Word_file (self , Package_ , package_ , docx_ ):
3138 package_ .main_document .content_type = 'foobar'
3239 with pytest .raises (ValueError ):
33- Document (docx_ )
34-
35- # fixtures -------------------------------------------------------
36-
37- @pytest .fixture
38- def _Document_ (self , request ):
39- return class_mock (request , 'docx.api._Document' )
40-
41- @pytest .fixture
42- def default_docx_ (self , request ):
43- return var_mock (request , 'docx.api._default_docx_path' )
44-
45- @pytest .fixture
46- def document_part_ (self , request ):
47- return instance_mock (
48- request , DocumentPart , content_type = CT .WML_DOCUMENT_MAIN
49- )
50-
51- @pytest .fixture
52- def docx_ (self , request ):
53- return instance_mock (request , str )
54-
55- @pytest .fixture
56- def open_fixture (
57- self , request , docx_ , Package_ , _Document_ , package_ ,
58- document_part_ ):
59- return docx_ , Package_ , _Document_ , package_ , document_part_
60-
61- @pytest .fixture
62- def Package_ (self , request , package_ ):
63- Package_ = class_mock (request , 'docx.api.Package' )
64- Package_ .open .return_value = package_
65- return Package_
66-
67- @pytest .fixture
68- def package_ (self , request , document_part_ ):
69- package_ = instance_mock (request , Package )
70- package_ .main_document = document_part_
71- return package_
72-
73-
74- class Describe_Document (object ):
40+ Document ._open (docx_ )
7541
7642 def it_provides_access_to_the_document_body (self , document ):
7743 body = document .body
@@ -82,14 +48,14 @@ def it_provides_access_to_the_document_inline_shapes(self, document):
8248 assert body is document ._document_part .inline_shapes
8349
8450 def it_can_add_an_inline_picture (self , add_picture_fixture ):
85- document , inline_shapes , image_path_or_stream_ , picture_shape_ = (
51+ document , inline_shapes , image_path_or_stream_ , inline_picture_ = (
8652 add_picture_fixture
8753 )
88- picture_shape = document .add_inline_picture (image_path_or_stream_ )
54+ inline_picture = document .add_inline_picture (image_path_or_stream_ )
8955 inline_shapes .add_picture .assert_called_once_with (
9056 image_path_or_stream_
9157 )
92- assert picture_shape is picture_shape_
58+ assert inline_picture is inline_picture_
9359
9460 def it_can_save_the_package (self , save_fixture ):
9561 document , package_ , file_ = save_fixture
@@ -99,28 +65,61 @@ def it_can_save_the_package(self, save_fixture):
9965 # fixtures -------------------------------------------------------
10066
10167 @pytest .fixture
102- def add_picture_fixture (self , request , document_part_ ):
103- document = _Document ( None , document_part_ )
68+ def add_picture_fixture (self , request , open_ , document_part_ ):
69+ document = Document ( )
10470 inline_shapes = instance_mock (request , InlineShapes )
10571 document_part_ .inline_shapes = inline_shapes
10672 image_path_ = instance_mock (request , str )
10773 picture_shape_ = inline_shapes .add_picture .return_value
10874 return document , inline_shapes , image_path_ , picture_shape_
10975
11076 @pytest .fixture
111- def document (self , request , package_ , document_part_ ):
112- return _Document (package_ , document_part_ )
77+ def default_docx_ (self , request ):
78+ return var_mock (request , 'docx.api._default_docx_path' )
79+
80+ @pytest .fixture
81+ def document (self , open_ ):
82+ return Document ()
11383
11484 @pytest .fixture
11585 def document_part_ (self , request ):
116- return instance_mock (request , DocumentPart )
86+ return instance_mock (
87+ request , DocumentPart , content_type = CT .WML_DOCUMENT_MAIN
88+ )
89+
90+ @pytest .fixture
91+ def docx_ (self , request ):
92+ return instance_mock (request , str )
93+
94+ @pytest .fixture
95+ def init_fixture (self , docx_ , open_ ):
96+ return docx_ , open_
11797
11898 @pytest .fixture
119- def package_ (self , request ):
120- return instance_mock (request , Package )
99+ def open_ (self , request , document_part_ , package_ ):
100+ return method_mock (
101+ request , Document , '_open' ,
102+ return_value = (document_part_ , package_ )
103+ )
104+
105+ @pytest .fixture
106+ def open_fixture (self , docx_ , Package_ , package_ , document_part_ ):
107+ return docx_ , Package_ , package_ , document_part_
108+
109+ @pytest .fixture
110+ def Package_ (self , request , package_ ):
111+ Package_ = class_mock (request , 'docx.api.Package' )
112+ Package_ .open .return_value = package_
113+ return Package_
114+
115+ @pytest .fixture
116+ def package_ (self , request , document_part_ ):
117+ package_ = instance_mock (request , Package )
118+ package_ .main_document = document_part_
119+ return package_
121120
122121 @pytest .fixture
123- def save_fixture (self , request , package_ ):
122+ def save_fixture (self , request , open_ , package_ ):
124123 file_ = instance_mock (request , str )
125- document = _Document ( package_ , None )
124+ document = Document ( )
126125 return document , package_ , file_
0 commit comments