public async Task Execute_ReturnsBadRequest_WhenEmailRequestHasNoTo() { var deserializerMock = new Mock <IRequestDeserializer>(); var mediatorMock = new Mock <IMediator>(); var configurationMock = new Mock <IConfiguration>(); var emailRequestResponse = "Successfully Send Email"; var fromAddress = "*****@*****.**"; var fromName = "from name"; var requestDTO = new EmailRequestDTO { Subject = "Subject", PlainTextContent = "Email Content" }; deserializerMock.Setup(d => d.Deserialize <EmailRequestDTO>(It.IsAny <HttpRequest>())).ReturnsAsync(requestDTO); mediatorMock.Setup(m => m.Send(It.IsAny <EmailRequest>(), It.IsAny <CancellationToken>())).ReturnsAsync(emailRequestResponse).Verifiable(); configurationMock.Setup(c => c.FromAddress).Returns(fromAddress); configurationMock.Setup(c => c.FromName).Returns(fromName); var sut = new EmailController(deserializerMock.Object, mediatorMock.Object, configurationMock.Object); Func <EmailRequest, bool> matchesRequest = request => request.ToAddress.Address == requestDTO.To && request.PlainTextContent == requestDTO.PlainTextContent && request.Subject == requestDTO.Subject; mediatorMock.Verify(m => m.Send(It.Is <EmailRequest>(r => matchesRequest(r)), It.IsAny <CancellationToken>()), Times.Never()); await Assert.ThrowsExceptionAsync <BadRequestException>(() => sut.Execute(requestDTO)); }
public async Task Execute_CreatesEmailRequest_FromHttpRequest() { var deserializerMock = new Mock <IRequestDeserializer>(); var mediatorMock = new Mock <IMediator>(); var configurationMock = new Mock <IConfiguration>(); var emailRequestResponse = "Successfully Send Email"; var fromAddress = "*****@*****.**"; var fromName = "from name"; var requestDTO = new EmailRequestDTO { To = "*****@*****.**", Subject = "Subject", PlainTextContent = "Email Content" }; deserializerMock.Setup(d => d.Deserialize <EmailRequestDTO>(It.IsAny <HttpRequest>())).ReturnsAsync(requestDTO); mediatorMock.Setup(m => m.Send(It.IsAny <EmailRequest>(), It.IsAny <CancellationToken>())).ReturnsAsync(emailRequestResponse).Verifiable(); configurationMock.Setup(c => c.FromAddress).Returns(fromAddress); configurationMock.Setup(c => c.FromName).Returns(fromName); var sut = new EmailController(deserializerMock.Object, mediatorMock.Object, configurationMock.Object); Func <EmailRequest, bool> matchesRequest = request => request.ToAddress.Address == requestDTO.To && request.PlainTextContent == requestDTO.PlainTextContent && request.Subject == requestDTO.Subject; var result = await sut.Execute(requestDTO); mediatorMock.Verify(m => m.Send(It.Is <EmailRequest>(r => matchesRequest(r)), It.IsAny <CancellationToken>()), Times.Once()); Assert.AreEqual(emailRequestResponse, result.Response); }
public async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req, ILogger log) { var requestDTO = await _requestDeserializer.Deserialize <EmailRequestDTO>(req); try { var response = await _controller.Execute(requestDTO); return(new OkObjectResult(response)); } catch (BadRequestException) { return(new BadRequestObjectResult("Bad email request")); } }
public async Task Execute_ReturnsArgumentNullException_WhenFromAddressIsNull() { var deserializerMock = new Mock <IRequestDeserializer>(); var mediatorMock = new Mock <IMediator>(); var configurationMock = new Mock <IConfiguration>(); var emailRequestResponse = "Successfully Send Email"; var requestDTO = new EmailRequestDTO { Subject = "Subject", To = "*****@*****.**", PlainTextContent = "Email Content" }; deserializerMock.Setup(d => d.Deserialize <EmailRequestDTO>(It.IsAny <HttpRequest>())).ReturnsAsync(requestDTO); mediatorMock.Setup(m => m.Send(It.IsAny <EmailRequest>(), It.IsAny <CancellationToken>())).ReturnsAsync(emailRequestResponse).Verifiable(); configurationMock.Setup(c => c.FromAddress).Returns(null as string); configurationMock.Setup(c => c.FromName).Returns("From Name"); var sut = new EmailController(deserializerMock.Object, mediatorMock.Object, configurationMock.Object); await Assert.ThrowsExceptionAsync <ArgumentNullException>(() => sut.Execute(requestDTO)); }