From 49f5a48f71ef1db729b67949b4de108652601310 Mon Sep 17 00:00:00 2001 From: JoshuaLicense Date: Tue, 5 Sep 2023 22:04:44 +0100 Subject: [PATCH] fix(secretsmanager): fix update of no-value initial secret (#6771) --- moto/secretsmanager/models.py | 9 ++++++--- tests/test_secretsmanager/test_secretsmanager.py | 16 ++++++++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/moto/secretsmanager/models.py b/moto/secretsmanager/models.py index 567b2ca56..a60ba1cd4 100644 --- a/moto/secretsmanager/models.py +++ b/moto/secretsmanager/models.py @@ -126,9 +126,12 @@ class FakeSecret: if "AWSPREVIOUS" in old_version["version_stages"]: old_version["version_stages"].remove("AWSPREVIOUS") - # set old AWSCURRENT secret to AWSPREVIOUS - previous_current_version_id = self.default_version_id - self.versions[previous_current_version_id]["version_stages"] = ["AWSPREVIOUS"] # type: ignore + if self.default_version_id: + # set old AWSCURRENT secret to AWSPREVIOUS + previous_current_version_id = self.default_version_id + self.versions[previous_current_version_id]["version_stages"] = [ + "AWSPREVIOUS" + ] self.versions[version_id] = secret_version self.default_version_id = version_id diff --git a/tests/test_secretsmanager/test_secretsmanager.py b/tests/test_secretsmanager/test_secretsmanager.py index b57a87dd8..a06d26e2d 100644 --- a/tests/test_secretsmanager/test_secretsmanager.py +++ b/tests/test_secretsmanager/test_secretsmanager.py @@ -292,6 +292,22 @@ def test_create_secret_without_value(): assert set(deleted.keys()) == {"ARN", "Name", "DeletionDate", "ResponseMetadata"} +@mock_secretsmanager +def test_create_secret_that_has_no_value_and_then_update(): + conn = boto3.client("secretsmanager", region_name="us-west-2") + + conn.create_secret(Name="secret-no-value") + + conn.update_secret( + SecretId="secret-no-value", + SecretString="barsecret", + Description="desc", + ) + + secret = conn.get_secret_value(SecretId="secret-no-value") + assert secret["SecretString"] == "barsecret" + + @mock_secretsmanager def test_update_secret_without_value(): conn = boto3.client("secretsmanager", region_name="us-east-2")