Skip to content

Commit 83f6962

Browse files
committed
Increasing test coverage
1 parent 47a3bf9 commit 83f6962

File tree

2 files changed

+90
-17
lines changed

2 files changed

+90
-17
lines changed

src/rpdk/core/project.py

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -292,25 +292,19 @@ def load_settings(self):
292292
f"Project file '{self.settings_path}' exceeds maximum length of 10 KiB."
293293
)
294294
# validate protocol version, if specified
295-
try:
296-
settings = raw_settings["settings"]
297-
if "protocolVersion" in settings:
298-
protocol_version = settings["protocolVersion"]
299-
if protocol_version not in PROTOCOL_VERSION_VALUES:
300-
raise InvalidProjectError(
301-
f"Invalid 'protocolVersion' settings in '{self.settings_path}"
302-
)
303-
else:
304-
LOG.warning(
305-
"No protovolVersion found: this will default to version 1.0.0 during registration. "
306-
"Please consider upgrading to CFN-CLI 2.0 following the guide: "
307-
"https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/what-is-cloudformation-cli.html"
295+
if "settings" in raw_settings and "protocolVersion" in raw_settings["settings"]:
296+
protocol_version = raw_settings["settings"]["protocolVersion"]
297+
if protocol_version not in PROTOCOL_VERSION_VALUES:
298+
raise InvalidProjectError(
299+
f"Invalid 'protocolVersion' settings in '{self.settings_path}"
308300
)
309-
except KeyError as e:
310-
self._raise_invalid_project(
311-
f"Error extracting protocol version from '{self.settings_path}'", e
301+
else:
302+
LOG.warning(
303+
"No protovolVersion found: this will default to version 1.0.0 during registration. "
304+
"Please consider upgrading to CFN-CLI 2.0 following the guide: "
305+
"https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/what-is-cloudformation-cli.html"
312306
)
313-
307+
314308
# backward compatible
315309
if "artifact_type" not in raw_settings:
316310
raw_settings["artifact_type"] = ARTIFACT_TYPE_RESOURCE

tests/test_project.py

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,32 @@ def test_load_settings_invalid_hooks_settings(project):
173173
mock_open.assert_called_once_with("r", encoding="utf-8")
174174

175175

176+
def test_load_settings_invalid_protocol_version(project):
177+
with patch_settings(project, '{"settings": {"protocolVersion": "3.0.0"}}') as mock_open:
178+
with pytest.raises(InvalidProjectError):
179+
project.load_settings()
180+
mock_open.assert_called_once_with("r", encoding="utf-8")
181+
182+
183+
def test_load_settings_missing_protocol_version(project):
184+
plugin = object()
185+
data = json.dumps(
186+
{
187+
"artifact_type": "MODULE",
188+
"typeName": MODULE_TYPE_NAME,
189+
"settings": {}
190+
}
191+
)
192+
patch_load = patch(
193+
"rpdk.core.project.load_plugin", autospec=True, return_value=plugin
194+
)
195+
196+
with patch_settings(project, data) as mock_open, patch_load as mock_load:
197+
project.load_settings()
198+
199+
assert project.settings == {}
200+
201+
176202
def test_load_settings_valid_json_for_resource(project):
177203
plugin = object()
178204
data = json.dumps(
@@ -292,6 +318,59 @@ def test_load_settings_valid_json_for_hook(project):
292318
assert project.settings == {}
293319

294320

321+
def test_load_settings_valid_protocol_version(project):
322+
plugin = object()
323+
data = json.dumps(
324+
{
325+
"artifact_type": "MODULE",
326+
"typeName": MODULE_TYPE_NAME,
327+
"settings": {
328+
"protocolVersion": "2.0.0"
329+
}
330+
}
331+
)
332+
patch_load = patch(
333+
"rpdk.core.project.load_plugin", autospec=True, return_value=plugin
334+
)
335+
336+
with patch_settings(project, data) as mock_open, patch_load as mock_load:
337+
project.load_settings()
338+
339+
mock_open.assert_called_once_with("r", encoding="utf-8")
340+
mock_load.assert_not_called()
341+
assert project.type_info == ("AWS", "Color", "Red", "MODULE")
342+
assert project.type_name == MODULE_TYPE_NAME
343+
assert project.language is None
344+
assert project.artifact_type == ARTIFACT_TYPE_MODULE
345+
assert project._plugin is None
346+
assert project.settings == {"protocolVersion": "2.0.0"}
347+
348+
349+
def test_load_settings_missing_settings(project):
350+
plugin = object()
351+
data = json.dumps(
352+
{
353+
"artifact_type": "MODULE",
354+
"typeName": MODULE_TYPE_NAME,
355+
}
356+
)
357+
patch_load = patch(
358+
"rpdk.core.project.load_plugin", autospec=True, return_value=plugin
359+
)
360+
361+
with patch_settings(project, data) as mock_open, patch_load as mock_load:
362+
project.load_settings()
363+
364+
mock_open.assert_called_once_with("r", encoding="utf-8")
365+
mock_load.assert_not_called()
366+
assert project.type_info == ("AWS", "Color", "Red", "MODULE")
367+
assert project.type_name == MODULE_TYPE_NAME
368+
assert project.language is None
369+
assert project.artifact_type == ARTIFACT_TYPE_MODULE
370+
assert project._plugin is None
371+
assert project.settings == {}
372+
373+
295374
def test_load_schema_settings_not_loaded(project):
296375
with pytest.raises(InternalError):
297376
project.load_schema()

0 commit comments

Comments
 (0)