diff --git a/moto/resourcegroupstaggingapi/models.py b/moto/resourcegroupstaggingapi/models.py index 97e0402c3..db2002a96 100644 --- a/moto/resourcegroupstaggingapi/models.py +++ b/moto/resourcegroupstaggingapi/models.py @@ -19,6 +19,7 @@ from moto.moto_api._internal import mock_random from moto.rds.models import RDSBackend, rds_backends from moto.redshift.models import RedshiftBackend, redshift_backends from moto.s3.models import S3Backend, s3_backends +from moto.sns.models import SNSBackend, sns_backends from moto.sqs.models import SQSBackend, sqs_backends from moto.utilities.tagging_service import TaggingService @@ -97,6 +98,10 @@ class ResourceGroupsTaggingAPIBackend(BaseBackend): def acm_backend(self) -> AWSCertificateManagerBackend: return acm_backends[self.account_id][self.region_name] + @property + def sns_backend(self) -> SNSBackend: + return sns_backends[self.account_id][self.region_name] + @property def sqs_backend(self) -> SQSBackend: return sqs_backends[self.account_id][self.region_name] @@ -492,6 +497,17 @@ class ResourceGroupsTaggingAPIBackend(BaseBackend): yield {"ResourceARN": f"{queue.queue_arn}", "Tags": tags} + # SNS + if not resource_type_filters or "sns" in resource_type_filters: + + for topic in self.sns_backend.topics.values(): + tags = format_tags(topic._tags) + if not tags or not tag_filter( + tags + ): # Skip if no tags, or invalid filter + continue + yield {"ResourceARN": f"{topic.arn}", "Tags": tags} + # VPC if ( not resource_type_filters diff --git a/tests/test_resourcegroupstaggingapi/test_resourcegroupstaggingapi.py b/tests/test_resourcegroupstaggingapi/test_resourcegroupstaggingapi.py index 515dedac8..4034621d9 100644 --- a/tests/test_resourcegroupstaggingapi/test_resourcegroupstaggingapi.py +++ b/tests/test_resourcegroupstaggingapi/test_resourcegroupstaggingapi.py @@ -745,6 +745,21 @@ def test_get_resources_sqs(): assert {"Key": "Test", "Value": "1"} in resp["ResourceTagMappingList"][0]["Tags"] +@mock_aws +def test_get_resources_sns(): + sns = boto3.client("sns", region_name="us-east-1") + + sns.create_topic(Name="test", Tags=[{"Key": "Shape", "Value": "Square"}]) + + rtapi = boto3.client("resourcegroupstaggingapi", region_name="us-east-1") + resp = rtapi.get_resources(ResourceTypeFilters=["sns"]) + + assert len(resp["ResourceTagMappingList"]) == 1 + assert {"Key": "Shape", "Value": "Square"} in resp["ResourceTagMappingList"][0][ + "Tags" + ] + + @mock_aws def test_tag_resources_for_unknown_service(): rtapi = boto3.client("resourcegroupstaggingapi", region_name="us-west-2")