1111import pytest
1212
1313from docx .enum .header import WD_HEADER_FOOTER
14- from docx .header import Header
14+ from docx .header import _BaseHeaderFooter , Header , HeaderFooterBody
15+ from docx .parts .document import DocumentPart
1516
1617from .unitutil .cxml import element
18+ from .unitutil .mock import call , instance_mock , property_mock
1719
1820
1921class Describe_BaseHeaderFooter (object ):
@@ -22,8 +24,26 @@ def it_knows_whether_it_is_linked_to_previous(self, is_linked_fixture):
2224 header , expected_value = is_linked_fixture
2325 assert header .is_linked_to_previous is expected_value
2426
27+ def it_provides_access_to_its_body (self , body_fixture ):
28+ header , calls , expected_value = body_fixture
29+ body = header .body
30+ assert header .part .related_hdrftr_body .call_args_list == calls
31+ assert body == expected_value
32+
2533 # fixtures -------------------------------------------------------
2634
35+ @pytest .fixture (params = [
36+ ('w:sectPr' , None ),
37+ ('w:sectPr/w:headerReference{w:type=even,r:id=rId6}' , None ),
38+ ('w:sectPr/w:headerReference{w:type=default,r:id=rId8}' , 'rId8' ),
39+ ])
40+ def body_fixture (self , request , body_ , part_prop_ , document_part_ ):
41+ sectPr_cxml , rId = request .param
42+ header = Header (element (sectPr_cxml ), None , WD_HEADER_FOOTER .PRIMARY )
43+ calls , expected_value = ([call (rId )], body_ ) if rId else ([], None )
44+ document_part_ .related_hdrftr_body .return_value = body_
45+ return header , calls , expected_value
46+
2747 @pytest .fixture (params = [
2848 ('w:sectPr' , True ),
2949 ('w:sectPr/w:headerReference{w:type=default}' , False ),
@@ -33,3 +53,19 @@ def is_linked_fixture(self, request):
3353 sectPr_cxml , expected_value = request .param
3454 header = Header (element (sectPr_cxml ), None , WD_HEADER_FOOTER .PRIMARY )
3555 return header , expected_value
56+
57+ # fixture components ---------------------------------------------
58+
59+ @pytest .fixture
60+ def body_ (self , request ):
61+ return instance_mock (request , HeaderFooterBody )
62+
63+ @pytest .fixture
64+ def document_part_ (self , request ):
65+ return instance_mock (request , DocumentPart )
66+
67+ @pytest .fixture
68+ def part_prop_ (self , request , document_part_ ):
69+ return property_mock (
70+ request , _BaseHeaderFooter , 'part' , return_value = document_part_
71+ )
0 commit comments