public void EhPrimeiroCashIn_Sim_DeveRetornarTrue()
        {
            // Arrange
            int contaId = 1;

            var cashInRepositorio = Substitute.For <ICashInRepositorio>();

            cashInRepositorio.ExisteCashInEfetivado(contaId).Returns(false);

            var cashInServico = new CashInServico(cashInRepositorio, null, null, null, null, null);

            // Act
            var resultado = cashInServico.EhPrimeiroCashIn(contaId);

            //Assert
            Assert.IsTrue(resultado);
        }
        public async Task Gerar_PrimeiroCashInValido_DeveRetornarOCashInComBonificacao()
        {
            // Arrange
            var conta = new Conta {
                Id = 1
            };
            var descricao = "Teste unitário.";

            CashIn cashInGerado = null;

            var cashInRepositorio = Substitute.For <ICashInRepositorio>();

            cashInRepositorio.Any(Arg.Any <Expression <Func <CashIn, bool> > >()).Returns(false);
            cashInRepositorio.When(x => x.Post(Arg.Any <CashIn>()))
            .Do(x => cashInGerado = x.Arg <CashIn>());

            var contaServico = Substitute.For <IContaServico>();

            contaServico.ObterConta(conta.Id).Returns(conta);

            var configuracaoServico = Substitute.For <IConfiguracaoServico>();

            configuracaoServico.ObterPercentualBonificacao().Returns(0.1m);

            var produtorClient  = Substitute.For <IProdutorOperacoesClient>();
            var operacaoServico = Substitute.For <IOperacaoServico>();

            var cashInServico = new CashInServico(cashInRepositorio, operacaoServico, contaServico, configuracaoServico, null, produtorClient);

            // Act
            await cashInServico.Gerar(new OperacaoUnariaDto(conta.Id, 10m, descricao));

            // Assert
            Assert.IsNotNull(cashInGerado);
            Assert.AreEqual(10m, cashInGerado.Valor);
            Assert.AreEqual(1m, cashInGerado.ValorBonificacao);
            Assert.AreEqual(descricao, cashInGerado.Descricao);
            Assert.AreEqual(conta.Id, cashInGerado.ContaId);
            Assert.AreNotEqual(default, cashInGerado.Data);