public void Post_ValidIntervalRatePlanData_Returns200Ok() { var reservation = new ReservationTransferObject { AmountOfAdults = 1, AmountOfChildren = 0, RatePlanId = -3, ReservationStart = new DateTime(2020, 08, 01), ReservationEnd = new DateTime(2020, 08, 03), RoomId = -2 }; var controllerBuilder = new ReservationControllerBuilder(); var controllerMock = controllerBuilder.GetDefaultReservationService(); controllerMock.Setup(r => r.MakeReservationIntervalPlan(It.IsAny <ReservationTransferObject>())) .Returns(ServiceResult <double> .SuccessResult(450)); var controller = controllerBuilder.WithReservationService(controllerMock.Object).Build(); var response = controller.PostInterval(reservation); Assert.IsType <OkObjectResult>(response); }
public void MakeReservation_ValidateResultNightlyRatePlan_Success() { var reservation = new ReservationTransferObject { AmountOfAdults = 1, AmountOfChildren = 0, RatePlanId = -1, ReservationStart = new DateTime(2020, 07, 01), ReservationEnd = new DateTime(2020, 07, 03), RoomId = -1 }; var expectedValue = 1000; var controllerBuilder = new ReservationControllerBuilder(); var Mock = controllerBuilder.GetDefaultReservationService(); Mock.Setup(r => r.MakeReservationNighlyPlan(It.IsAny <ReservationTransferObject>())) .Returns(ServiceResult <double> .SuccessResult(expectedValue)); var response = Mock.Object.MakeReservationNighlyPlan(reservation); Assert.Equal(response.ResponseCode, ResponseCode.Success); Assert.Equal(response.Result, expectedValue); }
public ServiceResult <double> MakeReservationNighlyPlan(ReservationTransferObject ReservationTransferObject) { var ratePlan = nightlyRatePlanRepository.All() .Include(r => r.Seasons) .Include(r => r.RatePlanRooms) .ThenInclude(r => r.Room) .First(r => r.Id == ReservationTransferObject.RatePlanId); var canReserve = ratePlan.Seasons .Any(s => ReservationTransferObject.ReservationStart >= s.StartDate && ReservationTransferObject.ReservationEnd <= s.EndDate); var room = ratePlan.RatePlanRooms .First(r => r.RoomId == ReservationTransferObject.RoomId && r.RatePlanId == ReservationTransferObject.RatePlanId); var isRoomAvailable = room.Room.Amount > 0 && ReservationTransferObject.AmountOfAdults <= room.Room.MaxAdults && ReservationTransferObject.AmountOfChildren <= room.Room.MaxChildren; if (canReserve && isRoomAvailable) { room.Room.Amount -= 1; nightlyRatePlanRepository.SaveChanges(); var days = (ReservationTransferObject.ReservationEnd - ReservationTransferObject.ReservationStart).TotalDays; var Price = days * ratePlan.Price; return(ServiceResult <double> .SuccessResult(Price)); } return(ServiceResult <double> .ErrorResult("No se puede Reservar")); }
public IActionResult PostInterval([FromBody] ReservationTransferObject ReservationTransferObject) { var result = reservationService.MakeReservationIntervalPlan(ReservationTransferObject); if (result.ResponseCode == ResponseCode.Success) { return(Ok(result.Result)); } return(BadRequest(result.Error)); }