public async void DeveDispararUmaExceptionSeValorDoCreditoForMenorOuIgualAZero()
        {
            var useCase = new CreditarUseCase(contaRepository, usuarioAutenticado);

            await Assert.ThrowsAsync <ValorInvalidoException>(() =>
            {
                return(useCase.Execute(Guid.NewGuid(), 0));
            });

            await Assert.ThrowsAsync <ValorInvalidoException>(() =>
            {
                return(useCase.Execute(Guid.NewGuid(), -50));
            });
        }
        public async void DeveConseguirEfetuarUmCreditoEmUmaContaValida()
        {
            var useCase = new CreditarUseCase(contaRepository, usuarioAutenticado);

            var result = await useCase.Execute(contaFake.Id, 50);

            Assert.Equal(50, result.SaldoAtual);
        }
        public async void NaoDeveConseguirEfetuarUmCreditoEmUmaContaInexistente()
        {
            var useCase = new CreditarUseCase(contaRepository, usuarioAutenticado);

            await Assert.ThrowsAsync <ContaNaoEncontradaException>(() =>
            {
                return(useCase.Execute(Guid.NewGuid(), 50));
            });
        }
        public async void NaoDevePermitirEfetuarCreditoSeUsuarioLogadoNaoForDonoDaConta()
        {
            IUsuarioAutenticado outroUsuarioAutenticado = Substitute.For <IUsuarioAutenticado>();

            outroUsuarioAutenticado.Id.Returns(Guid.NewGuid());

            var useCase = new CreditarUseCase(contaRepository, outroUsuarioAutenticado);

            await Assert.ThrowsAsync <UsuarioLogadoNaoEhDonoDaContaException>(() =>
            {
                return(useCase.Execute(contaFake.Id, 50));
            });
        }