|
1 | 1 | """Index and retrive information from the resource JSON."""
|
2 | 2 | import pytest
|
| 3 | +import mock |
| 4 | + |
| 5 | +from botocore.exceptions import NoRegionError |
| 6 | + |
3 | 7 | from awsshell.resource import index
|
4 | 8 |
|
5 | 9 |
|
| 10 | +@pytest.fixture |
| 11 | +def describer_creator(): |
| 12 | + class FakeDescriberCreator(object): |
| 13 | + SERVICES = ['ec2'] |
| 14 | + |
| 15 | + def services_with_completions(self): |
| 16 | + return self.SERVICES |
| 17 | + |
| 18 | + return FakeDescriberCreator() |
| 19 | + |
| 20 | + |
6 | 21 | def test_build_from_has_many():
|
7 | 22 | resource = {
|
8 | 23 | 'service': {
|
@@ -211,14 +226,42 @@ def services_with_completions(self):
|
211 | 226 | assert factory.create_completer_query('ec2') == result
|
212 | 227 |
|
213 | 228 |
|
214 |
| -def test_empty_results_returned_when_no_completion_data_exists(): |
215 |
| - class FakeDescriberCreator(object): |
216 |
| - def services_with_completions(self): |
217 |
| - return [] |
| 229 | +def test_empty_results_returned_when_no_completion_data_exists(describer_creator): |
| 230 | + describer_creator.SERVICES = [] |
218 | 231 |
|
219 | 232 | completer = index.ServerSideCompleter(
|
220 | 233 | client_creator=None,
|
221 |
| - describer_creator=FakeDescriberCreator() |
| 234 | + describer_creator=describer_creator, |
222 | 235 | )
|
223 | 236 | assert completer.retrieve_candidate_values(
|
224 | 237 | 'ec2', 'run-instances', 'ImageId') == []
|
| 238 | + |
| 239 | + |
| 240 | +def test_no_completions_when_cant_create_client(describer_creator): |
| 241 | + client_creator = mock.Mock(spec=index.CachedClientCreator) |
| 242 | + # This is raised when you don't have a region configured via config file |
| 243 | + # env var or manually via a session. |
| 244 | + client_creator.create_client.side_effect = NoRegionError() |
| 245 | + completer = index.ServerSideCompleter( |
| 246 | + client_creator=client_creator, |
| 247 | + describer_creator=describer_creator) |
| 248 | + |
| 249 | + assert completer.retrieve_candidate_values( |
| 250 | + 'ec2', 'foo', 'Bar') == [] |
| 251 | + |
| 252 | + |
| 253 | +def test_no_completions_returned_on_unknown_operation(describer_creator): |
| 254 | + client = mock.Mock() |
| 255 | + client_creator = mock.Mock(spec=index.CachedClientCreator) |
| 256 | + client_creator.create_client.return_value = client |
| 257 | + |
| 258 | + client.meta.method_to_api_mapping = { |
| 259 | + 'describe_foo': 'DescribeFoo' |
| 260 | + } |
| 261 | + |
| 262 | + completer = index.ServerSideCompleter( |
| 263 | + client_creator=client_creator, |
| 264 | + describer_creator=describer_creator) |
| 265 | + |
| 266 | + assert completer.retrieve_candidate_values( |
| 267 | + 'ec2', 'not_describe_foo', 'Bar') == [] |
0 commit comments