Beispiel #1
0
    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
Beispiel #8
0
        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