using Amazon.Runtime; using Amazon.SimpleNotificationService; using Amazon.SimpleNotificationService.Model; using AutoFixture; using Amazon.Sns.Wrapper.Implementations; using Amazon.Sns.Wrapper.Interfaces; using Moq; using System.Linq; using System.Threading.Tasks; using Xunit; namespace Amazon.Sns.Wrapper.Tests { public class NotificationSubscriptionTests { private Mock _fakeSnsClient; private Fixture _fixture; private INotificationSubscription _subscription = null; public NotificationSubscriptionTests() { _fixture = new Fixture(); _fakeSnsClient = new Mock(); } [Fact] public async Task UnSubscribeIsSuccessful() { //Setup Fake Response for AddPermissionAsync method var fakeResponse = GetResponseFixture(); _fakeSnsClient.Setup(p => p.UnsubscribeAsync(It.IsAny(), default)) .Returns(Task.FromResult(fakeResponse)); var response = await Subscription.UnsubscribeAsync(); Assert.True(response); } #region Attributes [Fact] public async Task AddAttributesIsSuccessful() { string fakeAttributeName = "fakeAttribute"; string fakeAttribute = "test"; //Setup Fake Response for AddPermissionAsync method var fakeResponse = GetResponseFixture(); _fakeSnsClient.Setup(p => p.SetSubscriptionAttributesAsync(It.IsAny(), default)) .Returns(Task.FromResult(fakeResponse)); var response = await Subscription.AddAtrributeAsync(fakeAttributeName, fakeAttribute); Assert.True(response); } [Fact] public async Task GetAttributesIsSuccessful() { //Setup Fake Response for AddPermissionAsync method var fakeResponse = GetResponseFixture(); _fakeSnsClient.Setup(p => p.GetSubscriptionAttributesAsync(It.IsAny(), default)) .Returns(Task.FromResult(fakeResponse)); var response = await Subscription.GetAttributesAsync(); Assert.Equal(response.Count, fakeResponse.Attributes.Count); } #endregion #region Private methods private INotificationSubscription Subscription { get { return GetNotificationSubscriptionAsync().Result; } } private async Task GetNotificationSubscriptionAsync() { if (_subscription != null) return _subscription; //var fakeSnsClient = new Mock(); string topicName = "fake-mytopic"; var getTopicResponse = _fixture.Create(); _fakeSnsClient.Setup(p => p.FindTopicAsync(It.IsAny())) .Returns(Task.FromResult(getTopicResponse)); var service = new NotificationService(_fakeSnsClient.Object); var topic = await service.GetTopicAsync(topicName); var fakeResponse = GetResponseFixture(); _fakeSnsClient.Setup(p => p.ListSubscriptionsByTopicAsync(It.IsAny(), default)) .Returns(Task.FromResult(fakeResponse)); var subscriptions = await topic.ListSubscriptionsAsync(); _subscription = subscriptions.FirstOrDefault(); return _subscription; } private T GetResponseFixture() where T : AmazonWebServiceResponse { var response = _fixture.Create(); response.HttpStatusCode = System.Net.HttpStatusCode.OK; return response; } #endregion } }