def test_raises_api_error_when_offerer_cancellation_and_used_booking(self): # Given booking = Booking() booking.isUsed = True # When with pytest.raises(ApiErrors) as e: check_booking_is_cancellable(booking, is_user_cancellation=False) # Then assert e.value.errors['booking'] == ["Impossible d\'annuler une réservation consommée"]
def test_is_countermak_validated_label_when_booking_is_used(self): # Given booking = Booking() booking.stock = Stock() booking.isUsed = True # When statusLabel = booking.statusLabel # Then assert statusLabel == 'Contremarque validée'
def test_raises_resource_gone_error_if_is_used(self): # Given booking = Booking() booking.isUsed = True booking.stock = Stock() # When with pytest.raises(ResourceGoneError) as e: check_booking_is_usable(booking) assert e.value.errors['booking'] == [ 'Cette réservation a déjà été validée']
def create_booking_for(user: User, stock: Stock, token: str) -> Booking: booking = Booking() booking.stock = stock booking.user = user booking.quantity = 1 booking.amount = 0 booking.dateCreated = datetime.utcnow() booking.isCancelled = False booking.isUsed = False booking.token = token return booking
def test_does_not_raise_api_error_when_user_cancellation_and_event_in_more_than_72h(self): # Given booking = Booking() booking.isUsed = False booking.stock = Stock() booking.stock.beginningDatetime = datetime.utcnow() + timedelta(hours=73) # When check_output = check_booking_is_cancellable(booking, is_user_cancellation=False) # Then assert check_output is None
def test_does_not_raise_api_error_when_offerer_cancellation_not_used_and_thing(self): # Given booking = Booking() booking.isUsed = False booking.stock = Stock() booking.stock.offer = Offer() booking.stock.offer.product = create_product_with_thing_type() # When check_output = check_booking_is_cancellable(booking, is_user_cancellation=False) # Then assert check_output is None
def test_raises_api_error_when_user_cancellation_and_event_in_less_than_72h(self): # Given booking = Booking() booking.isUsed = False booking.stock = Stock() booking.stock.beginningDatetime = datetime.utcnow() + timedelta(hours=71) # When with pytest.raises(ApiErrors) as e: check_booking_is_cancellable(booking, is_user_cancellation=True) # Then assert e.value.errors['booking'] == [ "Impossible d\'annuler une réservation moins de 72h avant le début de l'évènement"]
def test_does_not_raise_error_if_not_cancelled_nor_used_and_no_beginning_datetime(self): # Given booking = Booking() booking.isUsed = False booking.isCancelled = False booking.stock = Stock() booking.stock.beginningDatetime = None # When try: check_booking_is_usable(booking) except ApiErrors: pytest.fail( 'Bookings which are not used nor cancelled and do not have a beginning datetime should be usable')
def test_raises_resource_gone_error_if_stock_beginning_datetime_in_more_than_72_hours(self): # Given in_four_days = datetime.utcnow() + timedelta(days=4) booking = Booking() booking.isUsed = False booking.isCancelled = False booking.stock = Stock() booking.stock.beginningDatetime = in_four_days # When with pytest.raises(ForbiddenError) as e: check_booking_is_usable(booking) assert e.value.errors['beginningDatetime'] == [ 'Vous ne pouvez pas valider cette contremarque plus de 72h avant le début de l\'évènement']
def test_does_not_raise_error_if_not_cancelled_nor_used_and_beginning_datetime_in_less_than_72_hours(self): # Given in_two_days = datetime.utcnow() + timedelta(days=2) booking = Booking() booking.isUsed = False booking.isCancelled = False booking.stock = Stock() booking.stock.beginningDatetime = in_two_days # When try: check_booking_is_usable(booking) except ApiErrors: pytest.fail( 'Bookings which are not used nor cancelled and do not have a beginning datetime should be usable')
def create_booking(user, stock=None, venue=None, recommendation=None, quantity=1, date_created=datetime.utcnow(), date_used=None, is_cancelled=False, is_used=False, token=None, idx=None, amount=None): booking = Booking() if venue is None: offerer = create_offerer('987654321', 'Test address', 'Test city', '93000', 'Test name') venue = create_venue(offerer, 'Test offerer', '*****@*****.**', '123 rue test', '93000', 'Test city', '93') if stock is None: product_with_thing_type = create_offer_with_thing_product(venue) stock = create_stock_with_thing_offer(offerer, venue, product_with_thing_type, price=10) booking.stock = stock booking.user = user if token is None: booking.token = random_token() else: booking.token = token if amount is None: booking.amount = stock.price else: booking.amount = amount booking.quantity = quantity booking.dateCreated = date_created if recommendation: booking.recommendation = recommendation elif not stock.offer: offer = create_offer_with_thing_product(venue) booking.recommendation = create_recommendation(offer, user) else: booking.recommendation = create_recommendation(stock.offer, user) booking.isCancelled = is_cancelled booking.isUsed = is_used booking.dateUsed = date_used if idx: booking.id = idx return booking