def test_get_overrides_good_path(base): overrides = empty_override() overrides["CREATE"]["/foo/bar"] = {} path = base / "overrides.json" with path.open("w", encoding="utf-8") as f: json.dump(overrides, f) assert get_overrides(base) == {"CREATE": {("foo", "bar"): {}}}
def test_get_overrides_invalid_pointer_skipped(base): overrides = empty_override() overrides["CREATE"]["#/foo/bar"] = None path = base / "overrides.json" with path.open("w", encoding="utf-8") as f: json.dump(overrides, f) assert get_overrides(base) == EMPTY_OVERRIDE
def test_submit_dry_run(project): project.type_name = TYPE_NAME project.runtime = RUNTIME project.language = LANGUAGE zip_path = project.root / "test.zip" with project.schema_path.open("w", encoding="utf-8") as f: f.write(CONTENTS_UTF8) with project.overrides_path.open("w", encoding="utf-8") as f: f.write(json.dumps(empty_override())) project.write_settings() patch_plugin = patch.object(project, "_plugin", spec=LanguagePlugin) patch_upload = patch.object(project, "_upload", autospec=True) patch_path = patch("rpdk.core.project.Path", return_value=zip_path) patch_temp = patch("rpdk.core.project.TemporaryFile", autospec=True) # fmt: off # these context managers can't be wrapped by black, but it removes the \ with patch_plugin as mock_plugin, patch_path as mock_path, \ patch_temp as mock_temp, patch_upload as mock_upload: project.submit(True, endpoint_url=ENDPOINT, region_name=REGION, role_arn=None, use_role=True, set_default=False) # fmt: on mock_temp.assert_not_called() mock_path.assert_called_once_with("{}.zip".format(project.hypenated_name)) mock_plugin.package.assert_called_once_with(project, ANY) mock_upload.assert_not_called() with zipfile.ZipFile(zip_path, mode="r") as zip_file: assert set(zip_file.namelist()) == { SCHEMA_UPLOAD_FILENAME, SETTINGS_FILENAME, OVERRIDES_FILENAME, } schema_contents = zip_file.read(SCHEMA_UPLOAD_FILENAME).decode("utf-8") assert schema_contents == CONTENTS_UTF8 settings = json.loads(zip_file.read(SETTINGS_FILENAME).decode("utf-8")) assert settings["runtime"] == RUNTIME overrides = json.loads( zip_file.read(OVERRIDES_FILENAME).decode("utf-8")) assert "CREATE" in overrides # https://docs.python.org/3/library/zipfile.html#zipfile.ZipFile.testzip assert zip_file.testzip() is None
from rpdk.core.contract.resource_client import ( ResourceClient, override_properties, prune_properties, prune_properties_from_model, prune_properties_if_not_exist_in_path, ) from rpdk.core.exceptions import InvalidProjectError from rpdk.core.test import ( DEFAULT_ENDPOINT, DEFAULT_FUNCTION, DEFAULT_REGION, empty_override, ) EMPTY_OVERRIDE = empty_override() ACCOUNT = "11111111" LOG = logging.getLogger(__name__) SCHEMA = { "properties": { "a": { "type": "number", "const": 1 }, "b": { "type": "number", "const": 2 }, "c": { "type": "number",
DEFAULT_ENDPOINT, DEFAULT_FUNCTION, DEFAULT_REGION, _validate_sam_args, empty_hook_override, empty_override, get_hook_overrides, get_inputs, get_marker_options, get_overrides, temporary_ini_file, ) from rpdk.core.utils.handler_utils import generate_handler_name RANDOM_INI = "pytest_SOYPKR.ini" EMPTY_RESOURCE_OVERRIDE = empty_override() EMPTY_HOOK_OVERRIDE = empty_hook_override() ROLE_ARN = "role_arn" CREDENTIALS = { "AccessKeyId": object(), "SecretAccessKey": object(), "SessionToken": object(), } RESOURCE_SCHEMA = { "handlers": {generate_handler_name(action): [] for action in Action} } HOOK_SCHEMA = { "handlers": { generate_handler_name(invoke_point): []