def test_should_return_json_with_event_date_additional_parameter_for_event_stock(self, app: fixture): # Given booking_date = datetime(2020, 1, 1, 10, 0, 0) day_after_booking_date = booking_date + timedelta(days=1) event_booking_recap = create_domain_booking_recap( offer_name="Cirque du soleil", offerer_name="Fondation des cirques de France", beneficiary_firstname="Hari", beneficiary_lastname="Seldon", beneficiary_email="*****@*****.**", booking_date=booking_date, booking_token="SOLEIL", event_beginning_datetime=day_after_booking_date, ) bookings_recap = [event_booking_recap] bookings_recap_paginated_response = BookingsRecapPaginated( bookings_recap=list(bookings_recap), page=0, pages=1, total=2 ) # When results = serialize_bookings_recap_paginated(bookings_recap_paginated_response) # Then expected_response = [ { "stock": { "offer_name": "Cirque du soleil", "offer_identifier": humanize(event_booking_recap.offer_identifier), "event_beginning_datetime": format_into_timezoned_date(day_after_booking_date), "offer_isbn": None, "offer_is_educational": False, }, "beneficiary": { "lastname": "Seldon", "firstname": "Hari", "email": "*****@*****.**", "phonenumber": "0100000000", }, "booking_date": format_into_timezoned_date(booking_date), "booking_token": "SOLEIL", "booking_status": "booked", "booking_is_duo": False, "booking_status_history": [ { "status": "booked", "date": "2020-01-01T10:00:00", }, ], "booking_amount": 0, "offerer": {"name": "Fondation des cirques de France"}, "venue": {"identifier": "AE", "name": "Librairie Kléber", "is_virtual": False}, }, ] assert results["bookings_recap"] == expected_response assert results["page"] == 0 assert results["pages"] == 1 assert results["total"] == 2
def _serialize_booking_recap(booking_recap: BookingRecap) -> dict[str, Any]: serialized_booking_recap = { "stock": { "offer_name": booking_recap.offer_name, "offer_identifier": humanize(booking_recap.offer_identifier), "event_beginning_datetime": format_into_timezoned_date(booking_recap.event_beginning_datetime) if booking_recap.event_beginning_datetime else None, "offer_isbn": booking_recap.offer_isbn, "offer_is_educational": booking_recap.booking_is_educational, }, "beneficiary": { "lastname": booking_recap.beneficiary_lastname or booking_recap.redactor_lastname, "firstname": booking_recap.beneficiary_firstname or booking_recap.redactor_firstname, "email": booking_recap.beneficiary_email or booking_recap.redactor_email, "phonenumber": booking_recap.beneficiary_phonenumber, }, "booking_token": booking_recap.booking_token, "booking_date": format_into_timezoned_date(booking_recap.booking_date), "booking_status": booking_recap.booking_status.value, "booking_is_duo": booking_recap.booking_is_duo, "booking_amount": booking_recap.booking_amount, "booking_status_history": _serialize_booking_status_history( booking_recap.booking_status_history), } if isinstance(booking_recap, BookingRecapLegacy): serialized_booking_recap.update({ "offerer": { "name": booking_recap.offerer_name }, "venue": { "identifier": humanize(booking_recap.venue_identifier), "is_virtual": booking_recap.venue_is_virtual, "name": booking_recap.venue_name, }, }) return serialized_booking_recap
def _serialize_booking_recap(booking_recap: BookingRecap) -> Dict[str, Any]: serialized_booking_recap = { "stock": { "type": "thing", "offer_name": booking_recap.offer_name, "offer_identifier": humanize(booking_recap.offer_identifier), }, "beneficiary": { "lastname": booking_recap.beneficiary_lastname, "firstname": booking_recap.beneficiary_firstname, "email": booking_recap.beneficiary_email, }, "booking_token": booking_recap.booking_token, "booking_date": format_into_timezoned_date(booking_recap.booking_date), "booking_status": booking_recap.booking_status.value, "booking_is_duo": booking_recap.booking_is_duo, "booking_amount": booking_recap.booking_amount, "booking_status_history": _serialize_booking_status_history( booking_recap.booking_status_history), "offerer": { "name": booking_recap.offerer_name }, "venue": { "identifier": humanize(booking_recap.venue_identifier), "is_virtual": booking_recap.venue_is_virtual, "name": booking_recap.venue_name, }, } if isinstance(booking_recap, EventBookingRecap): serialized_booking_recap["stock"]["type"] = "event" serialized_booking_recap["stock"][ "event_beginning_datetime"] = format_into_timezoned_date( booking_recap.event_beginning_datetime) if isinstance(booking_recap, BookBookingRecap): serialized_booking_recap["stock"]["type"] = "book" serialized_booking_recap["stock"][ "offer_isbn"] = booking_recap.offer_isbn return serialized_booking_recap
def test_should_return_json_with_offer_isbn_additional_parameter_for_thing_stock(self, app: fixture): # Given booking_date = datetime(2020, 1, 1, 10, 0, 0) thing_booking_recap = create_domain_thing_booking_recap( offer_identifier=1, offer_name="Martine a la playa", offer_isbn="987654345678", offerer_name="La maman de Martine", beneficiary_firstname="Hari", beneficiary_lastname="Seldon", beneficiary_email="*****@*****.**", booking_date=booking_date, booking_token="LUNE", ) bookings_recap = [thing_booking_recap] bookings_recap_paginated_response = BookingsRecapPaginated( bookings_recap=list(bookings_recap), page=0, pages=1, total=2 ) # When results = serialize_bookings_recap_paginated(bookings_recap_paginated_response) # Then expected_response = [ { "stock": { "type": "book", "offer_name": "Martine a la playa", "offer_identifier": humanize(thing_booking_recap.offer_identifier), "offer_isbn": "987654345678", }, "beneficiary": { "lastname": "Seldon", "firstname": "Hari", "email": "*****@*****.**", }, "booking_date": format_into_timezoned_date(booking_date), "booking_token": None, "booking_status": "booked", "booking_is_duo": False, "booking_amount": 0, "booking_status_history": [ { "status": "booked", "date": "2020-01-01T10:00:00", }, ], "offerer": {"name": "La maman de Martine"}, "venue": {"identifier": "AE", "name": "Librairie Kléber", "is_virtual": False}, }, ] assert results["bookings_recap"] == expected_response assert results["page"] == 0 assert results["pages"] == 1 assert results["total"] == 2
def _serialize_booking_status_info( booking_status: BookingRecapStatus, booking_status_date: datetime) -> Dict[str, str]: serialized_booking_status_date = format_into_timezoned_date( booking_status_date) if booking_status_date else None return { "status": booking_status.value, "date": serialized_booking_status_date, }
def test_should_return_json_with_all_parameters_for_thing_stock(self, app: fixture): # Given booking_date = datetime(2020, 1, 1, 10, 0, 0) thing_booking_recap = create_domain_thing_booking_recap( offer_identifier=1, offer_name="Fondation", offerer_name="Fondation de Caen", beneficiary_firstname="Hari", beneficiary_lastname="Seldon", beneficiary_email="*****@*****.**", booking_date=booking_date, booking_token="FOND", booking_is_used=False, booking_amount=18, ) thing_booking_recap_2 = create_domain_thing_booking_recap( offer_identifier=2, offer_name="Fondation", offerer_name="Fondation de Paris", beneficiary_firstname="Golan", beneficiary_lastname="Trevize", beneficiary_email="*****@*****.**", booking_date=booking_date, booking_token="FOND", booking_is_duo=True, ) bookings_recap = [thing_booking_recap, thing_booking_recap_2] bookings_recap_paginated_response = BookingsRecapPaginated( bookings_recap=list(bookings_recap), page=0, pages=1, total=2 ) # When result = serialize_bookings_recap_paginated(bookings_recap_paginated_response) # Then expected_bookings_recap = [ { "stock": { "type": "thing", "offer_name": "Fondation", "offer_identifier": humanize(thing_booking_recap.offer_identifier), }, "beneficiary": { "lastname": "Seldon", "firstname": "Hari", "email": "*****@*****.**", }, "booking_date": format_into_timezoned_date(booking_date), "booking_token": None, "booking_status": "booked", "booking_is_duo": False, "booking_status_history": [ { "status": "booked", "date": "2020-01-01T10:00:00", }, ], "booking_amount": 18, "offerer": {"name": "Fondation de Caen"}, "venue": {"identifier": "AE", "name": "Librairie Kléber", "is_virtual": False}, }, { "stock": { "type": "thing", "offer_name": "Fondation", "offer_identifier": humanize(thing_booking_recap_2.offer_identifier), }, "beneficiary": { "lastname": "Trevize", "firstname": "Golan", "email": "*****@*****.**", }, "booking_date": format_into_timezoned_date(booking_date), "booking_token": None, "booking_status": "booked", "booking_is_duo": True, "booking_status_history": [ { "status": "booked", "date": "2020-01-01T10:00:00", }, ], "booking_amount": 0, "offerer": {"name": "Fondation de Paris"}, "venue": {"identifier": "AE", "name": "Librairie Kléber", "is_virtual": False}, }, ] assert result["bookings_recap"] == expected_bookings_recap assert result["page"] == 0 assert result["pages"] == 1 assert result["total"] == 2
def when_user_is_linked_to_a_valid_offerer(self, app): booking = bookings_factories.UsedIndividualBookingFactory( dateCreated=datetime(2020, 8, 11, 12, 0, 0), dateUsed=datetime(2020, 8, 13, 12, 0, 0), token="ABCDEF", individualBooking__user__email="*****@*****.**", individualBooking__user__firstName="Hermione", individualBooking__user__lastName="Granger", individualBooking__user__phoneNumber="0100000000", ) pro_user = users_factories.ProFactory(email="*****@*****.**") offers_factories.UserOffererFactory(user=pro_user, offerer=booking.offerer) client = TestClient(app.test_client()).with_session_auth(pro_user.email) with assert_num_queries( testing.AUTHENTICATION_QUERIES + 2 + 1 # TODO: query for feature flag, to be removed when IMPROVE_BOOKINGS_PERF is definitely adopted ): response = client.get(f"/bookings/pro?{BOOKING_PERIOD_PARAMS}") expected_bookings_recap = [ { "stock": { "offer_name": booking.stock.offer.name, "offer_identifier": humanize(booking.stock.offer.id), "offer_is_educational": False, "event_beginning_datetime": None, "offer_isbn": None, }, "beneficiary": { "email": "*****@*****.**", "firstname": "Hermione", "lastname": "Granger", "phonenumber": "0100000000", }, "booking_date": format_into_timezoned_date( booking.dateCreated.astimezone(tz.gettz("Europe/Paris")), ), "booking_amount": 10.0, "booking_token": "ABCDEF", "booking_status": "validated", "booking_is_duo": False, "booking_status_history": [ { "status": "booked", "date": format_into_timezoned_date( booking.dateCreated.astimezone(tz.gettz("Europe/Paris")), ), }, { "status": "validated", "date": format_into_timezoned_date( booking.dateUsed.astimezone(tz.gettz("Europe/Paris")), ), }, ], } ] assert response.status_code == 200 assert response.json["bookings_recap"] == expected_bookings_recap assert response.json["page"] == 1 assert response.json["pages"] == 1 assert response.json["total"] == 1
def when_user_is_linked_to_a_valid_offerer(self, app): booking = bookings_factories.BookingFactory( dateCreated=datetime(2020, 4, 3, 12, 0, 0), isUsed=True, dateUsed=datetime(2020, 5, 3, 12, 0, 0), token="ABCDEF", user__email="*****@*****.**", user__firstName="Hermione", user__lastName="Granger", ) pro_user = users_factories.UserFactory(email="*****@*****.**") offerer = booking.stock.offer.venue.managingOfferer offers_factories.UserOffererFactory(user=pro_user, offerer=offerer) client = TestClient(app.test_client()).with_auth(pro_user.email) response = client.get("/bookings/pro") expected_bookings_recap = [{ "stock": { "type": "thing", "offer_name": booking.stock.offer.name, "offer_identifier": humanize(booking.stock.offer.id), }, "beneficiary": { "email": "*****@*****.**", "firstname": "Hermione", "lastname": "Granger", }, "booking_date": format_into_timezoned_date( booking.dateCreated.astimezone( tz.gettz("Europe/Paris")), ), "booking_amount": 10.0, "booking_token": "ABCDEF", "booking_status": "validated", "booking_is_duo": False, "booking_status_history": [ { "status": "booked", "date": format_into_timezoned_date( booking.dateCreated.astimezone( tz.gettz("Europe/Paris")), ), }, { "status": "validated", "date": format_into_timezoned_date( booking.dateUsed.astimezone( tz.gettz("Europe/Paris")), ), }, ], "offerer": { "name": offerer.name, }, "venue": { "identifier": humanize(booking.stock.offer.venue.id), "is_virtual": booking.stock.offer.venue.isVirtual, "name": booking.stock.offer.venue.name, }, }] assert response.status_code == 200 assert response.json["bookings_recap"] == expected_bookings_recap assert response.json["page"] == 1 assert response.json["pages"] == 1 assert response.json["total"] == 1