public void Given_A_Valid_Command_Should_Invoke_Send_Method_Once()
        {
            // Arrange
            var command = new SendContactUsEmailCommand
            {
                Name    = "bottom",
                Email   = "*****@*****.**",
                Message = "Flash the loo"
            };

            _emailService.Send(Arg.Any <EmailMessage>());

            // Act
            _sut.Handle(command, CancellationToken.None);

            // Assert
            _emailService.Received(1).Send(Arg.Any <EmailMessage>());
        }
        public void Given_A_Valid_Command_Should_Send_Email_Successfully()
        {
            // Arrange
            var command = new SendContactUsEmailCommand
            {
                Name    = "bottom",
                Email   = "*****@*****.**",
                Message = "Flash the loo"
            };

            _emailService.Send(Arg.Any <EmailMessage>());

            // Act
            Action act = () => _sut.Handle(command, CancellationToken.None);

            // Assert
            act.Should().NotThrow();
        }
        Given_A_Valid_Command_If_Connection_To_EmailServer_Fails_Should_Handle_ServiceNotConnected_Exception_And_Return_Errors()
        {
            // Arrange
            var command = new SendContactUsEmailCommand
            {
                Name    = "bottom",
                Email   = "*****@*****.**",
                Message = "Flash the loo"
            };

            _emailConfiguration.SmtpUsername.Returns("*****@*****.**");

            _emailService.When(x => _emailService.Send(Arg.Any <EmailMessage>()))
            .Do(x => throw new ServiceNotConnectedException());

            // Act
            var result = await _sut.Handle(command, CancellationToken.None);

            // Assert
            result.Errors.Should().NotBeEmpty();
        }