from __future__ import unicode_literals import boto3 from botocore.exceptions import ClientError from moto import mock_sns import sure # noqa from moto.core import ACCOUNT_ID @mock_sns def test_create_platform_application(): conn = boto3.client("sns", region_name="us-east-1") response = conn.create_platform_application( Name="my-application", Platform="APNS", Attributes={ "PlatformCredential": "platform_credential", "PlatformPrincipal": "platform_principal", }, ) application_arn = response["PlatformApplicationArn"] application_arn.should.equal( "arn:aws:sns:us-east-1:{}:app/APNS/my-application".format(ACCOUNT_ID) ) @mock_sns def test_get_platform_application_attributes(): conn = boto3.client("sns", region_name="us-east-1") platform_application = conn.create_platform_application( Name="my-application", Platform="APNS", Attributes={ "PlatformCredential": "platform_credential", "PlatformPrincipal": "platform_principal", }, ) arn = platform_application["PlatformApplicationArn"] attributes = conn.get_platform_application_attributes(PlatformApplicationArn=arn)[ "Attributes" ] attributes.should.equal( { "PlatformCredential": "platform_credential", "PlatformPrincipal": "platform_principal", } ) @mock_sns def test_get_missing_platform_application_attributes(): conn = boto3.client("sns", region_name="us-east-1") conn.get_platform_application_attributes.when.called_with( PlatformApplicationArn="a-fake-arn" ).should.throw(ClientError) @mock_sns def test_set_platform_application_attributes(): conn = boto3.client("sns", region_name="us-east-1") platform_application = conn.create_platform_application( Name="my-application", Platform="APNS", Attributes={ "PlatformCredential": "platform_credential", "PlatformPrincipal": "platform_principal", }, ) arn = platform_application["PlatformApplicationArn"] conn.set_platform_application_attributes( PlatformApplicationArn=arn, Attributes={"PlatformPrincipal": "other"} ) attributes = conn.get_platform_application_attributes(PlatformApplicationArn=arn)[ "Attributes" ] attributes.should.equal( {"PlatformCredential": "platform_credential", "PlatformPrincipal": "other"} ) @mock_sns def test_list_platform_applications(): conn = boto3.client("sns", region_name="us-east-1") conn.create_platform_application( Name="application1", Platform="APNS", Attributes={} ) conn.create_platform_application( Name="application2", Platform="APNS", Attributes={} ) applications_response = conn.list_platform_applications() applications = applications_response["PlatformApplications"] applications.should.have.length_of(2) @mock_sns def test_delete_platform_application(): conn = boto3.client("sns", region_name="us-east-1") conn.create_platform_application( Name="application1", Platform="APNS", Attributes={} ) conn.create_platform_application( Name="application2", Platform="APNS", Attributes={} ) applications_response = conn.list_platform_applications() applications = applications_response["PlatformApplications"] applications.should.have.length_of(2) application_arn = applications[0]["PlatformApplicationArn"] conn.delete_platform_application(PlatformApplicationArn=application_arn) applications_response = conn.list_platform_applications() applications = applications_response["PlatformApplications"] applications.should.have.length_of(1) @mock_sns def test_create_platform_endpoint(): conn = boto3.client("sns", region_name="us-east-1") platform_application = conn.create_platform_application( Name="my-application", Platform="APNS", Attributes={} ) application_arn = platform_application["PlatformApplicationArn"] endpoint = conn.create_platform_endpoint( PlatformApplicationArn=application_arn, Token="some_unique_id", CustomUserData="some user data", Attributes={"Enabled": "false"}, ) endpoint_arn = endpoint["EndpointArn"] endpoint_arn.should.contain( "arn:aws:sns:us-east-1:{}:endpoint/APNS/my-application/".format(ACCOUNT_ID) ) @mock_sns def test_create_duplicate_platform_endpoint(): conn = boto3.client("sns", region_name="us-east-1") platform_application = conn.create_platform_application( Name="my-application", Platform="APNS", Attributes={} ) application_arn = platform_application["PlatformApplicationArn"] endpoint = conn.create_platform_endpoint( PlatformApplicationArn=application_arn, Token="some_unique_id", CustomUserData="some user data", Attributes={"Enabled": "false"}, ) endpoint = conn.create_platform_endpoint.when.called_with( PlatformApplicationArn=application_arn, Token="some_unique_id", CustomUserData="some user data", Attributes={"Enabled": "false"}, ).should.throw(ClientError) @mock_sns def test_get_list_endpoints_by_platform_application(): conn = boto3.client("sns", region_name="us-east-1") platform_application = conn.create_platform_application( Name="my-application", Platform="APNS", Attributes={} ) application_arn = platform_application["PlatformApplicationArn"] endpoint = conn.create_platform_endpoint( PlatformApplicationArn=application_arn, Token="some_unique_id", CustomUserData="some user data", Attributes={"CustomUserData": "some data"}, ) endpoint_arn = endpoint["EndpointArn"] endpoint_list = conn.list_endpoints_by_platform_application( PlatformApplicationArn=application_arn )["Endpoints"] endpoint_list.should.have.length_of(1) endpoint_list[0]["Attributes"]["CustomUserData"].should.equal("some data") endpoint_list[0]["EndpointArn"].should.equal(endpoint_arn) @mock_sns def test_get_endpoint_attributes(): conn = boto3.client("sns", region_name="us-east-1") platform_application = conn.create_platform_application( Name="my-application", Platform="APNS", Attributes={} ) application_arn = platform_application["PlatformApplicationArn"] endpoint = conn.create_platform_endpoint( PlatformApplicationArn=application_arn, Token="some_unique_id", CustomUserData="some user data", Attributes={"Enabled": "false", "CustomUserData": "some data"}, ) endpoint_arn = endpoint["EndpointArn"] attributes = conn.get_endpoint_attributes(EndpointArn=endpoint_arn)["Attributes"] attributes.should.equal( {"Token": "some_unique_id", "Enabled": "false", "CustomUserData": "some data"} ) @mock_sns def test_get_missing_endpoint_attributes(): conn = boto3.client("sns", region_name="us-east-1") conn.get_endpoint_attributes.when.called_with( EndpointArn="a-fake-arn" ).should.throw(ClientError) @mock_sns def test_set_endpoint_attributes(): conn = boto3.client("sns", region_name="us-east-1") platform_application = conn.create_platform_application( Name="my-application", Platform="APNS", Attributes={} ) application_arn = platform_application["PlatformApplicationArn"] endpoint = conn.create_platform_endpoint( PlatformApplicationArn=application_arn, Token="some_unique_id", CustomUserData="some user data", Attributes={"Enabled": "false", "CustomUserData": "some data"}, ) endpoint_arn = endpoint["EndpointArn"] conn.set_endpoint_attributes( EndpointArn=endpoint_arn, Attributes={"CustomUserData": "other data"} ) attributes = conn.get_endpoint_attributes(EndpointArn=endpoint_arn)["Attributes"] attributes.should.equal( {"Token": "some_unique_id", "Enabled": "false", "CustomUserData": "other data"} ) @mock_sns def test_publish_to_platform_endpoint(): conn = boto3.client("sns", region_name="us-east-1") platform_application = conn.create_platform_application( Name="my-application", Platform="APNS", Attributes={} ) application_arn = platform_application["PlatformApplicationArn"] endpoint = conn.create_platform_endpoint( PlatformApplicationArn=application_arn, Token="some_unique_id", CustomUserData="some user data", Attributes={"Enabled": "true"}, ) endpoint_arn = endpoint["EndpointArn"] conn.publish( Message="some message", MessageStructure="json", TargetArn=endpoint_arn ) @mock_sns def test_publish_to_disabled_platform_endpoint(): conn = boto3.client("sns", region_name="us-east-1") platform_application = conn.create_platform_application( Name="my-application", Platform="APNS", Attributes={} ) application_arn = platform_application["PlatformApplicationArn"] endpoint = conn.create_platform_endpoint( PlatformApplicationArn=application_arn, Token="some_unique_id", CustomUserData="some user data", Attributes={"Enabled": "false"}, ) endpoint_arn = endpoint["EndpointArn"] conn.publish.when.called_with( Message="some message", MessageStructure="json", TargetArn=endpoint_arn ).should.throw(ClientError) @mock_sns def test_set_sms_attributes(): conn = boto3.client("sns", region_name="us-east-1") conn.set_sms_attributes( attributes={"DefaultSMSType": "Transactional", "test": "test"} ) response = conn.get_sms_attributes() response.should.contain("attributes") response["attributes"].should.contain("DefaultSMSType") response["attributes"].should.contain("test") response["attributes"]["DefaultSMSType"].should.equal("Transactional") response["attributes"]["test"].should.equal("test") @mock_sns def test_get_sms_attributes_filtered(): conn = boto3.client("sns", region_name="us-east-1") conn.set_sms_attributes( attributes={"DefaultSMSType": "Transactional", "test": "test"} ) response = conn.get_sms_attributes(attributes=["DefaultSMSType"]) response.should.contain("attributes") response["attributes"].should.contain("DefaultSMSType") response["attributes"].should_not.contain("test") response["attributes"]["DefaultSMSType"].should.equal("Transactional")