Example #1
0
        public void TestarCriacaoTransacaoFactory()
        {
            var transacaoFactory = new TransacaoFactory(100);
            var transacao        = transacaoFactory.Criar();

            Assert.Equal(100, transacao.Valor);
        }
 public TransacaoService(ContaLockService contaLockService, IDateTimeProvider dateTimeProvider, TransacaoFactory transacaoFactory, ContaRepositoryFactory contaRepositoryFactory, UsuarioRepositoryFactory usuarioRepositoryFactory, TransacaoRepositoryFactory transacaoRepositoryFactory, TransactionFactory transactionFactory)
 {
     this.contaLockService           = contaLockService;
     this.dateTimeProvider           = dateTimeProvider;
     this.transacaoFactory           = transacaoFactory;
     this.contaRepositoryFactory     = contaRepositoryFactory;
     this.usuarioRepositoryFactory   = usuarioRepositoryFactory;
     this.transacaoRepositoryFactory = transacaoRepositoryFactory;
     this.transactionFactory         = transactionFactory;
 }
Example #3
0
 // B. Details should depend on abstractions.
 public void ExecutarComandoTransacionado(string cmd, TransacaoFactory transacaoFactory)
 {
     // Violação: estamos dependendo de um tipo concreto (TransacaoFactory)
     // Dessa forma caso venha a existir uma implementação de ITransacaoFactory que tenha uma política de retry
     // não conseguimos invocar esse método utilizando essa nova implementação.
     using (var tx = transacaoFactory.AbrirTransacao(null))
     {
         tx.Commit();
     }
 }
Example #4
0
        public void TestarCriacaoItem(string cartao, double valorTransacao, double valorLojista, double valorAdquirente, string retorno)
        {
            var transacaoFactory = new TransacaoFactory(valorTransacao);
            var transacao        = transacaoFactory.Criar();

            transacao.CriarItem(_taxa, cartao, "01/23", "654", valorTransacao);

            Assert.Equal(valorAdquirente, transacao.Transacoes.FirstOrDefault().ValorAdquirente);
            Assert.Equal(valorLojista, transacao.Transacoes.FirstOrDefault().ValorLojista);
            Assert.Equal(retorno, transacao.Transacoes.FirstOrDefault().DescricaoRetorno);
        }
Example #5
0
        public IActionResult CalcularValoresListaCartoes([FromBody] List <DadosTransacaoViewModel> dadosTransacaoViewModel)
        {
            try
            {
                var valorTransacao = dadosTransacaoViewModel.Sum(x => x.ValorCartao);

                var transacaoFactory = new TransacaoFactory(valorTransacao);
                var transacao        = transacaoFactory.Criar();

                RegisterLog.Log(TipoLog.Info, "Criar item de transacao para cada informação de cartão da lista.");

                dadosTransacaoViewModel.ForEach(
                    x => {
                    var taxa = _taxaRepository.ObterPorAdquirenteBandeira(x.IdBandeira, x.IdAdquirente);

                    if (taxa == null)
                    {
                        throw new Exception("Taxa não encontrada.");
                    }

                    transacao.CriarItem(taxa,
                                        x.NumeroCartao,
                                        x.ValidadeCartao,
                                        x.CvvCartao,
                                        x.ValorCartao);
                }
                    );

                RegisterLog.Log(TipoLog.Info, "Gravação da Transação.");
                _transacaoRepository.Gravar(transacao);
                _uow.Commit();

                var retorno = new List <string>();

                foreach (var item in transacao.Transacoes)
                {
                    retorno.Add(item.DescricaoRetorno);
                }

                RegisterLog.Log(TipoLog.Info, "Sucesso ao calcular valores para mais de um cartão.");
                return(Ok(retorno));
            }catch (Exception e)
            {
                return(BadRequest(e.Message));
            }
        }
Example #6
0
        public IActionResult CalcularValores([FromBody] DadosTransacaoViewModel dadosTransacaoViewModel)
        {
            try
            {
                var valorTransacao = dadosTransacaoViewModel.ValorCartao;

                var transacaoFactory = new TransacaoFactory(valorTransacao);
                var transacao        = transacaoFactory.Criar();

                RegisterLog.Log(TipoLog.Info, "Consulta para Obter Taxa por Bandeira e Adquirente");
                var taxa = _taxaRepository.ObterPorAdquirenteBandeira(dadosTransacaoViewModel.IdBandeira, dadosTransacaoViewModel.IdAdquirente);

                if (taxa == null)
                {
                    throw new Exception("Taxa não encontrada");
                }

                transacao.CriarItem(taxa,
                                    dadosTransacaoViewModel.NumeroCartao,
                                    dadosTransacaoViewModel.ValidadeCartao,
                                    dadosTransacaoViewModel.CvvCartao,
                                    dadosTransacaoViewModel.ValorCartao);

                RegisterLog.Log(TipoLog.Info, "Gravação da Transação.");

                _transacaoRepository.Gravar(transacao);
                _uow.Commit();

                var itemTransacao = transacao.Transacoes.FirstOrDefault();

                RegisterLog.Log(TipoLog.Info, "Sucesso ao calcular valores.");
                return(Ok(itemTransacao.DescricaoRetorno));
            }
            catch (Exception e)
            {
                RegisterLog.Log(TipoLog.Error, "Erro na execução do cálculo de valores");
                return(BadRequest(e.Message));
            }
        }
Example #7
0
        public void CalcularTaxaUmCartao()
        {
            var bandeira   = _repositoryBandeira.Obter(b => b.Nome.Contains("Visa")).FirstOrDefault();
            var adquirente = _repositoryAdquirente.Obter(b => b.Nome.Contains("Cielo")).FirstOrDefault();

            var taxa = _repositoryTaxa.ObterPorAdquirenteBandeira(bandeira.Id, adquirente.Id);

            taxa.Percentual = 0.0007;

            #region =================== Implementação do teste ==========================

            var transacaoFactory = new TransacaoFactory(180);
            var transacao        = transacaoFactory.Criar();

            transacao.CriarItem(taxa,
                                "1234123412341234",
                                "09/22",
                                "782",
                                180);

            var itemTransacao = transacao.Transacoes.FirstOrDefault();

            Assert.Equal("Cartão: 1234123412341234; Valor Lojista: R$ 179,87; Valor Adquirente: R$ 0,13.",
                         itemTransacao.DescricaoRetorno);

            _repositoryTransacao.Gravar(transacao);
            _uow.Commit();

            // Verificando se gravou corretamente na base de dados
            var transacaoGravada = _repositoryTransacao.ObterPorId(transacao.Id);
            Assert.Equal(transacao.Id, transacaoGravada.Id);
            Assert.Equal(transacao.Valor, transacaoGravada.Valor);
            Assert.Equal(transacao.Data, transacaoGravada.Data);
            Assert.Equal(180, transacaoGravada.Transacoes.Sum(x => x.Valor));

            #endregion
        }
Example #8
0
        public void CalcularTaxaDoisCartao()
        {
            var bandeiraVisa    = _repositoryBandeira.Obter(b => b.Nome.Contains("Visa")).FirstOrDefault();
            var adquirenteCielo = _repositoryAdquirente.Obter(b => b.Nome.Contains("Cielo")).FirstOrDefault();

            var bandeiraElo      = _repositoryBandeira.Obter(b => b.Nome.Contains("Elo")).FirstOrDefault();
            var adquirenteGetNet = _repositoryAdquirente.Obter(b => b.Nome.Contains("GetNet")).FirstOrDefault();

            var taxa1 = _repositoryTaxa.ObterPorAdquirenteBandeira(bandeiraVisa.Id, adquirenteCielo.Id);

            taxa1.Percentual = 0.028;

            var taxa2 = _repositoryTaxa.ObterPorAdquirenteBandeira(bandeiraElo.Id, adquirenteGetNet.Id);

            taxa2.Percentual = 0.013;

            #region =================== Implementação do teste ==========================

            var transacaoFactory = new TransacaoFactory(250);
            var transacao        = transacaoFactory.Criar();

            transacao.CriarItem(taxa1,
                                "1234123412341234",
                                "09/22",
                                "782",
                                100);

            transacao.CriarItem(taxa2,
                                "9876987698769876",
                                "12/25",
                                "231",
                                150);

            Assert.Equal(2, transacao.Transacoes.Count);

            var i = 1;
            foreach (var item in transacao.Transacoes)
            {
                switch (i)
                {
                case 1:
                    Assert.Equal("Cartão: 1234123412341234; Valor Lojista: R$ 97,20; Valor Adquirente: R$ 2,80.",
                                 item.DescricaoRetorno);
                    break;

                case 2:
                    Assert.Equal("Cartão: 9876987698769876; Valor Lojista: R$ 148,05; Valor Adquirente: R$ 1,95.",
                                 item.DescricaoRetorno);
                    break;
                }
                i++;
            }
            #endregion

            _repositoryTransacao.Gravar(transacao);
            _uow.Commit();

            // Verificando se gravou corretamente na base de dados
            var transacaoGravada = _repositoryTransacao.ObterPorId(transacao.Id);
            Assert.Equal(transacao.Id, transacaoGravada.Id);
            Assert.Equal(transacao.Valor, transacaoGravada.Valor);
            Assert.Equal(transacao.Data, transacaoGravada.Data);
            Assert.Equal(250, transacaoGravada.Transacoes.Sum(x => x.Valor));
        }