コード例 #1
0
        public async Task Deve_salvar_evento_de_alteracao_de_cartao_de_credito_do_pedido()
        {
            var          idDoPedido = _faker.Random.Int(0);
            const string expiracaoDoCartaoDeCredito  = "01/27";
            var          nomeDoDonoDoCartao          = _faker.Person.FirstName;
            var          numeroDoNovoCartaoDeCredito = _faker.Random.Int(0).ToString();
            var          cvvDoNovoCartao             = _faker.Random.Int(100, 999).ToString();
            var          cartaoDeCreditoDto          = new CartaoDeCreditoDto
            {
                Expiracao = expiracaoDoCartaoDeCredito,
                Nome      = nomeDoDonoDoCartao,
                CVV       = cvvDoNovoCartao,
                Numero    = numeroDoNovoCartaoDeCredito
            };
            var pedido = PedidoBuilder.Novo().Criar();

            _pedidoRepositorio.Setup(pr => pr.ObterPedidoPeloId(idDoPedido)).Returns(pedido);
            _pedidoRepositorio.Setup(pr => pr.Adicionar(It.IsAny <Pedido>()));


            await _atualizacaoDePedido.AtualizarCartaoDeCredito(idDoPedido, cartaoDeCreditoDto);

            _eventoRepositorio.Verify(er
                                      => er.Salvar(It.Is <AlterouCartaoDeCreditoDoPedidoEvento>(e
                                                                                                => e.IdDoPedido == pedido.Id && e.NomeDoUsuario == nomeDoDonoDoCartao && e.NumeroDoCartao == numeroDoNovoCartaoDeCredito)));
        }
コード例 #2
0
        public async Task Deve_notificar_servico_de_pagamento_sobre_atualizacao_do_cartao_de_credito()
        {
            var          idDoPedido = _faker.Random.Int(0);
            const string expiracaoDoCartaoDeCredito  = "02/27";
            var          nomeDoDonoDoCartao          = _faker.Person.FirstName;
            var          numeroDoNovoCartaoDeCredito = _faker.Random.Int(0).ToString();
            var          cvvDoNovoCartao             = _faker.Random.Int(100, 999).ToString();
            var          cartaoDeCreditoDto          = new CartaoDeCreditoDto
            {
                Expiracao = expiracaoDoCartaoDeCredito,
                Nome      = nomeDoDonoDoCartao,
                CVV       = cvvDoNovoCartao,
                Numero    = numeroDoNovoCartaoDeCredito
            };
            var pedido = PedidoBuilder.Novo().Criar();

            _pedidoRepositorio.Setup(pr => pr.ObterPedidoPeloId(idDoPedido)).Returns(pedido);
            _pedidoRepositorio.Setup(pr => pr.Adicionar(It.IsAny <Pedido>()));

            await _atualizacaoDePedido.AtualizarCartaoDeCredito(idDoPedido, cartaoDeCreditoDto);

            _mensageria.Verify(m => m.PublishAsync(
                                   It.Is <AlterouCartaoDeCreditoDoPedidoEvento>(a
                                                                                => a.IdDoPedido == pedido.Id && a.NomeDoUsuario == nomeDoDonoDoCartao && a.NumeroDoCartao == numeroDoNovoCartaoDeCredito)));
        }
コード例 #3
0
        public async Task Deve_salvar_um_evento_de_pedido_criado_ao_criar_pedido()
        {
            var produto            = _faker.Random.Word();
            var quantidade         = _faker.Random.Int(0);
            var valor              = _faker.Random.Decimal();
            var cartaoDeCreditoDto = new CartaoDeCreditoDto
            {
                Numero    = _faker.Random.Int(0).ToString(),
                Nome      = _faker.Person.FirstName,
                CVV       = _faker.Random.Int(100, 999).ToString(),
                Expiracao = "03/27"
            };
            var cartaoDeCredito = MapeadorDeCartaoDeCredito.Mapear(cartaoDeCreditoDto);
            var pedidoDto       = new PedidoDto
            {
                Produto            = produto,
                Quantidade         = quantidade,
                Valor              = valor,
                CartaoDeCreditoDto = cartaoDeCreditoDto
            };
            var pedidoCriado = PedidoBuilder.Novo().ComProduto(produto).ComQuantidade(quantidade).ComValor(valor)
                               .ComCartaoDeCredito(cartaoDeCredito).Criar();
            var eventoEsperado = new PedidoCriadoEvento(pedidoCriado.Id, pedidoCriado.CartaoDeCredito.Nome,
                                                        pedidoCriado.CartaoDeCredito.Numero, pedidoCriado.Produto, pedidoCriado.Valor);

            await _criacaoDePedido.Criar(pedidoDto);

            _eventoRepositorio.Verify(pr => pr.Salvar(It.Is <PedidoCriadoEvento>(evento
                                                                                 => evento.ToExpectedObject(ctx => ctx.Ignore(p => p.Id)).Matches(eventoEsperado))));
        }
コード例 #4
0
        public void Deve_mapear_pedido()
        {
            var produto            = _faker.Random.Word();
            var quantidade         = _faker.Random.Int(0);
            var valor              = _faker.Random.Decimal();
            var cartaoDeCreditoDto = new CartaoDeCreditoDto
            {
                Numero    = _faker.Random.Int(0).ToString(),
                Nome      = _faker.Person.FirstName,
                CVV       = _faker.Random.Int(100, 999).ToString(),
                Expiracao = "03/27"
            };
            var cartaoDeCredito = MapeadorDeCartaoDeCredito.Mapear(cartaoDeCreditoDto);
            var pedidoDto       = new PedidoDto
            {
                Produto            = produto,
                Quantidade         = quantidade,
                Valor              = valor,
                CartaoDeCreditoDto = cartaoDeCreditoDto
            };
            var pedidoEsperado = PedidoBuilder.Novo().ComProduto(produto).ComQuantidade(quantidade).ComValor(valor)
                                 .ComCartaoDeCredito(cartaoDeCredito).Criar();

            var pedidoObtido = MapeadorDePedido.Mapear(pedidoDto);

            pedidoEsperado.ToExpectedObject(ctx => ctx.Ignore(p => p.Id)).ShouldMatch(pedidoObtido);
        }
コード例 #5
0
        public async Task Deve_notificar_que_pedido_foi_criado()
        {
            var produto            = _faker.Random.Word();
            var quantidade         = _faker.Random.Int(0);
            var valor              = _faker.Random.Decimal();
            var cartaoDeCreditoDto = new CartaoDeCreditoDto
            {
                Numero    = _faker.Random.Int(0).ToString(),
                Nome      = _faker.Person.FirstName,
                CVV       = _faker.Random.Int(100, 999).ToString(),
                Expiracao = "03/27"
            };
            var pedidoDto = new PedidoDto
            {
                Produto            = produto,
                Quantidade         = quantidade,
                Valor              = valor,
                CartaoDeCreditoDto = cartaoDeCreditoDto
            };

            await _criacaoDePedido.Criar(pedidoDto);

            _mensageria.Verify(m => m.PublishAsync(
                                   It.Is <PedidoCriadoEvento>(p
                                                              => p.Produto == produto && p.Valor == valor && p.NomeDoUsuario == cartaoDeCreditoDto.Nome)));
        }
コード例 #6
0
        public void Deve_retornar_nulo_quando_dto_for_nulo()
        {
            CartaoDeCreditoDto cartaoDeCreditoDtoInvalido = null;

            var cartaoDeCredito = MapeadorDeCartaoDeCredito.Mapear(cartaoDeCreditoDtoInvalido);

            Assert.Null(cartaoDeCredito);
        }
コード例 #7
0
        public async Task <ActionResult> AtualizarCartaoDeCredito(int idDoPedido,
                                                                  [FromBody] CartaoDeCreditoDto novoCartaoDeCreditoDto)
        {
            await _atualizacaoDePedido.AtualizarCartaoDeCredito(idDoPedido, novoCartaoDeCreditoDto);

            await _unitOfWork.Commit();

            return(Ok(true));
        }
コード例 #8
0
        public async Task AtualizarCartaoDeCredito(int idDoPedido, CartaoDeCreditoDto cartaoDeCreditoDto)
        {
            var novoCartaoDeCredito = MapeadorDeCartaoDeCredito.Mapear(cartaoDeCreditoDto);
            var pedido = _pedidoRepositorio.ObterPedidoPeloId(idDoPedido);

            pedido.AtualizarCartaoDeCredito(novoCartaoDeCredito);
            await _pedidoRepositorio.AtualizarPedido(pedido);

            await NotificarAlteracaoDeCartaoDeCreditoAoServicoDePagamento(pedido, novoCartaoDeCredito);
        }
コード例 #9
0
        public void Deve_mapear_o_cartao_de_credito()
        {
            var          numero    = _faker.Random.Int(0).ToString();
            var          nome      = _faker.Person.FirstName;
            var          cvv       = _faker.Random.Int(100, 999).ToString();
            const string expiracao = "03/27";
            var          cartaoDeCreditoEsperado = CartaoDeCreditoBuilder.Novo().ComNome(nome).ComNumero(numero).ComCvv(cvv)
                                                   .ComExpiracao(expiracao).Criar();
            var cartaoDeCreditoDto = new CartaoDeCreditoDto
            {
                Numero    = numero,
                Nome      = nome,
                CVV       = cvv,
                Expiracao = expiracao,
            };

            var cartaoDeCreditoObtido = MapeadorDeCartaoDeCredito.Mapear(cartaoDeCreditoDto);

            cartaoDeCreditoEsperado.ToExpectedObject().ShouldMatch(cartaoDeCreditoObtido);
        }
コード例 #10
0
        public void Simular_alteracao_do_cartao_de_credito()
        {
            const int idDoPedido         = 5;
            var       cartaoDeCreditoDto = new CartaoDeCreditoDto
            {
                CVV       = "788",
                Expiracao = "03/28",
                Nome      = _nomeDoNovoDonoDoCartaoDeCredito,
                Numero    = _novoNumeroDoCartaoDeCredito
            };
            var cartaoDeCredito     = CartaoDeCreditoBuilder.Novo().ComNumero(_antigoNumeroDoCartaoDeCredito).ComNome(_nomeDoAntigoDonoDoCartaoDeCredito).Criar();
            var pedido              = PedidoBuilder.Novo().ComCartaoDeCredito(cartaoDeCredito).Criar();
            var pedidoRepositorio   = new Mock <IPedidoRepositorio>();
            var eventoRepositorio   = new Mock <IEventoRepositorio>();
            var mensageria          = new Mock <IBus>();
            var atualizacaoDePedido = new AtualizacaoDePedido(pedidoRepositorio.Object, eventoRepositorio.Object, mensageria.Object);

            pedidoRepositorio.Setup(pr => pr.ObterPedidoPeloId(It.IsAny <int>())).Returns(pedido);
            pedidoRepositorio.Setup(pr => pr.Adicionar(It.IsAny <Pedido>()));

            atualizacaoDePedido.AtualizarCartaoDeCredito(idDoPedido, cartaoDeCreditoDto);
        }
コード例 #11
0
 public static CartaoDeCredito Mapear(CartaoDeCreditoDto cartaoDeCreditoDto)
 {
     return(cartaoDeCreditoDto == null ?
            null :
            new CartaoDeCredito(cartaoDeCreditoDto.Numero, cartaoDeCreditoDto.Nome, cartaoDeCreditoDto.CVV, cartaoDeCreditoDto.Expiracao));
 }