|
14 | 14 | # |
15 | 15 |
|
16 | 16 | import json |
| 17 | +import mock |
17 | 18 | import six |
18 | 19 | import sys |
19 | 20 |
|
@@ -122,17 +123,41 @@ def __init__(self, name, version): |
122 | 123 |
|
123 | 124 |
|
124 | 125 | class FakeResource(object): |
125 | | - def __init__(self, manager, info, loaded=False): |
| 126 | + def __init__(self, manager=None, info={}, loaded=False, methods={}): |
| 127 | + """Set attributes and methods for a resource. |
| 128 | +
|
| 129 | + :param manager: |
| 130 | + The resource manager |
| 131 | + :param Dictionary info: |
| 132 | + A dictionary with all attributes |
| 133 | + :param bool loaded: |
| 134 | + True if the resource is loaded in memory |
| 135 | + :param Dictionary methods: |
| 136 | + A dictionary with all methods |
| 137 | + """ |
126 | 138 | self.__name__ = type(self).__name__ |
127 | 139 | self.manager = manager |
128 | 140 | self._info = info |
129 | 141 | self._add_details(info) |
| 142 | + self._add_methods(methods) |
130 | 143 | self._loaded = loaded |
131 | 144 |
|
132 | 145 | def _add_details(self, info): |
133 | 146 | for (k, v) in six.iteritems(info): |
134 | 147 | setattr(self, k, v) |
135 | 148 |
|
| 149 | + def _add_methods(self, methods): |
| 150 | + """Fake methods with MagicMock objects. |
| 151 | +
|
| 152 | + For each <@key, @value> pairs in methods, add an callable MagicMock |
| 153 | + object named @key as an attribute, and set the mock's return_value to |
| 154 | + @value. When users access the attribute with (), @value will be |
| 155 | + returned, which looks like a function call. |
| 156 | + """ |
| 157 | + for (name, ret) in six.iteritems(methods): |
| 158 | + method = mock.MagicMock(return_value=ret) |
| 159 | + setattr(self, name, method) |
| 160 | + |
136 | 161 | def __repr__(self): |
137 | 162 | reprkeys = sorted(k for k in self.__dict__.keys() if k[0] != '_' and |
138 | 163 | k != 'manager') |
|
0 commit comments