public CostoHabitacionPorDia GenerarPrecioDeHabitacionPorFechaYUsuario(Habitacion habitacion, DateTime fecha, Usuario usuario)
        {
            decimal porcentajeCosto = 1;

            //si recibimos un usuario y es un usuario premium, aplicar descuento de 10%
            if (usuario != null && usuario.EsUsuarioPremium)
            {
                porcentajeCosto -= 0.10m;
            }

            //si recibimos fecha, aplicar tarifas de fin de semana
            if (fecha != null)
            {
                if (fecha.DayOfWeek == DayOfWeek.Friday)
                {
                    porcentajeCosto += 0.05m;
                }
                else if (fecha.DayOfWeek == DayOfWeek.Saturday || fecha.DayOfWeek == DayOfWeek.Sunday)
                {
                    porcentajeCosto += 0.15m;
                }
            }

            var resultado = new CostoHabitacionPorDia(habitacion, habitacion.TarifaBase * porcentajeCosto);

            return(resultado);
        }
Exemple #2
0
        public void BuscarHabitaciones_HabitacionesNoReservadasLista()
        {
            //agregar habitaciones, que el usuario no haya reservado en esas fechas, a los resultados
            //Arrange

            var usuario = new Usuario()
            {
                Id = 555
            };
            var HabitaReserv = new Habitacion {
                Id = 11, Ocupacion = EstadoOcupacion.Ocupado
            };
            var CostHabitaReserv = new CostoHabitacionPorDia(HabitaReserv, 100m, DateTime.Now);

            DateTime FechaIn  = DateTime.Now;
            DateTime FechaOut = DateTime.Now.AddDays(4);//Fecha de salida menor a entrada

            List <Habitacion> Habitaciones = new List <Habitacion>
            {
                new Habitacion {
                    Id = 1, Ocupacion = EstadoOcupacion.Ocupado
                },
                new Habitacion {
                    Id = 2, Ocupacion = EstadoOcupacion.Vacio
                },
                new Habitacion {
                    Id = 3, Ocupacion = EstadoOcupacion.Vacio
                },
                new Habitacion {
                    Id = 4, Ocupacion = EstadoOcupacion.Vacio
                }
            };

            //Habitaciones.Add(new Habitacion { });

            List <Reservacion> Reservaciones = new List <Reservacion> {
                new Reservacion {
                    Id = 11, Usuario = usuario,
                    HabitacionesReservadas = new List <CostoHabitacionPorDia> {
                        CostHabitaReserv
                    }
                }
            };
            //Mock servicios
            var ObjetoFalsoHabitaciones = new Mock <IRepositorioHabitaciones>();

            ObjetoFalsoHabitaciones
            .Setup(m => m.SeleccionarhabitacionesDisponibles(FechaIn, FechaOut))
            .Returns(Habitaciones);
            var ObjetoFalsoReservaciones = new Mock <IRepositorioReservaciones>();

            ObjetoFalsoReservaciones
            .Setup(m => m.BuscarReservacionesPorUsuario(usuario))
            .Returns(Reservaciones);

            var servicio = new ServiciosReservacionDependientes(ObjetoFalsoHabitaciones.Object,
                                                                ObjetoFalsoReservaciones.Object);
            //Act
            List <CostoHabitacionPorDia> result = servicio.BuscarHabitaciones(FechaIn, FechaOut, usuario);

            //Assert ArgumentException
            Assert.IsFalse(result.Contains(CostHabitaReserv));
        }