public Reserva Criar(DateTime dataDevolucao, DateTime dataReserva, string cpf, int IdProduto, int IdPacote, List <int> opcionais)
        {
            Reserva reserva = new Reserva();

            reserva.AtribuirDataDevolucaoPrevista(dataDevolucao);
            reserva.AtribuirDataReserva(dataReserva);

            var cliente = contexto.Clientes.SingleOrDefault(x => x.CPF.Equals(cpf));

            reserva.AtribuirCliente(cliente);

            var pacote = contexto.Pacotes.SingleOrDefault(x => x.Id == IdPacote);

            reserva.AtribuirPacote(pacote);

            if (opcionais.Count >= 0)
            {
                List <Opcional> lista = new List <Opcional>();

                foreach (int op in opcionais)
                {
                    var opcional = contexto.Opcionais.SingleOrDefault(x => x.Id == op);
                    lista.Add(opcional);
                }

                reserva.AtribuirOpcionais(lista);
            }

            var produto = contexto.Produtos.SingleOrDefault(x => x.Id == IdProduto);

            reserva.AtribuirProduto(produto);

            reserva.CalcularDiasDeLocacao();
            reserva.CalcularValorPrevisto();

            if (reserva.IsValid())
            {
                contexto.Reservas.Add(reserva);
                contexto.SaveChanges();
            }

            return(reserva);
        }
        public void ReservaCriadaAtribuiOpcionaisCorretamente()
        {
            Opcional op      = new Opcional("TesteOpcional", "TesteOpcional testando1", 59, 8);
            Opcional op1     = new Opcional("TesteOpcional1", "TesteOpcional testando2", 59, 8);
            Opcional op2     = new Opcional("TesteOpcional2", "TesteOpcional testando3", 59, 8);
            Reserva  reserva = new Reserva();

            List <Opcional> lista = new List <Opcional>();

            lista.Add(op);
            lista.Add(op1);
            lista.Add(op2);

            reserva.AtribuirOpcionais(lista);

            var listaArray = lista.ToArray();

            Assert.AreEqual(op, listaArray[0]);
            Assert.AreEqual(op1, listaArray[1]);
            Assert.AreEqual(op2, listaArray[2]);
        }
        public void ReservaCriadaDiminuiEstoque()
        {
            Reserva Reserva = new Reserva();
            Produto Produto = new Produto("Teste", "Teste testando", "Teste.png", 129, 5);
            Pacote  Pacote  = new Pacote("TestePacote", "Teste testando pacote", 148);

            Opcional op  = new Opcional("TesteOpcional", "TesteOpcional testando1", 59, 8);
            Opcional op1 = new Opcional("TesteOpcional1", "TesteOpcional testando2", 59, 8);
            Opcional op2 = new Opcional("TesteOpcional2", "TesteOpcional testando3", 59, 8);

            List <Opcional> Lista = new List <Opcional>();

            Lista.Add(op);
            Lista.Add(op1);
            Lista.Add(op2);

            Reserva.AtribuirProduto(Produto);
            Reserva.AtribuirOpcionais(Lista);

            Assert.AreEqual(4, Produto.QuantidadeDisponivel);
            Assert.AreEqual(7, op.QuantidadeDisponivel);
            Assert.AreEqual(7, op1.QuantidadeDisponivel);
            Assert.AreEqual(7, op2.QuantidadeDisponivel);
        }