Ejemplo n.º 1
0
    def when_booking_already_validated(self, app):
        # Given
        user = create_user()
        admin_user = create_user(email="*****@*****.**")
        offerer = create_offerer()
        user_offerer = create_user_offerer(admin_user, offerer)
        venue = create_venue(offerer)
        stock = create_stock_with_event_offer(
            offerer,
            venue,
            price=0,
            beginning_datetime=tomorrow,
            booking_limit_datetime=tomorrow_minus_one_hour)
        booking = create_booking(user=user, stock=stock, venue=venue)
        booking.isUsed = True
        repository.save(booking, user_offerer)
        booking_id = booking.id

        url = "/bookings/token/{}".format(booking.token)

        # When
        response = TestClient(
            app.test_client()).with_auth("*****@*****.**").patch(url)

        # Then
        assert response.status_code == 410
        assert response.json["booking"] == [
            "Cette réservation a déjà été validée"
        ]
        assert Booking.query.get(booking_id).isUsed
Ejemplo n.º 2
0
    def when_user_not_editor_and_valid_email(self, app):
        # Given
        user = create_user()
        admin_user = create_user(email="*****@*****.**")
        offerer = create_offerer()
        venue = create_venue(offerer)
        stock = create_stock_with_event_offer(
            offerer,
            venue,
            price=0,
            beginning_datetime=tomorrow,
            booking_limit_datetime=tomorrow_minus_one_hour)
        booking = create_booking(user=user, stock=stock, venue=venue)
        repository.save(booking, admin_user)
        booking_id = booking.id
        url = "/bookings/token/{}?email={}".format(booking.token, user.email)

        # When
        response = TestClient(
            app.test_client()).with_auth("*****@*****.**").patch(url)

        # Then
        assert response.status_code == 403
        assert response.json["global"] == [
            "Vous n'avez pas les droits d'accès suffisant pour accéder à cette information."
        ]
        assert not Booking.query.get(booking_id).isUsed
Ejemplo n.º 3
0
    def when_user_not_editor_and_valid_email_but_invalid_offer_id(self, app):
        # Given
        user = create_user()
        admin_user = create_user(email="*****@*****.**")
        offerer = create_offerer()
        venue = create_venue(offerer)
        stock = create_stock_with_event_offer(
            offerer,
            venue,
            price=0,
            beginning_datetime=tomorrow,
            booking_limit_datetime=tomorrow_minus_one_hour)
        booking = create_booking(user=user, stock=stock, venue=venue)
        repository.save(booking, admin_user)
        booking_id = booking.id
        url = "/bookings/token/{}?email={}&offer_id={}".format(
            booking.token, user.email, humanize(123))

        # When
        response = TestClient(
            app.test_client()).with_auth("*****@*****.**").patch(url)

        # Then
        assert response.status_code == 404
        assert not Booking.query.get(booking_id).isUsed
        def when_non_standard_origin_header(self, app):
            # Given
            user = create_user()
            admin_user = create_user(email="*****@*****.**")
            offerer = create_offerer()
            user_offerer = create_user_offerer(admin_user, offerer)
            venue = create_venue(offerer)
            stock = create_stock_with_event_offer(
                offerer,
                venue,
                price=0,
                beginning_datetime=datetime.utcnow() + timedelta(hours=46),
                booking_limit_datetime=datetime.utcnow() + timedelta(hours=24),
            )
            booking = create_booking(user=user, stock=stock, venue=venue)
            repository.save(booking, user_offerer)
            url = f"/v2/bookings/token/{booking.token}"

            # When
            response = (
                TestClient(app.test_client())
                .with_auth("*****@*****.**")
                .get(url, headers={"origin": "http://random_header.fr"})
            )

            # Then
            assert response.status_code == 200
        def when_api_key_given_not_related_to_booking_offerer(self, app):
            # Given
            user = create_user(email="*****@*****.**")
            pro_user = create_user(email="*****@*****.**")
            offerer = create_offerer()
            offerer2 = create_offerer(siren="987654321")
            user_offerer = create_user_offerer(pro_user, offerer)
            venue = create_venue(offerer)
            stock = create_stock_with_event_offer(offerer, venue, price=0, event_type=EventType.CINEMA)
            booking = create_booking(user=user, stock=stock, venue=venue)

            repository.save(pro_user, booking, user_offerer, offerer2)

            offerer_api_key = create_api_key(offerer_id=offerer2.id)
            repository.save(offerer_api_key)

            user2ApiKey = "Bearer " + offerer_api_key.value

            # When
            url = "/v2/bookings/use/token/{}".format(booking.token)
            response = TestClient(app.test_client()).patch(
                url, headers={"Authorization": user2ApiKey, "Origin": "http://localhost"}
            )

            # Then
            assert response.status_code == 403
            assert response.json["user"] == ["Vous n'avez pas les droits suffisants pour valider cette contremarque."]
        def when_api_key_is_provided_and_booking_has_not_been_validated_already(self, app):
            # Given
            user = create_user()
            pro_user = create_user(email="*****@*****.**")
            offerer = create_offerer()
            user_offerer = create_user_offerer(pro_user, offerer)
            venue = create_venue(offerer)
            stock = create_stock_with_event_offer(offerer, venue, price=0)
            booking = create_booking(user=user, stock=stock, venue=venue)
            repository.save(booking, user_offerer)

            offererApiKey = create_api_key(offerer_id=offerer.id)
            repository.save(offererApiKey)

            # When
            url = "/v2/bookings/keep/token/{}".format(booking.token)
            user2_api_key = "Bearer " + offererApiKey.value

            response = TestClient(app.test_client()).patch(
                url, headers={"Authorization": user2_api_key, "Origin": "http://localhost"}
            )
            # Then
            assert response.status_code == 410
            assert response.json["booking"] == ["Cette réservation n'a pas encore été validée"]
            assert Booking.query.get(booking.id).isUsed is False
        def when_api_key_is_provided_and_booking_payment_exists(self, app):
            # Given
            user = create_user()
            pro_user = create_user(email="*****@*****.**")
            offerer = create_offerer()
            user_offerer = create_user_offerer(pro_user, offerer)
            venue = create_venue(offerer)
            stock = create_stock_with_event_offer(offerer, venue, price=0)

            booking = create_booking(user=user, stock=stock, venue=venue, is_used=True)
            payment = create_payment(booking, offerer, Decimal(10), iban="CF13QSDFGH456789", bic="QSDFGH8Z555")

            repository.save(booking, user_offerer, payment)

            offererApiKey = create_api_key(offerer_id=offerer.id)
            repository.save(offererApiKey)

            # When
            url = "/v2/bookings/keep/token/{}".format(booking.token)
            user2_api_key = "Bearer " + offererApiKey.value

            response = TestClient(app.test_client()).patch(
                url, headers={"Authorization": user2_api_key, "Origin": "http://localhost"}
            )
            # Then
            assert response.status_code == 410
            assert response.json["payment"] == ["Le remboursement est en cours de traitement"]
            assert Booking.query.get(booking.id).isUsed is True
Ejemplo n.º 8
0
def test_queryNotSoftDeleted_should_not_return_soft_deleted(app):
    # Given
    offerer = create_offerer()
    venue = create_venue(offerer)
    stock = create_stock_with_event_offer(offerer, venue)
    stock.isSoftDeleted = True
    repository.save(stock)

    # When
    result = Stock.queryNotSoftDeleted().all()

    # Then
    assert not result
Ejemplo n.º 9
0
    def test_is_expired_when_stock_is_an_event_in_the_past(self):
        # Given
        offerer = create_offerer()
        venue = create_venue(offerer)
        one_day_in_the_past = datetime.utcnow() - timedelta(hours=24)
        stock = create_stock_with_event_offer(
            offerer=offerer,
            venue=venue,
            beginning_datetime=one_day_in_the_past)

        # When
        is_event_expired = stock.isEventExpired

        # Then
        assert is_event_expired is True
Ejemplo n.º 10
0
    def test_is_not_expired_when_stock_is_an_event_in_the_future(self):
        # Given
        offerer = create_offerer()
        venue = create_venue(offerer)
        three_days_from_now = datetime.utcnow() + timedelta(hours=72)
        stock = create_stock_with_event_offer(
            offerer=offerer,
            venue=venue,
            beginning_datetime=three_days_from_now)

        # When
        is_event_expired = stock.isEventExpired

        # Then
        assert is_event_expired is False
Ejemplo n.º 11
0
    def test_is_deletable_when_stock_is_an_event_in_the_future(self):
        # Given
        offerer = create_offerer()
        venue = create_venue(offerer)
        three_days_from_now = datetime.utcnow() + timedelta(hours=72)
        stock = create_stock_with_event_offer(
            offerer=offerer,
            venue=venue,
            beginning_datetime=three_days_from_now)

        # When
        is_event_deletable = stock.isEventDeletable

        # Then
        assert is_event_deletable is True
    def when_booking_is_not_provided_at_all(self, app):
        # Given
        user = create_user(email="*****@*****.**")
        offerer = create_offerer()
        venue = create_venue(offerer)
        stock = create_stock_with_event_offer(offerer, venue, price=0)
        booking = create_booking(user=user, stock=stock, venue=venue)

        repository.save(booking)

        # When
        url = "/v2/bookings/use/token/"
        response = TestClient(app.test_client()).patch(url)

        # Then
        assert response.status_code == 404
    def when_user_not_logged_in_and_doesnt_give_api_key(self, app):
        # Given
        user = create_user(email="*****@*****.**")
        offerer = create_offerer()
        venue = create_venue(offerer)
        stock = create_stock_with_event_offer(offerer, venue, price=0)
        booking = create_booking(user=user, stock=stock, venue=venue)

        repository.save(booking)

        # When
        url = "/v2/bookings/use/token/{}".format(booking.token)
        response = TestClient(app.test_client()).patch(url)

        # Then
        assert response.status_code == 401
Ejemplo n.º 14
0
        def when_offer_id_is_missing(self, app):
            # Given
            user = create_user()
            offerer = create_offerer()
            venue = create_venue(offerer)
            stock = create_stock_with_event_offer(offerer, venue, price=0)
            booking = create_booking(user=user, stock=stock, venue=venue)
            repository.save(booking)
            url = "/bookings/token/{}?email={}".format(booking.token, user.email)

            # When
            response = TestClient(app.test_client()).patch(url)

            # Then
            assert response.status_code == 400
            assert response.json["offer_id"] == ["L'id de l'offre réservée est obligatoire dans l'URL [?offer_id=<id>]"]
Ejemplo n.º 15
0
    def test_is_not_deletable_when_stock_is_expired_since_more_than_event_automatic_refund_delay(
            self):
        # Given
        offerer = create_offerer()
        venue = create_venue(offerer)
        expired_date_and_automaticaly_refunded = datetime.utcnow(
        ) - EVENT_AUTOMATIC_REFUND_DELAY_FOR_TEST
        stock = create_stock_with_event_offer(
            offerer=offerer,
            venue=venue,
            beginning_datetime=expired_date_and_automaticaly_refunded)

        # When
        is_event_deletable = stock.isEventDeletable

        # Then
        assert is_event_deletable is False
        def when_user_is_logged_in_and_booking_does_not_exist(self, app):
            # Given
            user = create_user()
            pro_user = create_user(email="*****@*****.**")
            offerer = create_offerer()
            user_offerer = create_user_offerer(pro_user, offerer)
            venue = create_venue(offerer)
            stock = create_stock_with_event_offer(offerer, venue, price=0)
            booking = create_booking(user=user, stock=stock, venue=venue)
            repository.save(booking, user_offerer)

            # When
            url = "/v2/bookings/use/token/{}".format("123456")
            response = TestClient(app.test_client()).with_auth("*****@*****.**").patch(url)

            # Then
            assert response.status_code == 404
            assert response.json["global"] == ["Cette contremarque n'a pas été trouvée"]
Ejemplo n.º 17
0
        def when_booking_does_not_exist(self, app):
            # Given
            user = create_user()
            offerer = create_offerer()
            venue = create_venue(offerer)
            stock = create_stock_with_event_offer(offerer, venue, price=0)
            booking = create_booking(user=user, stock=stock, venue=venue)
            repository.save(booking)
            url = "/bookings/token/{}?email={}&offer_id={}".format(
                booking.token, "*****@*****.**", humanize(stock.offer.id)
            )

            # When
            response = TestClient(app.test_client()).patch(url)

            # Then
            assert response.status_code == 404
            assert response.json["global"] == ["Cette contremarque n'a pas été trouvée"]
Ejemplo n.º 18
0
    def test_should_send_cancellation_by_offerer_email_only_to_administration_when_no_booking_email_provided(
            self, make_offerer_driven_cancellation_email_for_offerer):
        # Given
        user = create_user(email="*****@*****.**")
        offerer = create_offerer()
        venue = create_venue(offerer)
        stock = create_stock_with_event_offer(offerer, venue)
        stock.offer.bookingEmail = None
        booking = create_booking(user=user, stock=stock)

        # When
        send_offerer_driven_cancellation_email_to_offerer(booking)

        # Then
        make_offerer_driven_cancellation_email_for_offerer.assert_called_once_with(
            booking)
        assert mails_testing.outbox[0].sent_data[
            "To"] == "*****@*****.**"
Ejemplo n.º 19
0
        def when_email_is_missing(self, app):
            # Given
            user = create_user()
            offerer = create_offerer()
            venue = create_venue(offerer)
            stock = create_stock_with_event_offer(offerer, venue, price=0)
            booking = create_booking(user=user, stock=stock, venue=venue)
            repository.save(booking)
            url = "/bookings/token/{}?&offer_id={}".format(booking.token, humanize(stock.offer.id))

            # When
            response = TestClient(app.test_client()).patch(url)

            # Then
            assert response.status_code == 400
            assert response.json["email"] == [
                "L'adresse email qui a servie à la réservation est obligatoire dans l'URL [?email=<email>]"
            ]
Ejemplo n.º 20
0
        def when_user_is_not_editor_and_email_does_not_match(self, app):
            # Given
            user = create_user()
            admin_user = create_user(email="*****@*****.**")
            offerer = create_offerer()
            venue = create_venue(offerer)
            stock = create_stock_with_event_offer(offerer, venue, price=0)
            booking = create_booking(user=user, stock=stock, venue=venue)
            repository.save(booking, admin_user)
            booking_id = booking.id
            url = "/bookings/token/{}?email={}".format(booking.token, "*****@*****.**")

            # When
            response = TestClient(app.test_client()).with_auth("*****@*****.**").patch(url)

            # Then
            assert response.status_code == 404
            assert Booking.query.get(booking_id).isUsed is False
        def when_user_is_not_attached_to_linked_offerer(self, app):
            # Given
            user = create_user()
            pro_user = create_user(email="*****@*****.**")
            offerer = create_offerer()
            venue = create_venue(offerer)
            stock = create_stock_with_event_offer(offerer, venue, price=0)
            booking = create_booking(user=user, stock=stock, venue=venue)
            repository.save(booking, pro_user)
            booking_id = booking.id
            url = f"/v2/bookings/use/token/{booking.token}"

            # When
            response = TestClient(app.test_client()).with_auth("*****@*****.**").patch(url)

            # Then
            assert response.status_code == 403
            assert response.json["user"] == ["Vous n'avez pas les droits suffisants pour valider cette contremarque."]
            assert Booking.query.get(booking_id).isUsed is False
        def when_api_key_is_provided_and_booking_has_been_cancelled_already(self, app):
            # Given
            user = create_user()
            pro_user = create_user(email="*****@*****.**")
            offerer = create_offerer()
            user_offerer = create_user_offerer(pro_user, offerer)
            venue = create_venue(offerer)
            stock = create_stock_with_event_offer(offerer, venue, price=0)
            booking = create_booking(user=user, stock=stock, venue=venue, is_cancelled=True)
            repository.save(booking, user_offerer)
            url = f"/v2/bookings/use/token/{booking.token}"

            # When
            response = TestClient(app.test_client()).with_auth(pro_user.email).patch(url)

            # Then
            assert response.status_code == 403
            assert response.json["booking"] == ["Cette réservation a été annulée"]
            assert Booking.query.get(booking.id).isUsed is False
        def when_user_is_logged_in_and_booking_token_is_null(self, app):
            # Given
            user = create_user()
            pro_user = create_user(email="*****@*****.**")
            offerer = create_offerer()
            user_offerer = create_user_offerer(pro_user, offerer)
            venue = create_venue(offerer)
            stock = create_stock_with_event_offer(offerer, venue, price=0)

            booking = create_booking(user=user, stock=stock, venue=venue)

            repository.save(booking, user_offerer)

            # When
            url = "/v2/bookings/keep/token/"
            response = TestClient(app.test_client()).with_auth("*****@*****.**").patch(url)

            # Then
            assert response.status_code == 404
        def when_api_key_is_provided_and_booking_has_been_refunded(self, app):
            # Given
            user = create_user()
            pro_user = create_user(email="*****@*****.**")
            offerer = create_offerer()
            user_offerer = create_user_offerer(pro_user, offerer)
            venue = create_venue(offerer)
            stock = create_stock_with_event_offer(offerer, venue, price=0)
            booking = create_booking(user=user, stock=stock, venue=venue, is_used=True)
            payment = create_payment(booking=booking, offerer=offerer)
            repository.save(payment, user_offerer)

            # When
            url = f"/v2/bookings/use/token/{booking.token}"
            response = TestClient(app.test_client()).with_auth(pro_user.email).patch(url)

            # Then
            assert response.status_code == 403
            assert response.json["payment"] == ["Cette réservation a été remboursée"]
        def when_user_is_logged_in_and_booking_has_not_been_validated_already(self, app):
            # Given
            user = create_user()
            pro_user = create_user(email="*****@*****.**")
            offerer = create_offerer()
            user_offerer = create_user_offerer(pro_user, offerer)
            venue = create_venue(offerer)
            stock = create_stock_with_event_offer(offerer, venue, price=0)

            booking = create_booking(user=user, stock=stock, venue=venue)
            repository.save(booking, user_offerer)

            # When
            url = "/v2/bookings/keep/token/{}".format(booking.token)
            response = TestClient(app.test_client()).with_auth("*****@*****.**").patch(url)

            # Then
            assert response.status_code == 410
            assert response.json["booking"] == ["Cette réservation n'a pas encore été validée"]
            assert Booking.query.get(booking.id).isUsed is False
    def test_should_send_cancellation_by_offerer_email_to_offerer(
            self, make_offerer_driven_cancellation_email_for_offerer):
        # Given
        user = users_factories.BeneficiaryGrant18Factory.build(
            email="*****@*****.**")
        offerer = create_offerer()
        venue = create_venue(offerer)
        venue.bookingEmail = "*****@*****.**"
        stock = create_stock_with_event_offer(offerer, venue)
        stock.offer.bookingEmail = "*****@*****.**"
        booking = create_booking(user=user, stock=stock)

        # When
        send_offerer_driven_cancellation_email_to_offerer(booking)

        # Then
        make_offerer_driven_cancellation_email_for_offerer.assert_called_once_with(
            booking)
        assert len(mails_testing.outbox) == 1  # test number of emails sent
        assert mails_testing.outbox[0].sent_data["To"] == "*****@*****.**"
        def when_api_key_is_provided_and_booking_has_been_validated_already(self, app):
            # Given
            user = create_user()
            pro_user = create_user(email="*****@*****.**")
            offerer = create_offerer()
            user_offerer = create_user_offerer(pro_user, offerer)
            venue = create_venue(offerer)
            stock = create_stock_with_event_offer(offerer, venue, price=0)
            booking = create_booking(user=user, stock=stock, venue=venue)
            booking.isUsed = True
            repository.save(booking, user_offerer)
            booking_id = booking.id

            # When
            url = "/v2/bookings/use/token/{}".format(booking.token)
            response = TestClient(app.test_client()).with_auth("*****@*****.**").patch(url)

            # Then
            assert response.status_code == 410
            assert response.json["booking"] == ["Cette réservation a déjà été validée"]
            assert Booking.query.get(booking_id).isUsed is True
Ejemplo n.º 28
0
    def test_should_send_cancellation_by_offerer_email_only_to_administration_when_no_booking_email_provided(
            self, feature_send_mail_to_users_enabled,
            make_offerer_driven_cancellation_email_for_offerer):
        # Given
        user = create_user(email="*****@*****.**")
        offerer = create_offerer()
        venue = create_venue(offerer)
        stock = create_stock_with_event_offer(offerer, venue)
        stock.offer.bookingEmail = None
        booking = create_booking(user=user, stock=stock)
        mocked_send_email = Mock()

        # When
        send_offerer_driven_cancellation_email_to_offerer(
            booking, mocked_send_email)

        # Then
        make_offerer_driven_cancellation_email_for_offerer.assert_called_once_with(
            booking)
        mocked_send_email.assert_called_once()
        args = mocked_send_email.call_args_list
        assert args[0][1]["data"]["To"] == "*****@*****.**"
        def when_user_is_logged_in_and_booking_payment_exists(self, app):
            # Given
            user = create_user()
            pro_user = create_user(email="*****@*****.**")
            offerer = create_offerer()
            user_offerer = create_user_offerer(pro_user, offerer)
            venue = create_venue(offerer)
            stock = create_stock_with_event_offer(offerer, venue, price=0)

            booking = create_booking(user=user, stock=stock, venue=venue, is_used=True)
            payment = create_payment(booking, offerer, Decimal(10), iban="CF13QSDFGH456789", bic="QSDFGH8Z555")

            repository.save(booking, user_offerer, payment)

            # When
            url = "/v2/bookings/keep/token/{}".format(booking.token)
            response = TestClient(app.test_client()).with_auth("*****@*****.**").patch(url)

            # Then
            assert response.status_code == 410
            assert response.json["payment"] == ["Le remboursement est en cours de traitement"]
            assert Booking.query.get(booking.id).isUsed is True
Ejemplo n.º 30
0
    def test_should_send_booking_cancellation_email_only_to_administration_when_no_booking_email_provided(
            self, mock_feature_send_mail_to_users_enabled, app):
        # Given
        user = create_user(email="*****@*****.**")
        offerer = create_offerer()
        deposit = create_deposit(user, amount=500)
        venue = create_venue(offerer)
        stock = create_stock_with_event_offer(offerer, venue)
        stock.offer.bookingEmail = None
        booking = create_booking(user=user, stock=stock)
        mocked_send_email = Mock()

        repository.save(deposit, stock)

        # When
        send_user_driven_cancellation_email_to_offerer(booking,
                                                       mocked_send_email)

        # Then
        mocked_send_email.assert_called_once()
        args = mocked_send_email.call_args_list
        assert args[0][1]["data"]["To"] == "*****@*****.**"