def test_check_los_discounts(service: CalculateNewReservation, context: Context, house, room_type, rate, los_discount): period = [ context.start_date, context.start_date + datetime.timedelta(days=1), context.start_date + datetime.timedelta(days=2), context.start_date + datetime.timedelta(days=3), ] context.end_date = context.start_date + datetime.timedelta(days=4) context.house = house context.room_type = room_type context.rate = rate context.prices = { period[0]: Decimal(100), period[1]: Decimal(100), period[2]: Decimal(100), period[3]: Decimal(100), } context.discounts = {DiscountTypes.LOS: [los_discount]} result = service.check_los_discounts(context) assert is_successful(result) assert result.unwrap().prices == { period[0]: Decimal(85), period[1]: Decimal(85), period[2]: Decimal(85), period[3]: Decimal(85), }
def test_select_occupancy_no_discounts(service: CalculateNewReservation, context: Context, house, room_type, rate): service._occupancy_repo = Mock(get=Mock(side_effect=RuntimeError("ERR"))) context.house = house context.room_type = room_type context.rate = rate context.discounts = {DiscountTypes.AVAILABILITY: []} result = service.select_occupancies(context) assert is_successful(result) assert result.unwrap().occupancies == {}
def test_select_occupancy_error(service: CalculateNewReservation, context: Context, house, room_type, rate, availability_discount): service._occupancy_repo = Mock(get=Mock(side_effect=RuntimeError("ERR"))) context.house = house context.room_type = room_type context.rate = rate context.discounts = {DiscountTypes.AVAILABILITY: [availability_discount]} result = service.select_occupancies(context) assert not is_successful(result) assert result.failure().failure == ReservationErrors.error assert str(result.failure().exc) == "ERR"
def test_check_los_discounts_empty(service: CalculateNewReservation, context: Context, house, room_type, rate): period = [ context.start_date, context.start_date + datetime.timedelta(days=1) ] context.house = house context.room_type = room_type context.rate = rate context.prices = {period[0]: Decimal(100), period[1]: Decimal(110)} context.discounts = {DiscountTypes.LOS: []} result = service.check_los_discounts(context) assert is_successful(result) assert result.unwrap().prices == context.prices
def test_select_occupancy_ok(service: CalculateNewReservation, context: Context, house, room_type, rate, availability_discount): occupancies = { context.start_date: 1, context.start_date + datetime.timedelta(days=1): 2 } service._occupancy_repo = Mock(get=Mock(return_value=occupancies)) context.house = house context.room_type = room_type context.rate = rate context.discounts = {DiscountTypes.AVAILABILITY: [availability_discount]} result = service.select_occupancies(context) assert is_successful(result) assert result.unwrap().occupancies == occupancies
def test_check_availability_discounts(service: CalculateNewReservation, context: Context, house, room_type, rate, availability_discount): period = [ context.start_date, context.start_date + datetime.timedelta(days=1) ] context.house = house context.room_type = room_type context.rate = rate context.prices = {period[0]: Decimal(100), period[1]: Decimal(110)} context.discounts = {DiscountTypes.AVAILABILITY: [availability_discount]} context.occupancies = {period[0]: 3, period[1]: 1} result = service.check_availability_discounts(context) assert is_successful(result) assert result.unwrap().prices == { period[0]: Decimal(85), period[1]: Decimal(110) }
def test_check_last_minute_discounts(service: CalculateNewReservation, context: Context, house, room_type, rate, last_min_discount): period = [ context.start_date + datetime.timedelta(days=5), context.start_date + datetime.timedelta(days=6) ] context.house = house context.room_type = room_type context.rate = rate context.prices = {period[0]: Decimal(100), period[1]: Decimal(110)} context.discounts = {DiscountTypes.LAST_MINUTE: [last_min_discount]} result = service.check_last_minute_discounts(context) assert is_successful(result) assert result.unwrap().prices == { period[0]: Decimal(85), period[1]: Decimal(110) }