events: delete_rule implementation update (#5056)

This commit is contained in:
rangerthegood 2022-04-24 06:03:28 -04:00 committed by GitHub
parent 5efa5b66bf
commit a20633b577
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 9 deletions

View File

@ -1045,7 +1045,11 @@ class EventsBackend(BaseBackend):
return rule return rule
def delete_rule(self, name): def delete_rule(self, name):
arn = self.rules.get(name).arn rule = self.rules.get(name)
if len(rule.targets) > 0:
raise ValidationException("Rule can't be deleted since it has targets.")
arn = rule.arn
if self.tagger.has_tags(arn): if self.tagger.has_tags(arn):
self.tagger.delete_all_tags_for_resource(arn) self.tagger.delete_all_tags_for_resource(arn)
return self.rules.pop(name) is not None return self.rules.pop(name) is not None

View File

@ -62,7 +62,7 @@ def get_random_rule():
return RULES[random.randint(0, len(RULES) - 1)] return RULES[random.randint(0, len(RULES) - 1)]
def generate_environment(): def generate_environment(add_targets=True):
client = boto3.client("events", "us-west-2") client = boto3.client("events", "us-west-2")
for rule in RULES: for rule in RULES:
@ -73,12 +73,13 @@ def generate_environment():
Tags=rule.get("Tags", []), Tags=rule.get("Tags", []),
) )
targets = [] if add_targets:
for target in TARGETS: targets = []
if rule["Name"] in TARGETS[target].get("Rules"): for target in TARGETS:
targets.append({"Id": target, "Arn": TARGETS[target]["Arn"]}) if rule["Name"] in TARGETS[target].get("Rules"):
targets.append({"Id": target, "Arn": TARGETS[target]["Arn"]})
client.put_targets(Rule=rule["Name"], Targets=targets) client.put_targets(Rule=rule["Name"], Targets=targets)
return client return client
@ -298,13 +299,32 @@ def test_list_rule_names_by_target_using_limit():
@mock_events @mock_events
def test_delete_rule(): def test_delete_rule():
client = generate_environment() client = generate_environment(add_targets=False)
client.delete_rule(Name=RULES[0]["Name"]) client.delete_rule(Name=RULES[0]["Name"])
rules = client.list_rules() rules = client.list_rules()
assert len(rules["Rules"]) == len(RULES) - 1 assert len(rules["Rules"]) == len(RULES) - 1
@mock_events
def test_delete_rule_with_targets():
# given
client = generate_environment()
# when
with pytest.raises(ClientError) as e:
client.delete_rule(Name=RULES[0]["Name"])
# then
ex = e.value
ex.operation_name.should.equal("DeleteRule")
ex.response["ResponseMetadata"]["HTTPStatusCode"].should.equal(400)
ex.response["Error"]["Code"].should.contain("ValidationException")
ex.response["Error"]["Message"].should.equal(
"Rule can't be deleted since it has targets."
)
@mock_events @mock_events
def test_list_targets_by_rule(): def test_list_targets_by_rule():
rule_name = get_random_rule()["Name"] rule_name = get_random_rule()["Name"]
@ -940,7 +960,7 @@ def test_create_rule_with_tags():
@mock_events @mock_events
def test_delete_rule_with_tags(): def test_delete_rule_with_tags():
client = generate_environment() client = generate_environment(add_targets=False)
rule_name = "test2" rule_name = "test2"
rule_arn = client.describe_rule(Name=rule_name).get("Arn") rule_arn = client.describe_rule(Name=rule_name).get("Arn")
client.delete_rule(Name=rule_name) client.delete_rule(Name=rule_name)