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))); }
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)))); }
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))); }
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))); }
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); }
public void Deve_aprovar_pagamento_do_pedido() { var pedido = PedidoBuilder.Novo().Criar(); pedido.AprovarPagamento(); Assert.Equal(SituacaoDoPedido.PagamentoAprovado, pedido.Situacao); }
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); }
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); }
public void Deve_alterar_a_quantidade() { const int quantidadeEsperada = 5; var pedido = PedidoBuilder.Novo().Criar(); pedido.AlterarQuantidade(quantidadeEsperada); Assert.Equal(quantidadeEsperada, pedido.Quantidade); }
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); }
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))); }
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); }
public async Task Deve_salvar_evennto_de_pagamentorecusado_ao_negar_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 pagamentoRecusadoEvento = new PagamentoRecusadoEvento(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 <PagamentoRecusadoEvento>())); await _atualizacaoDePedido.NegarPagamento(pagamentoRecusadoEvento); _eventoRepositorio.Verify(er => er.Salvar(It.Is <PagamentoRecusadoEvento>( evento => evento.ToExpectedObject().Matches(pagamentoRecusadoEvento)))); }
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))); }
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))); }
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); }