public async Task Post_WhenCalled_Should_Return_OkResult()
        {
            // Arrange
            var contactMessageInputModel = new ContactMessageInputModel {
                Email = "*****@*****.**", Message = "Wash hands", Name = "Tissue"
            };

            _mediator.Send(Arg.Any <IRequest <CommandResult> >()).Returns(new CommandResult {
                IsSuccessful = true, Data = "success"
            });

            // Act
            var result = await _sut.Post(contactMessageInputModel);

            // Assert
            result.Should().BeOfType <OkResult>();
        }
        public async Task <IActionResult> Post([FromBody] ContactMessageInputModel model)
        {
            if (ModelState.IsValid)
            {
                var result = await _mediator.Send(new SendContactUsEmailCommand
                {
                    Name    = model.Name,
                    Email   = model.Email,
                    Message = model.Message
                });

                if (result.IsSuccessful)
                {
                    return(Ok());
                }

                return(BadRequest(result.Errors));
            }

            return(BadRequest(ModelState.Errors()));
        }
        public async Task Post_WhenCalled_Should_Return_BadRequestResult_With_SendEmail_Validation_Error_List()
        {
            // Arrange
            var expected = "Unable to send message.";
            var contactMessageInputModel = new ContactMessageInputModel {
                Email = "*****@*****.**", Message = "Wash hands", Name = "Tissue"
            };

            _mediator.Send(Arg.Any <IRequest <CommandResult> >()).Returns(new CommandResult {
                IsSuccessful = false, Data = "failed", Errors = new List <string> {
                    "Unable to send message."
                }
            });

            // Act
            var result = await _sut.Post(contactMessageInputModel) as BadRequestObjectResult;

            // Assert
            result.Should().NotBeNull();
            var errors = result?.Value as IEnumerable <string>;

            errors.Should().ContainSingle(expected);
        }
        public async Task Post_WhenCalled_Should_Return_BadRequestResult_With_ModelState_Error_List()
        {
            // Arrange
            var expected = "Email is required";
            var contactMessageInputModel = new ContactMessageInputModel {
                Email = null, Message = "Wash hands", Name = "Tissue"
            };

            _sut.ModelState.AddModelError("Email", "Email is required");

            _mediator.Send(Arg.Any <IRequest <CommandResult> >()).Returns(new CommandResult {
                IsSuccessful = true, Data = "success"
            });

            // Act
            var result = await _sut.Post(contactMessageInputModel) as BadRequestObjectResult;

            // Assert
            result.Should().NotBeNull();
            var errors = result?.Value as IEnumerable <string>;

            errors.Should().ContainSingle(expected);
        }