def test_check_reservation_room_close(service: UpdateReservationPrices, context: Context, house, reservation): context.house = house context.source = attr.evolve(reservation, status=ReservationStatuses.CLOSE) result = service.check_reservation(context) assert not is_successful(result) assert result.failure().failure == ReservationErrors.missed_reservation
def test_select_reservation_room_ok(service: UpdateReservationPrices, context: Context, house, reservation): context.house = house context.source = reservation result = service.select_reservation_room(context) assert is_successful(result) assert result.unwrap().reservation_room == reservation.rooms[0]
def test_check_reservation_wrong_house(service: UpdateReservationPrices, context: Context, house, reservation): context.house = house context.source = attr.evolve(reservation, house_id=999) result = service.check_reservation(context) assert not is_successful(result) assert result.failure().failure == ReservationErrors.missed_reservation
def test_select_reservation_missed_pk(service: UpdateReservationPrices, context: Context, house): context.house = house context.pk = None result = service.select_reservation(context) assert not is_successful(result) assert result.failure().failure == ReservationErrors.missed_reservation
def test_is_allow_update_period_ok_for_manual(service: UpdateReservationPrices, context: Context, house, reservation): context.house = house context.source = reservation context.reservation_room = reservation.rooms[0] result = service.is_allow_update_period(context) assert is_successful(result)
def test_select_reservation_room_wrong_id(service: UpdateReservationPrices, context: Context, house, reservation): context.house = house context.source = reservation context.room_id = 999 result = service.select_reservation_room(context) assert not is_successful(result) assert result.failure().failure == ReservationErrors.missed_reservation
def test_is_allow_update_period_fail(service: UpdateReservationPrices, context: Context, house, reservation): context.house = house context.source = attr.evolve(reservation, source=ReservationSources.BOOKING) context.reservation_room = reservation.rooms[0] result = service.is_allow_update_period(context) assert not is_successful(result) assert result.failure().failure == ReservationErrors.wrong_period
def test_save_reservation_fail(service: UpdateReservationPrices, context: Context, house, reservation): service._reservations_repo = Mock(save=Mock(return_value=(Nothing, False))) context.house = house context.reservation = reservation result = service.save_reservation(context) assert not is_successful(result) assert result.failure().failure == ReservationErrors.error assert result.failure().error.startswith( 'Error save prices for Reservation ID=')
def test_save_reservation_ok(service: UpdateReservationPrices, context: Context, house, reservation): _reservation = attr.evolve(reservation, price_accepted=Decimal(3600)) service._reservations_repo = Mock(save=Mock( return_value=(Some(_reservation), True))) context.house = house context.reservation = reservation result = service.save_reservation(context) assert is_successful(result) assert result.unwrap().reservation == _reservation
def test_save_reservation_error(service: UpdateReservationPrices, context: Context, house, reservation): service._reservations_repo = Mock(save=Mock( side_effect=RuntimeError('ERR'))) context.house = house context.reservation = reservation result = service.save_reservation(context) assert not is_successful(result) assert result.failure().failure == ReservationErrors.error assert str(result.failure().exc) == 'ERR'
def test_select_cancellation_policy_fail(service: UpdateReservationPrices, context: Context, house, rate_plan, reservation): service._policies_repo = Mock(get=Mock(return_value=Nothing)) context.house = house context.source = reservation context.reservation_room = reservation.rooms[0] context.rate_plan = rate_plan result = service.select_cancellation_policy(context) assert is_successful(result) assert result.unwrap().rate_plan.policy is None
def test_select_cancellation_policy_for_plan_without_it( service: UpdateReservationPrices, context: Context, house, rate_plan, reservation): service._policies_repo = Mock(get=Mock(side_effect=RuntimeError('ERR'))) context.house = house context.source = reservation context.reservation_room = reservation.rooms[0] context.rate_plan = attr.evolve(rate_plan, policy_id=0) result = service.select_cancellation_policy(context) assert is_successful(result) assert result.unwrap().rate_plan.policy is None
def test_select_cancellation_policy_error(service: UpdateReservationPrices, context: Context, house, rate_plan, reservation): service._policies_repo = Mock(get=Mock(side_effect=RuntimeError('ERR'))) context.house = house context.source = reservation context.reservation_room = reservation.rooms[0] context.rate_plan = rate_plan result = service.select_cancellation_policy(context) assert not is_successful(result) assert result.failure().failure == ReservationErrors.error assert str(result.failure().exc) == 'ERR'
def test_is_allow_update_period_ok_for_ota(service: UpdateReservationPrices, context: Context, house, reservation): context.house = house context.source = attr.evolve(reservation, source=ReservationSources.BOOKING) context.reservation_room = reservation.rooms[0] context.prices = { k: v for k, v in context.prices.items() if reservation.rooms[0].checkin <= k < reservation.rooms[0].checkout } result = service.is_allow_update_period(context) assert is_successful(result)
def test_select_rate_plan_ok(service: UpdateReservationPrices, context: Context, house, rate_plan): service._prices_repo = Mock(get_plan=Mock(return_value=Some(rate_plan))) context.house = house result = service.select_rate_plan(context) assert is_successful(result) assert result.unwrap().rate_plan == rate_plan
def test_select_room_types_ok(service: UpdateReservationPrices, context: Context, house, room_type): service._roomtypes_repo = Mock(select=Mock(return_value=[room_type])) context.house = house result = service.select_room_types(context) assert is_successful(result) assert result.unwrap().room_types == {room_type.id: room_type}
def test_select_reservation_ok(service: UpdateReservationPrices, context: Context, house, reservation): service._reservations_repo = Mock(get=Mock(return_value=Some(reservation))) context.house = house result = service.select_reservation(context) assert is_successful(result) assert result.unwrap().source == reservation
def test_select_rate_plan_fail(service: UpdateReservationPrices, context: Context, house): service._prices_repo = Mock(get_plan=Mock(return_value=Nothing)) context.house = house result = service.select_rate_plan(context) assert not is_successful(result) assert result.failure().failure == ReservationErrors.missed_rateplan
def test_select_rooms_error(service: UpdateReservationPrices, context: Context, house): service._rooms_repo = Mock(select=Mock(side_effect=RuntimeError('ERR'))) context.house = house result = service.select_rooms(context) assert not is_successful(result) assert result.failure().failure == ReservationErrors.error assert str(result.failure().exc) == 'ERR'
def context(house, reservation, rate_plan, room, user) -> Context: prices = {} for day in cf.get_days_for_period( datetime.date.today(), datetime.date.today() + datetime.timedelta(days=4)): prices[day] = {'room': room.id, 'price': Decimal(1200), 'day': day} return Context( house_id=house.id, pk=reservation.id, room_id=reservation.rooms[0].id, user=user, plan_id=rate_plan.id, prices=prices, )
def test_make_reservation_from_data_with_new_plan( service: UpdateReservationPrices, context: Context, house, room_type, room, rate_plan, reservation, cancellation_policy, ): context.house = house context.source = reservation context.reservation_room = reservation.rooms[0] context.room_types = {room_type.id: room_type} context.rooms = {room.id: room} context.rate_plan = attr.evolve(rate_plan, policy=cancellation_policy) result = service.make_reservation_from_data(context) assert is_successful(result) _reservation = result.unwrap().reservation assert len(_reservation.rooms[0].day_prices) == len(context.prices) assert [x.day for x in _reservation.rooms[0].day_prices ] == list(context.prices.keys()) for price in _reservation.rooms[0].day_prices: assert price.price_accepted == Decimal(1200) assert price.room_id == room.id assert price.roomtype_id == room_type.id assert price.tax == Decimal(120) assert _reservation.rooms[0].netto_price == Decimal(1120) assert _reservation.rooms[0].netto_price_accepted == Decimal(6000) assert _reservation.rooms[0].price == Decimal(1120) assert _reservation.rooms[0].price_accepted == Decimal(6600) assert _reservation.rooms[0].tax == Decimal(600) assert _reservation.rooms[0].rate_plan_id == rate_plan.id assert _reservation.rooms[0].policy == { 'name': 'Charge for 2 nights in case of cancelation', 'policy_items': [{ 'days': None, 'charge': 2, 'charge_type': 'NIGHT' }] } assert _reservation.rooms[0].checkin == datetime.date.today() assert _reservation.rooms[0].checkout == datetime.date.today( ) + datetime.timedelta(days=5) assert _reservation.netto_price == Decimal(1120) assert _reservation.netto_price_accepted == Decimal(6000) assert _reservation.price == Decimal(1120) assert _reservation.price_accepted == Decimal(6600) assert _reservation.tax == Decimal(600) assert _reservation.checkin == datetime.date.today() assert _reservation.checkout == datetime.date.today() + datetime.timedelta( days=5)
def test_make_reservation_from_data_with_same_plan( service: UpdateReservationPrices, context: Context, house, room_type, room, rate_plan, reservation): context.house = house context.source = reservation context.reservation_room = reservation.rooms[0] context.room_types = {room_type.id: room_type} context.rooms = {room.id: room} context.rate_plan = attr.evolve(rate_plan, id=reservation.rooms[0].rate_plan_id) result = service.make_reservation_from_data(context) assert is_successful(result) _reservation = result.unwrap().reservation assert len(_reservation.rooms[0].day_prices) == len(context.prices) assert [x.day for x in _reservation.rooms[0].day_prices ] == list(context.prices.keys()) for price in _reservation.rooms[0].day_prices: assert price.price_accepted == Decimal(1200) assert price.room_id == room.id assert price.roomtype_id == room_type.id assert price.tax == Decimal(120) assert _reservation.rooms[0].netto_price == Decimal(1120) assert _reservation.rooms[0].netto_price_accepted == Decimal(6000) assert _reservation.rooms[0].price == Decimal(1120) assert _reservation.rooms[0].price_accepted == Decimal(6600) assert _reservation.rooms[0].tax == Decimal(600) assert _reservation.rooms[0].rate_plan_id == 499 assert _reservation.rooms[0].policy == {} assert _reservation.rooms[0].checkin == datetime.date.today() assert _reservation.rooms[0].checkout == datetime.date.today( ) + datetime.timedelta(days=5) assert _reservation.netto_price == Decimal(1120) assert _reservation.netto_price_accepted == Decimal(6000) assert _reservation.price == Decimal(1120) assert _reservation.price_accepted == Decimal(6600) assert _reservation.tax == Decimal(600) assert _reservation.checkin == datetime.date.today() assert _reservation.checkout == datetime.date.today() + datetime.timedelta( days=5)
def test_missed_house_id(service: UpdateReservationPrices, context: Context): context.house_id = None result = service.select_house(context) assert not is_successful(result) assert result.failure().failure == ReservationErrors.missed_house