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; }
// 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(); } }
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); }
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)); } }
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)); } }
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 }
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)); }