1111
1212import pytest
1313
14- from mock import call , Mock , patch
14+ from mock import call , Mock , patch , PropertyMock
1515
1616from opc .package import (
1717 OpcPackage , Part , PartFactory , _Relationship , RelationshipCollection ,
@@ -33,10 +33,24 @@ class DescribeOpcPackage(object):
3333 def PackageReader_ (self , request ):
3434 return class_mock ('opc.package.PackageReader' , request )
3535
36+ @pytest .fixture
37+ def PackageWriter_ (self , request ):
38+ return class_mock ('opc.package.PackageWriter' , request )
39+
3640 @pytest .fixture
3741 def PartFactory_ (self , request ):
3842 return class_mock ('opc.package.PartFactory' , request )
3943
44+ @pytest .fixture
45+ def parts (self , request ):
46+ """
47+ Return a mock patching property OpcPackage.parts, reversing the
48+ patch after each use.
49+ """
50+ _patch = patch .object (OpcPackage , 'parts' , new_callable = PropertyMock )
51+ request .addfinalizer (_patch .stop )
52+ return _patch .start ()
53+
4054 @pytest .fixture
4155 def Unmarshaller_ (self , request ):
4256 return class_mock ('opc.package.Unmarshaller' , request )
@@ -102,6 +116,19 @@ def it_can_iterate_over_parts_by_walking_rels_graph(self):
102116 # verify -----------------------
103117 assert generated_parts == [part1 , part2 ]
104118
119+ def it_can_save_to_a_pkg_file (self , PackageWriter_ , parts ):
120+ # mockery ----------------------
121+ pkg_file = Mock (name = 'pkg_file' )
122+ pkg = OpcPackage ()
123+ parts .return_value = parts = [Mock (name = 'part1' ), Mock (name = 'part2' )]
124+ # exercise ---------------------
125+ pkg .save (pkg_file )
126+ # verify -----------------------
127+ for part in parts :
128+ part ._before_marshal .assert_called_once_with ()
129+ PackageWriter_ .write .assert_called_once_with (pkg_file , pkg ._rels ,
130+ parts )
131+
105132
106133class DescribePart (object ):
107134
0 commit comments