示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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)));
        }
示例#4
0
        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)));
        }