using System; using System.Threading.Tasks; using LCU.API.Internal.MemberPreferencesApi.Services; using Microsoft.AspNetCore.Mvc.Infrastructure; using Microsoft.FeatureManagement; using Moq; using NUnit.Framework; using LCU.API.Internal.MemberPreferencesApi.Controllers; namespace LCU.API.Internal.MemberPreferencesApi.UnitTests.Controllers { public class MemberEmailControllerTest { private readonly MemberEmailController _controller; private readonly Mock _service = new Mock(); private readonly Mock _featureManager = new Mock(); public MemberEmailControllerTest() { _controller = new MemberEmailController(_service.Object, _featureManager.Object); } [Test] public async Task EmailSentSuccessfully_AllCases_CallsServiceUnifiedOptInEmailFailedToSend() { var userId = Guid.NewGuid().ToString(); var emailAddress = Guid.NewGuid().ToString(); await _controller.EmailSentSuccessfully(userId, emailAddress); _service.Verify(s => s.EmailSucceededToSend(userId, emailAddress), Times.Once); } [Test] public async Task EmailSentSuccessfully_KnownEmail_ReturnsOk() { var userId = Guid.NewGuid().ToString(); var emailAddress = Guid.NewGuid().ToString(); _service .Setup(s => s.EmailSucceededToSend(userId, emailAddress)) .ReturnsAsync(true); var result = await _controller.EmailSentSuccessfully(userId, emailAddress); Assert.AreEqual(200, (result as IStatusCodeActionResult)?.StatusCode); } [Test] public async Task EmailSentSuccessfully_UnknownEmail_ReturnsNotFound() { var userId = Guid.NewGuid().ToString(); var emailAddress = Guid.NewGuid().ToString(); _service .Setup(s => s.EmailFailedToSend(userId, emailAddress, true)) .ReturnsAsync(false); var result = await _controller.EmailSentSuccessfully(userId, emailAddress); Assert.AreEqual(404, (result as IStatusCodeActionResult)?.StatusCode); } [Test] public async Task EmailSendFailed_AllCases_CallsServiceEmailFailedToSend() { var userId = Guid.NewGuid().ToString(); var emailAddress = Guid.NewGuid().ToString(); _featureManager.Setup(f => f.IsEnabledAsync(It.IsAny())).ReturnsAsync(true); await _controller.EmailSendFailed(userId, emailAddress); _service.Verify(s => s.EmailFailedToSend(userId, emailAddress, true), Times.Once); } [Test] public async Task EmailSendFailed_KnownEmail_ReturnsOk() { var userId = Guid.NewGuid().ToString(); var emailAddress = Guid.NewGuid().ToString(); _featureManager.Setup(f => f.IsEnabledAsync(It.IsAny())).ReturnsAsync(true); _service .Setup(s => s.EmailFailedToSend(userId, emailAddress, true)) .ReturnsAsync(true); var result = await _controller.EmailSendFailed(userId, emailAddress); Assert.AreEqual(200, (result as IStatusCodeActionResult)?.StatusCode); } [Test] public async Task EmailSendFailed_UnknownEmail_ReturnsNotFound() { var userId = Guid.NewGuid().ToString(); var emailAddress = Guid.NewGuid().ToString(); _service .Setup(s => s.EmailFailedToSend(userId, emailAddress, true)) .ReturnsAsync(false); var result = await _controller.EmailSendFailed(userId, emailAddress); Assert.AreEqual(404, (result as IStatusCodeActionResult)?.StatusCode); } } }