Ejemplo n.º 1
0
        public void Dado_dois_ingressos_no_valor_de_30_o_total_deve_ser_60()
        {
            var sessao    = new Sessao(DateTime.Now.AddDays(15), _espetaculo, _sala, 30M);
            var reserva   = new Reserva(_cliente, sessao);
            var poltronas = sessao.Poltrona.ToList();

            var primeiroIngresso = new Ingresso("Gabriel", poltronas[0]);
            var segundoIngresso  = new Ingresso("Jose", poltronas[1]);

            reserva.AdicionarIngresso(primeiroIngresso);
            reserva.AdicionarIngresso(segundoIngresso);
            Assert.AreEqual(reserva.Total(), 60);
        }
Ejemplo n.º 2
0
        public void Dado_um_poltrona_ja_ocupada_o_ingresso_nao_pode_ser_adicionada()
        {
            var sessao    = new Sessao(DateTime.Now.AddDays(15), _espetaculo, _sala, 30M);
            var reserva   = new Reserva(_cliente, sessao);
            var poltronas = sessao.Poltrona.ToList();
            var ingresso  = new Ingresso("Gabriel", poltronas[0]);

            reserva.AdicionarIngresso(ingresso);
            var mesmoIngresso = new Ingresso("Jose", poltronas[0]);

            reserva.AdicionarIngresso(mesmoIngresso);
            Assert.AreEqual(reserva.Ingressos.Count(), 1);
            Assert.IsTrue(reserva.Invalid);
        }
Ejemplo n.º 3
0
        public void Dado_um_ingresso_adicionado_o_status_deve_ser_AguardandoPagamento()
        {
            var sessao    = new Sessao(DateTime.Now.AddDays(15), _espetaculo, _sala, 30M);
            var reserva   = new Reserva(_cliente, sessao);
            var poltronas = sessao.Poltrona.ToList();

            var ingresso = new Ingresso("Gabriel", poltronas[0]);

            reserva.AdicionarIngresso(ingresso);

            Assert.AreEqual(reserva.Status, EStatusReserva.AguardandoPagamento);
        }
Ejemplo n.º 4
0
        public void Dado_um_CancelReservaCommand_valido_a_reserva_deve_ser_confirmada()
        {
            var cliente = _clientRepository.GetById(Guid.NewGuid());
            var sessao  = _sessaoRepository.GetById(Guid.NewGuid());
            var reserva = new Reserva(cliente, sessao);

            reserva.AdicionarIngresso(new Ingresso("Jose", sessao.Poltrona[0]));
            _reservaRepository.Add(reserva);

            var command       = new CancelReservaCommand(reserva.Id);
            var commandResult = (GenericCommandResult)_handler.Handle(command);

            Assert.IsTrue(commandResult.Sucess);
            Assert.AreEqual(_reservaRepository.GetByCliente(cliente.Id).Count(), 0);
        }
Ejemplo n.º 5
0
        //Cadastrar a reserva não quer dizer que ela foi comprada
        // Tera um handler para confirmar reserva
        // Ai sim é persistido, mas para outras pessoas, a reserva ja foi feita
        public ICommandResult Handle(CreateReservaCommand command)
        {
            command.Validate();

            if (command.Invalid)
            {
                return(new GenericCommandResult(false, "Dados incorretos", command.Notifications));
            }

            var cliente   = _clienteRepository.GetById(command.ClienteId);
            var sessao    = _sessaoRepository.GetById(command.SessaoId);
            var poltronas = _sessaoRepository.GetPoltronasByIds(sessao.Id, ExtractGuids.Extract(command));

            //Verificar se poltronas estão ocupadas
            if (IsPoltronasOcuped(poltronas))
            {
                return(new GenericCommandResult(false, "Algumas poltronas selecionadas já estão ocupadas", poltronas));
            }

            var reserva   = new Reserva(cliente, sessao);
            var ingressos = CreateIngressos(command.Ingressos, poltronas);

            reserva.AdicionarIngresso(ingressos);

            AddNotifications(reserva);

            if (Invalid)
            {
                return(new GenericCommandResult(false, "Problema ao gerar reserva", this.Notifications));
            }

            _reservaRepository.Add(reserva);

            return(new GenericCommandResult(true, "Reserva cadastrado, aguardando pagamento", reserva));
            //Verifica o estado das poltronas
            //Utilizar Dapper ou buscar estas informações na tela
        }