예제 #1
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)));
        }
예제 #2
0
        public void Deve_criar_estoque_com_lote_valido()
        {
            var loteEsperado = DateTime.Now.ToString("yyyyMMdd");

            var estoque = new Lote(CervejaBuilder.Novo().Criar(), 10);

            Assert.Equal(loteEsperado, estoque.Identificador);
        }
예제 #3
0
        public void Nao_deve_permitir_alterar_nome_por_nome_invalido(string nomeInvalido)
        {
            var cerveja = CervejaBuilder.Novo().Criar();

            Action acao = () => cerveja.AlterarNome(nomeInvalido);

            Assert.Throws <ExcecaoDeDominio>(acao).ComMensagem(Resource.NomeInvalido);
        }
예제 #4
0
        public void Nao_deve_permitir_alterar_quantidade_para_valores_invalido_ao_decrementar(int quantidadeBase, int valorInvalido)
        {
            var cerveja = CervejaBuilder.Novo().Criar();
            var lote    = new Lote(cerveja, quantidadeBase);

            Action acao = () => lote.DecrementarQuantidade(valorInvalido);

            Assert.Throws <ExcecaoDeDominio>(acao).ComMensagem(Resource.QuantidadeReduzidaEhInvalida);
        }
예제 #5
0
        public void Deve_alterar_o_nome()
        {
            const string nomeEsperado = "Budweiser";
            var          cerveja      = CervejaBuilder.Novo().ComNome("Brahma").Criar();

            cerveja.AlterarNome(nomeEsperado);

            Assert.Equal(nomeEsperado, cerveja.Nome);
        }
예제 #6
0
        public void Nao_deve_permitir_alterar_quantidade_para_valores_invalido_ao_incrementar(int valorInvalido)
        {
            const int quantidadeBase = 6;
            var       cerveja        = CervejaBuilder.Novo().Criar();
            var       estoque        = new Lote(cerveja, quantidadeBase);

            Action acao = () => estoque.IncrementarQuantidade(valorInvalido);

            Assert.Throws <ExcecaoDeDominio>(acao).ComMensagem(Resource.QuantidadeAdicionadaEhInvalida);
        }
예제 #7
0
        public void Deve_alterar_a_quantidade_do_estoque(int quantidadeASerAdicionada)
        {
            var cerveja            = CervejaBuilder.Novo().Criar();
            var estoque            = new Lote(cerveja, 5);
            var quantidadeEsperada = estoque.Quantidade + quantidadeASerAdicionada;

            estoque.IncrementarQuantidade(quantidadeASerAdicionada);

            Assert.Equal(quantidadeEsperada, estoque.Quantidade);
        }
예제 #8
0
        public void Deve_armazenar_um_lote_no_repositorio()
        {
            var cerveja      = CervejaBuilder.Novo().Criar();
            var loteEsperado = new Lote(cerveja, 8);

            _armazenadorDeLotes.Armazenar(loteEsperado);

            _repositorioDeLotes.Verify(estoque => estoque.Adiciona(
                                           It.Is <Lote>(lote => lote.Identificador == loteEsperado.Identificador)));
        }
예제 #9
0
        public void Não_deve_adicionar_caso_ja_exista_tal_cerveja_no_estoque()
        {
            var cervejaEsperada = CervejaBuilder.Novo().ComNome("Teste").Criar();

            _repositorioDeCerveja.Setup(estoque => estoque.VerificaSeExistePeloNome(cervejaEsperada.Nome)).Returns(true);

            _armazenadorDeCerveja.Armazenar(cervejaEsperada);

            _repositorioDeCerveja.Verify(estoque =>
                                         estoque.Adiciona(It.IsAny <Cerveja>()), Times.Never());
        }
예제 #10
0
        public void Deve_criar_um_pedido()
        {
            var       cerveja        = CervejaBuilder.Novo().Criar();
            const int quantidade     = 4;
            var       valor          = cerveja.Preco * quantidade;
            var       pedidoEsperado = new
            {
                Cerveja    = cerveja,
                Quantidade = quantidade,
                Valor      = valor
            }.ToExpectedObject();

            var pedidoObtido = new Pedido(cerveja, quantidade);

            pedidoEsperado.ShouldMatch(pedidoObtido);
        }
예제 #11
0
        public void Deve_criar_uma_comanda()
        {
            var cervejaDoPrimeiroPedido = CervejaBuilder.Novo().Criar();
            var cervejaDoSegundoPedido  = CervejaBuilder.Novo().ComNome("Budweiser").ComPreco(6.75).Criar();
            var primeiroPedido          = new Pedido(cervejaDoPrimeiroPedido, 5);
            var segundoPedido           = new Pedido(cervejaDoSegundoPedido, 4);
            var valorTotal = primeiroPedido.Valor + segundoPedido.Valor;
            var pedidos    = new List <Pedido>
            {
                primeiroPedido,
                segundoPedido
            };
            var comandaEsperada = new
            {
                Pedidos    = pedidos,
                ValorTotal = valorTotal
            };

            var comandaObtida = new Comanda(pedidos);

            comandaEsperada.ToExpectedObject().ShouldMatch(comandaObtida);
        }
예제 #12
0
 public LoteTest()
 {
     _cerveja       = CervejaBuilder.Novo().Criar();
     _identificador = DateTime.Now.ToString("yyyyMMdd");
 }
예제 #13
0
        public void Nao_deve_aceitar_nome_invalido(string nomeInvalido)
        {
            Action acao = () => CervejaBuilder.Novo().ComNome(nomeInvalido).Criar();

            Assert.Throws <ExcecaoDeDominio>(acao).ComMensagem(Resource.NomeInvalido);
        }
예제 #14
0
        public void Nao_deve_aceitar_preco_invalido()
        {
            Action acao = () => CervejaBuilder.Novo().ComPreco(-7.5).Criar();

            Assert.Throws <ExcecaoDeDominio>(acao).ComMensagem(Resource.PrecoInvalido);
        }