private async Task NotificarAlteracaoDeCartaoDeCreditoAoServicoDePagamento(Pedido pedido, CartaoDeCredito novoCartaoDeCredito) { var eventoDeAlteracaoDeCartaoDeCreditoDoPedido = new AlterouCartaoDeCreditoDoPedidoEvento(pedido.Id, novoCartaoDeCredito.Nome, novoCartaoDeCredito.Numero, pedido.Produto, pedido.Valor); await _eventoRepositorio.Salvar(eventoDeAlteracaoDeCartaoDeCreditoDoPedido); await _mensageria.PublishAsync(eventoDeAlteracaoDeCartaoDeCreditoDoPedido); }
public async Task ReprocessarPagamentoAsync(AlterouCartaoDeCreditoDoPedidoEvento alterouCartaoDeCreditoDoPedidoEvento) { var pagamento = await _pagamentoRepositorio.ObterPeloIdDoPedido(alterouCartaoDeCreditoDoPedidoEvento.IdDoPedido); pagamento.AlterarCartaoDeCredito(alterouCartaoDeCreditoDoPedidoEvento.NumeroDoCartao, alterouCartaoDeCreditoDoPedidoEvento.NomeDoUsuario); ValidarCartaoDeCredito(pagamento, alterouCartaoDeCreditoDoPedidoEvento.Produto, alterouCartaoDeCreditoDoPedidoEvento.Valor); _pagamentoRepositorio.AtualizarPagamento(pagamento); }
public async Task Deve_enviar_evento_de_pagamento_negado_ao_negar_o_pagamento_de_um_cartao_no_reprocessamento_de_um_pagamento(string numeroDeCartaoDeCreditoInvalido) { var id = _faker.Random.Int(0); var nomeDoCartao = _faker.Person.FullName; var produto = _faker.Random.String2(9); var valor = _faker.Random.Decimal(); var alterouCartaoDeCreditoDoPedidoEvento = new AlterouCartaoDeCreditoDoPedidoEvento(id, nomeDoCartao, numeroDeCartaoDeCreditoInvalido, produto, valor); var pagamento = PagamentoBuilder.Novo().Criar(); _pagamentoRepositorio.Setup(pr => pr.ObterPeloIdDoPedido(id)).ReturnsAsync(pagamento); _pagamentoRepositorio.Setup(pr => pr.AtualizarPagamento(It.IsAny <Pagamento>())); _mensageria.Setup(m => m.PublishAsync(It.IsAny <PagamentoRecusadoEvento>())); await _processamentoDePagamento.ReprocessarPagamentoAsync(alterouCartaoDeCreditoDoPedidoEvento); _mensageria.Verify(m => m.PublishAsync(It.Is <PagamentoRecusadoEvento>(p => p.IdDoPedido == pagamento.IdDoPedido))); }
public async Task Deve_atualizar_informacoes_do_cartao_de_credito_ao_reprocessar_pagamento() { var id = _faker.Random.Int(0); var nomeDoCartao = _faker.Person.FullName; var numeroDeCartao = _faker.Random.Int(0).ToString(); var produto = _faker.Random.String2(9); var valor = _faker.Random.Decimal(); var alterouCartaoDeCreditoDoPedidoEvento = new AlterouCartaoDeCreditoDoPedidoEvento(id, nomeDoCartao, numeroDeCartao, produto, valor); var pagamento = PagamentoBuilder.Novo().Criar(); _pagamentoRepositorio.Setup(pr => pr.ObterPeloIdDoPedido(id)).ReturnsAsync(pagamento); _pagamentoRepositorio.Setup(pr => pr.AtualizarPagamento(It.IsAny <Pagamento>())); await _processamentoDePagamento.ReprocessarPagamentoAsync(alterouCartaoDeCreditoDoPedidoEvento); _pagamentoRepositorio.Verify(pr => pr.AtualizarPagamento(It.Is <Pagamento>(p => p.NumeroDoCartaoDeCredito == numeroDeCartao && p.NomeNoCartaoDeCredito == nomeDoCartao))); }