|
11 | 11 |
|
12 | 12 | import pytest |
13 | 13 |
|
14 | | -from mock import Mock |
| 14 | +from mock import call, Mock |
15 | 15 |
|
16 | 16 | from opc.package import OpcPackage, Unmarshaller |
17 | 17 |
|
@@ -72,3 +72,25 @@ def it_can_unmarshal_from_a_pkg_reader(self, _unmarshal_parts, |
72 | 72 | parts) |
73 | 73 | for part in parts.values(): |
74 | 74 | part._after_unmarshal.assert_called_once_with() |
| 75 | + |
| 76 | + def it_can_unmarshal_parts(self): |
| 77 | + # test data -------------------- |
| 78 | + part_properties = ( |
| 79 | + ('/part/name1.xml', 'app/vnd.contentType_A', '<Part_1/>'), |
| 80 | + ('/part/name2.xml', 'app/vnd.contentType_B', '<Part_2/>'), |
| 81 | + ('/part/name3.xml', 'app/vnd.contentType_C', '<Part_3/>'), |
| 82 | + ) |
| 83 | + # mockery ---------------------- |
| 84 | + pkg_reader = Mock(name='pkg_reader') |
| 85 | + pkg_reader.iter_sparts.return_value = part_properties |
| 86 | + part_factory = Mock(name='part_factory') |
| 87 | + parts = [Mock(name='part1'), Mock(name='part2'), Mock(name='part3')] |
| 88 | + part_factory.side_effect = parts |
| 89 | + # exercise --------------------- |
| 90 | + retval = Unmarshaller._unmarshal_parts(pkg_reader, part_factory) |
| 91 | + # verify ----------------------- |
| 92 | + expected_calls = [call(*p) for p in part_properties] |
| 93 | + expected_parts = dict((p[0], parts[idx]) for (idx, p) in |
| 94 | + enumerate(part_properties)) |
| 95 | + assert part_factory.call_args_list == expected_calls |
| 96 | + assert retval == expected_parts |
0 commit comments