Exemplo n.º 1
0
 def test_returns_two_days_after_booking_creation_if_event_begins_in_more_than_four_days(
         self, booking_date):
     event_date_more_ten_days_from_now = booking_date + timedelta(days=6)
     booking_creation = booking_date
     assert api.compute_confirmation_date(
         event_date_more_ten_days_from_now,
         booking_creation) == booking_creation + timedelta(days=2)
Exemplo n.º 2
0
def check_is_usable(booking: Booking) -> None:
    booking_payment = payment_queries.find_by_booking_id(booking.id)
    if booking_payment is not None:
        forbidden = api_errors.ForbiddenError()
        forbidden.add_error("payment", "Cette réservation a été remboursée")
        raise forbidden

    if booking.isUsed:
        gone = api_errors.ResourceGoneError()
        gone.add_error("booking", "Cette réservation a déjà été validée")
        raise gone

    if booking.isCancelled:
        forbidden = api_errors.ForbiddenError()
        forbidden.add_error("booking", "Cette réservation a été annulée")
        raise forbidden

    is_booking_for_event_and_not_confirmed = booking.stock.beginningDatetime and not booking.isConfirmed
    if is_booking_for_event_and_not_confirmed:
        forbidden = api_errors.ForbiddenError()
        booking_date = datetime.datetime.strftime(booking.dateCreated,
                                                  "%d/%m/%Y à %H:%M")
        max_cancellation_date = datetime.datetime.strftime(
            api.compute_confirmation_date(booking.stock.beginningDatetime,
                                          booking.dateCreated),
            "%d/%m/%Y à %H:%M")

        forbidden.add_error(
            "booking",
            f"Cette réservation a été effectuée le {booking_date}. "
            f"Veuillez attendre jusqu’au {max_cancellation_date} pour valider la contremarque.",
        )
        raise forbidden
Exemplo n.º 3
0
 def test_returns_two_days_before_event_if_event_begins_between_two_and_four_days_from_now(
         self, booking_date):
     event_date_four_days_from_now = booking_date + timedelta(days=4)
     booking_creation = booking_date
     assert api.compute_confirmation_date(
         event_date_four_days_from_now,
         booking_creation) == event_date_four_days_from_now - timedelta(
             days=2)
Exemplo n.º 4
0
 def test_returns_creation_date_if_event_begins_too_soon(
         self, booking_date):
     event_date_too_close_to_cancel_booking = booking_date + timedelta(
         days=1)
     booking_creation = booking_date
     assert (api.compute_confirmation_date(
         event_date_too_close_to_cancel_booking,
         booking_creation) == booking_creation)
Exemplo n.º 5
0
def create_booking(
    user: User,
    amount: Optional[Union[Decimal, float]] = None,
    date_created: datetime = datetime.utcnow(),
    date_used: datetime = None,
    idx: int = None,
    is_cancelled: bool = False,
    is_used: bool = False,
    quantity: int = 1,
    stock: Stock = None,
    token: str = None,
    venue: VenueSQLEntity = None,
) -> Booking:
    booking = Booking()
    offerer = create_offerer(siren="987654321",
                             address="Test address",
                             city="Test city",
                             postal_code="93000",
                             name="Test name")
    if venue is None:
        venue = create_venue(
            offerer=offerer,
            name="Test offerer",
            booking_email="*****@*****.**",
            address="123 rue test",
            postal_code="93000",
            city="Test city",
            departement_code="93",
        )
    if stock is None:
        price = amount if amount is not None else 10
        product_with_thing_type = create_offer_with_thing_product(venue)
        stock = create_stock_with_thing_offer(offerer=offerer,
                                              venue=venue,
                                              offer=product_with_thing_type,
                                              price=price)

    if not stock.offer:
        stock.offer = create_offer_with_thing_product(venue)

    booking.user = user
    booking.amount = amount if amount is not None else stock.price
    booking.dateCreated = date_created
    booking.dateUsed = date_used
    booking.id = idx
    booking.isCancelled = is_cancelled
    booking.isUsed = is_used
    booking.quantity = quantity
    booking.stock = stock
    booking.token = token if token is not None else random_token()
    booking.userId = user.id
    booking.confirmationDate = bookings_api.compute_confirmation_date(
        stock.beginningDatetime, date_created)

    return booking
Exemplo n.º 6
0
def create_domain_event_booking_recap(
    payment_date: Optional[datetime] = None,
    cancellation_date: Optional[datetime] = None,
    date_used: Optional[datetime] = None,
    offer_identifier: int = 1,
    offer_name: str = "Le cirque du Soleil",
    offerer_name="Libraire de Caen",
    beneficiary_lastname: str = "Doe",
    beneficiary_firstname: str = "Jane",
    beneficiary_email: str = "*****@*****.**",
    booking_amount: float = 0,
    booking_token: str = "CIRQUE",
    booking_date: datetime = datetime(2020, 3, 14, 19, 5, 3, 0),
    booking_is_duo: bool = False,
    booking_is_used: bool = False,
    booking_is_cancelled: bool = False,
    booking_is_reimbursed: bool = False,
    booking_is_confirmed: bool = False,
    event_beginning_datetime: datetime = datetime(2020, 5, 26, 20, 30, 0, 0),
    venue_identifier: int = 1,
    venue_name="Librairie Kléber",
    venue_is_virtual=False,
) -> EventBookingRecap:
    return EventBookingRecap(
        offer_identifier=offer_identifier,
        offer_name=offer_name,
        offerer_name=offerer_name,
        beneficiary_lastname=beneficiary_lastname,
        beneficiary_firstname=beneficiary_firstname,
        beneficiary_email=beneficiary_email,
        booking_amount=booking_amount,
        booking_token=booking_token,
        booking_date=booking_date,
        booking_is_duo=booking_is_duo,
        booking_is_used=booking_is_used,
        booking_is_cancelled=booking_is_cancelled,
        booking_is_confirmed=booking_is_confirmed,
        booking_is_reimbursed=booking_is_reimbursed,
        event_beginning_datetime=event_beginning_datetime,
        venue_identifier=venue_identifier,
        cancellation_date=cancellation_date,
        confirmation_date=compute_confirmation_date(event_beginning_datetime,
                                                    booking_date),
        payment_date=payment_date,
        date_used=date_used,
        venue_name=venue_name,
        venue_is_virtual=venue_is_virtual,
    )
Exemplo n.º 7
0
 def test_returns_none_if_no_event_beginning(self, booking_date):
     event_beginning = None
     booking_creation = booking_date
     assert api.compute_confirmation_date(event_beginning,
                                          booking_creation) is None
Exemplo n.º 8
0
 def _get_cancellation_limit_datetime(stock: Stock) -> Optional[datetime]:
     # compute date as if it were booked now
     return compute_confirmation_date(stock.beginningDatetime,
                                      datetime.now())