def test_raise_if_has_payment(self): booking = booking_factories.UsedIndividualBookingFactory() payments_factories.PaymentFactory(booking=booking) with pytest.raises(api_errors.ResourceGoneError): api.mark_as_unused(booking) assert booking.isUsed # unchanged assert booking.status is BookingStatus.USED
def test_raise_if_booking_was_automatically_used_for_digital_offer_with_activation_code(self): offer = offers_factories.OfferFactory(product=offers_factories.DigitalProductFactory()) digital_stock = offers_factories.StockWithActivationCodesFactory() first_activation_code = digital_stock.activationCodes[0] booking = booking_factories.UsedIndividualBookingFactory( stock__offer=offer, activationCode=first_activation_code ) with pytest.raises(api_errors.ForbiddenError): api.mark_as_unused(booking) assert booking.isUsed assert booking.status is BookingStatus.USED
def patch_booking_keep_by_token(token: str): """Let a pro user mark a booking as _not_ used.""" booking = booking_repository.find_by(token=token.upper()) offerer_id = booking.stock.offer.venue.managingOffererId valid_api_key = _get_api_key_from_header(request) if current_user.is_authenticated: check_user_can_validate_bookings_v2(current_user, offerer_id) if valid_api_key: check_api_key_allows_to_validate_booking(valid_api_key, offerer_id) bookings_api.mark_as_unused(booking) return "", 204
def patch_booking_keep_by_token(token: str) -> None: # in French, to be used by Swagger for the API documentation """Annulation de la validation d'une réservation.""" booking = booking_repository.find_by(token=token) if current_user.is_authenticated: check_user_can_validate_bookings_v2(current_user, booking.offererId) if current_api_key: check_api_key_allows_to_validate_booking( current_api_key, # type: ignore[arg-type] booking.offererId, ) bookings_api.mark_as_unused(booking)
def test_raise_if_not_yet_used(self): booking = booking_factories.IndividualBookingFactory(isUsed=False) with pytest.raises(api_errors.ResourceGoneError): api.mark_as_unused(booking) assert not booking.isUsed # unchanged assert booking.status is not BookingStatus.USED
def test_mark_as_unused_digital_offer(self): offer = offers_factories.OfferFactory(product=offers_factories.DigitalProductFactory()) booking = booking_factories.UsedIndividualBookingFactory(stock__offer=offer) api.mark_as_unused(booking) assert not booking.isUsed assert booking.status is not BookingStatus.USED
def test_mark_as_unused(self): booking = booking_factories.UsedIndividualBookingFactory() api.mark_as_unused(booking) assert not booking.isUsed assert booking.status is not BookingStatus.USED assert len(push_testing.requests) == 1
def test_raise_if_has_payment(self): booking = factories.BookingFactory(isUsed=True) payments_factories.PaymentFactory(booking=booking) with pytest.raises(api_errors.ResourceGoneError): api.mark_as_unused(booking) assert booking.isUsed # unchanged
def test_raise_if_cancelled(self): booking = factories.BookingFactory(isUsed=True, isCancelled=True) with pytest.raises(api_errors.ForbiddenError): api.mark_as_unused(booking) assert booking.isUsed # unchanged
def test_raise_if_not_yet_used(self): booking = factories.BookingFactory(isUsed=False) with pytest.raises(api_errors.ResourceGoneError): api.mark_as_unused(booking) assert not booking.isUsed # unchanged
def test_mark_as_unused(self): booking = factories.BookingFactory(isUsed=True) api.mark_as_unused(booking) assert not booking.isUsed
def _invalidate_bookings(bookings: list[Booking]) -> list[Booking]: for booking in bookings: if booking.isUsed: mark_as_unused(booking) return bookings