コード例 #1
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))));
        }
コード例 #2
0
        public void Deve_realizar_uma_busca_nos_lotes_pelo_nome_da_cerveja()
        {
            var primeiroPedido         = PedidoBuilder.Novo().Criar();
            var cervejaDoSegundoPedido = CervejaBuilder.Novo().ComNome("Budweiser").ComPreco(6.75).Criar();
            var segundoPedido          = PedidoBuilder.Novo().ComCerveja(cervejaDoSegundoPedido).Criar();

            _pedidos.Add(primeiroPedido);
            _pedidos.Add(segundoPedido);
            var comanda = ComandaBuilder.Novo().ComPedidos(_pedidos).Criar();
            var lotesQueContemPrimeiraCerveja = new List <Lote>()
            {
                new Lote(primeiroPedido.Cerveja, 7),
                new Lote(primeiroPedido.Cerveja, 3)
            };
            var lotesQueContemSegundaCerveja = new List <Lote>()
            {
                new Lote(segundoPedido.Cerveja, 7),
                new Lote(segundoPedido.Cerveja, 3)
            };

            _repositorioDeLotes.Setup(repositorio => repositorio.ObterLotesPeloNomeDaCerveja(primeiroPedido.Cerveja.Nome))
            .Returns(lotesQueContemPrimeiraCerveja);
            _repositorioDeLotes.Setup(repositorio => repositorio.ObterLotesPeloNomeDaCerveja(segundoPedido.Cerveja.Nome))
            .Returns(lotesQueContemSegundaCerveja);

            _realizacaoDaVenda.Vender(comanda);

            _repositorioDeLotes.Verify(repositorio =>
                                       repositorio.ObterLotesPeloNomeDaCerveja(It.Is <string>(nomeDaCerveja => nomeDaCerveja == primeiroPedido.Cerveja.Nome)));
            _repositorioDeLotes.Verify(repositorio =>
                                       repositorio.ObterLotesPeloNomeDaCerveja(It.Is <string>(nomeDaCerveja => nomeDaCerveja == segundoPedido.Cerveja.Nome)));
        }
コード例 #3
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);
        }
コード例 #4
0
        public void Nao_deve_permitir_quantidade_invalida()
        {
            const int quantidadeInvalida = -6;

            Action acao = () => PedidoBuilder.Novo().ComQuantidade(quantidadeInvalida).Criar();

            Assert.Throws <ExcecaoDeDominio>(acao).ComMensagem(Resource.QuantidadeInvalida);
        }
コード例 #5
0
        public void Deve_aprovar_pagamento_do_pedido()
        {
            var pedido = PedidoBuilder.Novo().Criar();

            pedido.AprovarPagamento();

            Assert.Equal(SituacaoDoPedido.PagamentoAprovado, pedido.Situacao);
        }
コード例 #6
0
        public void Nao_deve_alterar_para_uma_quantidade_invalida()
        {
            const int quantidadeInvalida = -6;
            var       pedido             = PedidoBuilder.Novo().Criar();

            Action acao = () => pedido.AlterarQuantidade(quantidadeInvalida);

            Assert.Throws <ExcecaoDeDominio>(acao).ComMensagem(Resource.QuantidadeInvalida);
        }
コード例 #7
0
        public void Deve_alterar_a_quantidade()
        {
            const int quantidadeEsperada = 5;
            var       pedido             = PedidoBuilder.Novo().Criar();

            pedido.AlterarQuantidade(quantidadeEsperada);

            Assert.Equal(quantidadeEsperada, pedido.Quantidade);
        }
コード例 #8
0
        public async Task CreatePedido_Item_Maior_10_Should_Return_BadRequest()
        {
            //Arrange
            var request = await PedidoBuilder.CreatePedidoItemMaior10Request();

            var uri = $"{URL}/create";

            //Act
            var response = await _client.PostAsync(uri, ContentHelper.GetStringContent(request));

            // Assert
            response.StatusCode.Should().Be(HttpStatusCode.BadRequest);
        }
コード例 #9
0
        public async Task CreatePedido_Should_Return_Ok()
        {
            //Arrange
            var request = await PedidoBuilder.CreatePedidoClienteCadastradoRequest();

            var uri = $"{URL}/create";

            //Act
            var response = await _client.PostAsync(uri, ContentHelper.GetStringContent(request));

            // Assert
            response.EnsureSuccessStatusCode();
        }
コード例 #10
0
        public void Nao_deve_realizar_uma_venda_caso_nao_tenha_quantidade_necessaria()
        {
            var pedido = PedidoBuilder.Novo().ComQuantidade(6).Criar();

            _lotes.Add(new Lote(pedido.Cerveja, 2));
            _lotes.Add(new Lote(pedido.Cerveja, 3));
            _repositorioDeLotes.Setup(repositorio => repositorio.ObterLotesPeloNomeDaCerveja(pedido.Cerveja.Nome))
            .Returns(_lotes);

            Action acao = () => _realizacaoDaVenda.ValidarVenda(_lotes, pedido);

            Assert.Throws <ExcecaoDeDominio>(acao).ComMensagem(Resource.QuantidadeIndisponivel);
        }
コード例 #11
0
        public async Task GetAllPedido_Should_Return_Ok()
        {
            //Arrange
            var Pedidos = PedidoBuilder.GetPedidosTest();

            //Act
            _mock.Setup(x => x.GetAll()).Returns(Pedidos);
            var result = await _controller.GetAll() as OkObjectResult;

            //Assert
            result.Should().NotBeNull("Result is null.");
            result.Value.Should().BeOfType <List <PedidoModel> >($"Return type is not List<PedidoModel>");
            result.StatusCode.Should().Be(200, $"Status Code {result.StatusCode}");
        }
コード例 #12
0
        private Pedido EnsablarPedido(string[] datos)
        {
            PedidoBuilder constructorPaqueteria = _verificadorPaqueteria.VerificarPaqueteria(datos[3]);
            Pedido        pedido = new Pedido()
            {
                Origen      = datos[0],
                Destino     = datos[1],
                Distancia   = Convert.ToDouble(datos[2]),
                Paqueteria  = constructorPaqueteria.GetPaqueteria(),
                FechaPedido = Convert.ToDateTime(datos[5])
            };

            PedidoAssemble pedidoAssemble = new PedidoAssemble(constructorPaqueteria);

            pedidoAssemble.Assemble(pedido);
            return(pedido);
        }
コード例 #13
0
        public void Deve_atualizar_o_lote_com_a_nova_quantidade_no_repositorio()
        {
            var pedido = PedidoBuilder.Novo().ComQuantidade(7).Criar();

            _pedidos.Add(pedido);
            var comanda      = ComandaBuilder.Novo().ComPedidos(_pedidos).Criar();
            var primeiroLote = new Lote(pedido.Cerveja, 8);

            _lotes.Add(primeiroLote);
            _repositorioDeLotes.Setup(repositorio => repositorio.ObterLotesPeloNomeDaCerveja(pedido.Cerveja.Nome))
            .Returns(_lotes);

            _realizacaoDaVenda.Vender(comanda);

            _repositorioDeLotes.Verify(repositorio => repositorio.AtualizarQuantidade
                                           (It.Is <string>(loteId => loteId == primeiroLote.Identificador),
                                           It.Is <int>(loteQuantidade => loteQuantidade == primeiroLote.Quantidade)));
        }
コード例 #14
0
        public void Deve_diminuir_quantidade_do_lote_caso_o_do_pedido_for_menor()
        {
            const int quantidadeEsperada = 1;
            var       pedido             = PedidoBuilder.Novo().ComQuantidade(7).Criar();

            _pedidos.Add(pedido);
            var primeiroLote = new Lote(pedido.Cerveja, 8);

            _lotes.Add(primeiroLote);
            var comanda = ComandaBuilder.Novo().ComPedidos(_pedidos).Criar();

            _repositorioDeLotes.Setup(repositorio => repositorio.ObterLotesPeloNomeDaCerveja(pedido.Cerveja.Nome))
            .Returns(_lotes);

            _realizacaoDaVenda.Vender(comanda);

            Assert.Equal(quantidadeEsperada, primeiroLote.Quantidade);
        }
コード例 #15
0
        public async Task CreatePedidoClienteNovo_Should_Return_Ok()
        {
            //Arrange
            var request = await PedidoBuilder.CreatePedidoNovoClienteRequest();

            var response = Task.Run(() => new CreatePedidoResponse());

            //Act
            response.Result.SetSucess(true);
            response.Result.CodPedido = "CP00000-01";
            _mock.Setup(x => x.Create(request)).Returns(response);
            var result = await _controller.Create(request) as OkObjectResult;

            //Assert
            _mock.Verify(x => x.Create(It.IsAny <CreatePedidoRequest>()), Times.Once);
            result.Should().NotBeNull("Return is null");
            result.Should().BeOfType <OkObjectResult>("Return type is not valid.");
            result.StatusCode.Should().Be(200, $"Status Code {result.StatusCode}");
        }
コード例 #16
0
        public async Task Deve_aprovar_pagamento()
        {
            var idDoPedido                  = _faker.Random.Int(0);
            var nomeDoDonoDoCartao          = _faker.Person.FirstName;
            var numeroDoNovoCartaoDeCredito = _faker.Random.Int(0).ToString();
            var produto = _faker.Random.Word();
            var valor   = _faker.Random.Decimal();
            var pedido  = PedidoBuilder.Novo().Criar();
            var pagamentoAprovadoEvento = new PagamentoAprovadoEvento(idDoPedido, nomeDoDonoDoCartao, numeroDoNovoCartaoDeCredito, produto, valor);

            _pedidoRepositorio.Setup(pr => pr.ObterPedidoPeloId(idDoPedido)).Returns(pedido);
            _pedidoRepositorio.Setup(pr => pr.AtualizarPedido(It.IsAny <Pedido>()));
            _eventoRepositorio.Setup(er => er.Salvar(It.IsAny <PagamentoAprovadoEvento>()));

            await _atualizacaoDePedido.AprovarPagamento(pagamentoAprovadoEvento);

            _pedidoRepositorio.Verify(pr => pr.AtualizarPedido(It.Is <Pedido>(
                                                                   p => p.Id == pedido.Id && p.Situacao == SituacaoDoPedido.PagamentoAprovado)));
        }
コード例 #17
0
        public void Deve_excluir_lote_caso_a_quantidade_do_pedido_for_maior()
        {
            var pedido = PedidoBuilder.Novo().ComQuantidade(10).Criar();

            _pedidos.Add(pedido);
            var comanda      = ComandaBuilder.Novo().ComPedidos(_pedidos).Criar();
            var primeiroLote = new Lote(pedido.Cerveja, 5);
            var segundoLote  = new Lote(pedido.Cerveja, 3);
            var terceiroLote = new Lote(pedido.Cerveja, 4);

            _lotes.Add(primeiroLote);
            _lotes.Add(segundoLote);
            _lotes.Add(terceiroLote);
            _repositorioDeLotes.Setup(repositorio => repositorio.ObterLotesPeloNomeDaCerveja(pedido.Cerveja.Nome))
            .Returns(_lotes);

            _realizacaoDaVenda.Vender(comanda);

            _repositorioDeLotes.Verify(repositorio => repositorio.Excluir(It.Is <Lote>(lote => lote == primeiroLote)));
            _repositorioDeLotes.Verify(repositorio => repositorio.Excluir(It.Is <Lote>(lote => lote == segundoLote)));
        }
コード例 #18
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);
        }
コード例 #19
0
 public PedidoAssemble(PedidoBuilder pedidoBuilder)
 {
     _pedidoBuilder = pedidoBuilder;
 }