示例#1
0
    def test_get_active_offers_with_no_order_by_should_return_same_number_of_recos(
            self, app):
        # Given
        offerer = create_offerer()
        venue = create_venue(offerer,
                             postal_code='34000',
                             departement_code='34')

        stock1 = create_stock_with_thing_offer(offerer,
                                               venue,
                                               name='thing',
                                               thing_type=ThingType.JEUX_VIDEO)
        stock2 = create_stock_with_thing_offer(offerer,
                                               venue,
                                               name='thing',
                                               thing_type=ThingType.JEUX_VIDEO)
        stock3 = create_stock_with_thing_offer(
            offerer, venue, name='thing', thing_type=ThingType.AUDIOVISUEL)
        stock4 = create_stock_with_thing_offer(offerer,
                                               venue,
                                               name='thing',
                                               thing_type=ThingType.JEUX)

        PcObject.save(stock1, stock2, stock3, stock4)

        # When
        offers = get_active_offers(departement_codes=['00'], offer_id=None)

        # Then
        assert len(offers) == 4
示例#2
0
    def test_should_return_offers_with_mediations_first(app):
        # Given
        offerer = create_offerer()
        venue = create_venue(offerer,
                             postal_code='34000',
                             departement_code='34')

        stock1 = create_stock_with_thing_offer(offerer,
                                               venue,
                                               name='thing_with_mediation')
        mediation = create_mediation(stock1.offer)

        stock2 = create_stock_with_thing_offer(offerer,
                                               venue,
                                               name='thing_without_mediation')

        PcObject.save(stock2, mediation)
        PcObject.save(stock1)

        # When
        offers = get_active_offers(user=create_user(email="*****@*****.**"),
                                   departement_codes=['00'],
                                   offer_id=None)

        # Then
        assert len(offers) == 2
        assert offers[0].name == 'thing_with_mediation'
        assert offers[1].name == 'thing_without_mediation'
示例#3
0
        def when_only_public_credit_and_limit_of_physical_thing_reached(
                self, app):
            # Given
            user = create_user(email='*****@*****.**')
            PcObject.save(user)

            offerer = create_offerer()
            PcObject.save(offerer)

            venue = create_venue(offerer)
            PcObject.save(venue)

            thing_offer = create_offer_with_thing_product(venue)
            PcObject.save(thing_offer)

            thing_stock_price_190 = create_stock_with_thing_offer(offerer,
                                                                  venue,
                                                                  thing_offer,
                                                                  price=190)

            thing_stock_price_12 = create_stock_with_thing_offer(offerer,
                                                                 venue,
                                                                 thing_offer,
                                                                 price=12)

            PcObject.save(thing_stock_price_190, thing_stock_price_12)

            deposit_date = datetime.utcnow() - timedelta(minutes=2)

            deposit = create_deposit(user, amount=500, source='public')

            PcObject.save(deposit)

            booking_thing_price_190 = create_booking(user,
                                                     thing_stock_price_190,
                                                     venue,
                                                     recommendation=None)
            PcObject.save(booking_thing_price_190)

            recommendation = create_recommendation(thing_offer, user)
            PcObject.save(recommendation)

            booking_thing_price_12_json = {
                "stockId": humanize(thing_stock_price_12.id),
                "recommendationId": humanize(recommendation.id),
                "quantity": 1
            }

            # When
            response = TestClient(app.test_client()) \
                .with_auth('*****@*****.**') \
                .post('/bookings', json=booking_thing_price_12_json)

            # Then
            error_message = response.json
            assert response.status_code == 400
            assert error_message['global'] == ['Le plafond de 200 € pour les biens culturels ' \
                                               'ne vous permet pas de réserver cette offre.']
示例#4
0
    def test_search_by_datetime_only_returns_recommendations_starting_during_time_interval(
            self, app):
        # Duplicate
        # Given
        offerer = create_offerer()
        venue = create_venue(offerer)

        ok_stock = _create_event_stock_and_offer_for_date(
            venue, datetime(2018, 1, 6, 12, 30))
        ko_stock_before = _create_event_stock_and_offer_for_date(
            venue, datetime(2018, 1, 1, 12, 30))
        ko_stock_after = _create_event_stock_and_offer_for_date(
            venue, datetime(2018, 1, 10, 12, 30))
        ok_stock_with_thing = create_stock_with_thing_offer(offerer, venue)

        PcObject.save(ok_stock, ko_stock_before, ko_stock_after)

        # When
        search_result_offers = get_offers_for_recommendations_search(
            days_intervals=[[
                datetime(2018, 1, 6, 12, 0),
                datetime(2018, 1, 6, 13, 0)
            ]], )

        # Then
        assert ok_stock.resolvedOffer in search_result_offers
        assert ok_stock_with_thing.resolvedOffer in search_result_offers
        assert ko_stock_before.resolvedOffer not in search_result_offers
        assert ko_stock_after.resolvedOffer not in search_result_offers
    def when_feature_send_mail_to_users_enabled_and_not_offer_booking_email_sends_only_to_administration(
            self, app):
        # given
        user = create_user()
        offerer = create_offerer()
        venue = create_venue(offerer)
        offer = create_offer_with_thing_product(venue, booking_email=None)
        stock = create_stock_with_thing_offer(offerer,
                                              venue,
                                              offer,
                                              booking_email=None)
        booking = create_booking(user, stock)
        mocked_send_email = Mock()
        return_value = Mock()
        return_value.status_code = 200
        mocked_send_email.return_value = return_value

        with patch('utils.mailing.feature_send_mail_to_users_enabled'
                   ) as send_mail_to_users:
            send_mail_to_users.return_value = True
            # when
            send_booking_recap_emails(booking, mocked_send_email)

        # then
        mocked_send_email.assert_called_once()
        args = mocked_send_email.call_args
        assert args[1]['data']['To'] == '*****@*****.**'
    def when_feature_send_mail_to_users_disabled_sends_email_to_pass_culture_dev(
            self, app):
        # given
        user = create_user()
        offerer = create_offerer()
        venue = create_venue(offerer)
        offer = create_offer_with_thing_product(
            venue, booking_email='*****@*****.**')
        stock = create_stock_with_thing_offer(offerer, venue, offer)
        booking = create_booking(user, stock)
        mocked_send_email = Mock()
        return_value = Mock()
        return_value.status_code = 200
        mocked_send_email.return_value = return_value

        with patch('utils.mailing.feature_send_mail_to_users_enabled'
                   ) as send_mail_to_users:
            send_mail_to_users.return_value = False
            # when
            send_booking_recap_emails(booking, mocked_send_email)

            # then
            mocked_send_email.assert_called_once()
        args = mocked_send_email.call_args
        assert args[1]['data']['To'] == '*****@*****.**'
        def expect_booking_to_have_completed_url(self, app):
            # Given
            user = create_user(email='*****@*****.**')
            offerer = create_offerer()
            venue = create_venue(offerer)
            offer = create_offer_with_thing_product(
                venue,
                url='https://host/path/{token}?offerId={offerId}&email={email}'
            )
            stock = create_stock_with_thing_offer(offerer=offerer,
                                                  venue=venue,
                                                  offer=offer,
                                                  price=0)
            booking = create_booking(user, stock, venue=venue, token='ABCDEF')

            PcObject.save(booking)

            # When
            response = TestClient(app.test_client()).with_auth(
                user.email).get('/bookings/' + humanize(booking.id))

            # Then
            assert response.status_code == 200
            response_json = response.json
            assert response_json[
                'completedUrl'] == 'https://host/path/ABCDEF?offerId=%s&[email protected]' % humanize(
                    offer.id)
            assert 'recommendation' in response_json
            assert 'offer' in response_json['recommendation']
            assert 'venue' in response_json['recommendation']['offer']
            assert 'validationToken' not in response_json['recommendation'][
                'offer']
        def when_booking_is_cancelled(self, app):
            # Given
            user = create_user(email='*****@*****.**')
            admin_user = create_user(email='*****@*****.**')
            offerer = create_offerer()
            venue = create_venue(offerer)
            stock = create_stock_with_thing_offer(offerer,
                                                  venue,
                                                  offer=None,
                                                  price=0)
            booking = create_booking(user,
                                     stock,
                                     venue=venue,
                                     is_cancelled=True)

            PcObject.save(admin_user, booking)
            url = '/bookings/token/{}?email={}&offer_id={}'.format(
                booking.token, '*****@*****.**', humanize(stock.offerId))

            # When
            response = TestClient(app.test_client()).get(url)
            # Then
            assert response.status_code == 410
            assert response.json['booking'] == [
                'Cette réservation a été annulée'
            ]
        def test_returns_two_recommendations_with_one_event_and_one_thing(self, app):
            # given
            now = datetime.utcnow()
            four_days_from_now = now + timedelta(days=4)
            eight_days_from_now = now + timedelta(days=8)
            user = create_user(email='*****@*****.**')
            offerer = create_offerer()
            venue = create_venue(offerer)
            offer_event = create_offer_with_event_product(venue, thumb_count=1, dominant_color=b'123')
            event_occurrence = create_event_occurrence(
                offer_event,
                beginning_datetime=four_days_from_now,
                end_datetime=eight_days_from_now
            )
            event_stock = create_stock_from_event_occurrence(event_occurrence, price=0, available=20)
            offer_thing = create_offer_with_thing_product(venue, thumb_count=1, dominant_color=b'123')
            stock_thing = create_stock_with_thing_offer(offerer, venue, offer_thing, price=0)
            PcObject.save(user, event_stock, stock_thing)
            auth_request = TestClient(app.test_client()).with_auth(user.email)

            # when
            response = auth_request.put(RECOMMENDATION_URL, json={'seenRecommendationIds': []})

            # then
            assert response.status_code == 200
            assert len(response.json) == 2
示例#10
0
        def when_already_booked_by_user_but_cancelled(self, app):
            # Given
            user = create_user(email='*****@*****.**')
            offerer = create_offerer()
            venue = create_venue(offerer)
            thing_offer = create_offer_with_thing_product(venue)
            deposit_date = datetime.utcnow() - timedelta(minutes=2)
            deposit = create_deposit(user, amount=200)
            stock = create_stock_with_thing_offer(offerer,
                                                  venue,
                                                  thing_offer,
                                                  price=90)
            booking = create_booking(user, stock, venue, is_cancelled=True)
            PcObject.save(stock, user, booking)

            booking_json = {
                'stockId': humanize(stock.id),
                'recommendationId': None,
                'quantity': 1
            }

            # When
            response = TestClient(
                app.test_client()).with_auth('*****@*****.**').post(
                    '/bookings', json=booking_json)
            # Then
            assert response.status_code == 201
    def test_generate_payment_details_csv_with_right_values(self, app):
        # given
        deactivate_feature(FeatureToggle.DEGRESSIVE_REIMBURSEMENT_RATE)
        user = create_user(email='*****@*****.**')
        deposit = create_deposit(user, amount=500, source='public')
        offerer1 = create_offerer()
        user_offerer1 = create_user_offerer(user, offerer1, validation_token=None)
        venue1 = create_venue(offerer1)
        bank_information1 = create_bank_information(id_at_providers='79387501900056', venue=venue1)
        stock1 = create_stock_with_thing_offer(offerer=offerer1, venue=venue1, price=10)
        booking1 = create_booking(user, stock1, venue=venue1, token='ABCDEF', is_used=True)
        booking2 = create_booking(user, stock1, venue=venue1, token='ABCDEG')

        PcObject.save(deposit, booking1, booking2, user_offerer1, bank_information1)

        generate_new_payments()

        reimbursement_details = find_all_offerer_reimbursement_details(offerer1.id)

        # when
        csv = generate_reimbursement_details_csv(reimbursement_details)

        # then
        assert _count_non_empty_lines(csv) == 2
        assert _get_header(csv,
                           1) == "2019;Juillet : remboursement 1ère quinzaine;La petite librairie;12345678912345;123 rue de Paris;FR7630006000011234567890189;La petite librairie;Test Book;Doe;John;ABCDEF;;10.00;Remboursement initié"
示例#12
0
        def when_null_quantity(self, app):
            # Given
            user = create_user(email='*****@*****.**')
            offerer = create_offerer()
            venue = create_venue(offerer)
            thing_offer = create_offer_with_thing_product(venue)
            stock = create_stock_with_thing_offer(offerer,
                                                  venue,
                                                  thing_offer,
                                                  price=90)
            PcObject.save(stock, user)

            booking_json = {
                'stockId': humanize(stock.id),
                'recommendationId': None,
                'quantity': 0
            }

            # When
            response = TestClient(
                app.test_client()).with_auth('*****@*****.**').post(
                    '/bookings', json=booking_json)
            # Then
            error_message = response.json
            assert response.status_code == 400
            assert error_message['quantity'] == [
                'Vous devez préciser une quantité pour la réservation'
            ]
示例#13
0
        def when_stock_is_soft_deleted(self, app):
            # Given
            user = create_user(email='*****@*****.**')
            offerer = create_offerer()
            venue = create_venue(offerer)
            thing_offer = create_offer_with_thing_product(venue)
            stock = create_stock_with_thing_offer(offerer,
                                                  venue,
                                                  thing_offer,
                                                  price=90)
            stock.isSoftDeleted = True
            PcObject.save(stock, user)

            booking_json = {
                'stockId': humanize(stock.id),
                'recommendationId': None,
                'quantity': 1,
            }

            # When
            response = TestClient(
                app.test_client()).with_auth('*****@*****.**').post(
                    '/bookings', json=booking_json)
            # Then
            error_message = response.json
            assert response.status_code == 400
            assert error_message['stockId'] == [
                "Cette date a été retirée. Elle n'est plus disponible."
            ]
示例#14
0
        def when_more_than_one_quantity(self, app):
            # Given
            user = create_user(email='*****@*****.**')
            offerer = create_offerer()
            venue = create_venue(offerer)
            thing_offer = create_offer_with_thing_product(venue)
            stock = create_stock_with_thing_offer(offerer,
                                                  venue,
                                                  thing_offer,
                                                  price=90)
            PcObject.save(stock, user)

            booking_json = {
                'stockId': humanize(stock.id),
                'recommendationId': None,
                'quantity': 5
            }

            # When
            response = TestClient(
                app.test_client()).with_auth('*****@*****.**').post(
                    '/bookings', json=booking_json)
            # Then
            error_message = response.json
            assert response.status_code == 400
            assert error_message['quantity'] == [
                "Vous ne pouvez pas réserver plus d'une offre à la fois"
            ]
示例#15
0
        def when_thing_booking_limit_datetime_has_expired(self, app):
            # Given
            four_days_ago = datetime.utcnow() - timedelta(days=4)
            five_days_ago = datetime.utcnow() - timedelta(days=5)
            user = create_user(email='*****@*****.**')
            offerer = create_offerer()
            deposit_date = datetime.utcnow() - timedelta(minutes=2)
            deposit = create_deposit(user, amount=200)
            venue = create_venue(offerer)

            stock = create_stock_with_thing_offer(
                offerer, venue, price=20, booking_limit_datetime=four_days_ago)

            PcObject.save(deposit, stock, user)

            booking_json = {
                'stockId': humanize(stock.id),
                'recommendationId': None,
                'quantity': 1
            }

            # When
            response = TestClient(
                app.test_client()).with_auth('*****@*****.**').post(
                    '/bookings', json=booking_json)

            # Then
            error_message = response.json
            assert response.status_code == 400
            assert error_message['global'] == [
                "La date limite de réservation de cette offre est dépassée"
            ]
示例#16
0
        def when_booking_limit_datetime_is_none(self, app):
            # Given
            user = create_user(email='*****@*****.**')
            offerer = create_offerer()
            deposit = create_deposit(user, amount=200)
            venue = create_venue(offerer)
            thing_offer = create_offer_with_thing_product(venue)
            stock = create_stock_with_thing_offer(offerer,
                                                  venue,
                                                  thing_offer,
                                                  price=20,
                                                  booking_limit_datetime=None)

            PcObject.save(deposit, stock, user)

            booking_json = {
                'stockId': humanize(stock.id),
                'recommendationId': None,
                'quantity': 1
            }

            # When
            response = TestClient(
                app.test_client()).with_auth('*****@*****.**').post(
                    '/bookings', json=booking_json)
            # Then
            assert response.status_code == 201
示例#17
0
        def when_non_validated_venue(self, app):
            # Given
            user = create_user(email='*****@*****.**')
            deposit = create_deposit(user)
            offerer = create_offerer()
            venue = create_venue(offerer)
            venue.generate_validation_token()
            thing_offer = create_offer_with_thing_product(venue)
            stock = create_stock_with_thing_offer(offerer,
                                                  venue,
                                                  thing_offer,
                                                  price=10)
            PcObject.save(stock, user, deposit)

            booking_json = {
                'stockId': humanize(stock.id),
                'recommendationId': None,
                'quantity': 1
            }

            # When
            r_create = TestClient(app.test_client()) \
                .with_auth(user.email) \
                .post('/bookings', json=booking_json)

            # Then
            assert r_create.status_code == 400
            assert r_create.json['stockId'] == [
                'Vous ne pouvez pas encore réserver cette offre, son lieu est en attente de validation'
            ]
        def when_user_has_booked_some_offers(self, app):
            # Given
            user = create_user(public_name='Test', departement_code='93', email='*****@*****.**')
            offerer = create_offerer('999199987', '2 Test adress', 'Test city', '93000', 'Test offerer')
            venue = create_venue(offerer)
            thing_offer = create_offer_with_thing_product(venue=None)
            stock = create_stock_with_thing_offer(offerer, venue, thing_offer, price=5)
            recommendation = create_recommendation(thing_offer, user)
            deposit_1_date = datetime.utcnow() - timedelta(minutes=2)
            deposit_1 = create_deposit(user, amount=10)
            deposit_2_date = datetime.utcnow() - timedelta(minutes=2)
            deposit_2 = create_deposit(user, amount=10)
            booking = create_booking(user, stock, venue, recommendation, quantity=1)

            PcObject.save(user, venue, deposit_1, deposit_2, booking)

            # when
            response = TestClient(app.test_client()).with_auth('*****@*****.**').get('/users/current')

            # Then
            assert response.json['wallet_balance'] == 15
            assert response.json['expenses'] == {
                'all': {'max': 500, 'actual': 5.0},
                'physical': {'max': 200, 'actual': 5.0},
                'digital': {'max': 200, 'actual': 0}
            }
示例#19
0
    def test_find_all_offerer_reimbursement_details(self, app):
        # Given
        user = create_user(email='*****@*****.**')
        deposit = create_deposit(user, amount=500, source='public')
        offerer1 = create_offerer()
        user_offerer1 = create_user_offerer(user,
                                            offerer1,
                                            validation_token=None)
        venue1 = create_venue(offerer1)
        venue2 = create_venue(offerer1, siret='12345678912346')
        bank_information1 = create_bank_information(
            id_at_providers='79387501900056', venue=venue1)
        bank_information2 = create_bank_information(
            id_at_providers='79387501900057', venue=venue2)

        offer1 = create_offer_with_thing_product(
            venue1,
            url='https://host/path/{token}?offerId={offerId}&email={email}')
        offer2 = create_offer_with_thing_product(venue2)
        stock1 = create_stock_with_thing_offer(offerer=offerer1,
                                               venue=venue1,
                                               price=10)
        stock2 = create_stock_with_thing_offer(offerer=offerer1,
                                               venue=venue2,
                                               price=11)
        booking1 = create_booking(user,
                                  stock1,
                                  venue=venue1,
                                  token='ABCDEF',
                                  is_used=True)
        booking2 = create_booking(user, stock1, venue=venue1, token='ABCDEG')
        booking3 = create_booking(user,
                                  stock2,
                                  venue=venue2,
                                  token='ABCDEH',
                                  is_used=True)
        PcObject.save(deposit, booking1, booking2, booking3, user_offerer1,
                      bank_information1, bank_information2)
        generate_new_payments()

        # When
        reimbursement_details = find_all_offerer_reimbursement_details(
            offerer1.id)

        # Then
        assert len(reimbursement_details) == 2
示例#20
0
        def when_user_cannot_book_free_offers_and_free_offer(self, app):
            # Given
            user = create_user(email='*****@*****.**',
                               can_book_free_offers=False)
            PcObject.save(user)

            offerer = create_offerer(siren='899999768',
                                     address='2 Test adress',
                                     city='Test city',
                                     postal_code='93000',
                                     name='Test offerer')
            PcObject.save(offerer)

            venue = create_venue(offerer=offerer,
                                 name='Venue name',
                                 booking_email='*****@*****.**',
                                 address='1 Test address',
                                 postal_code='93000',
                                 city='Test city',
                                 departement_code='93')
            PcObject.save(venue)

            thing_offer = create_offer_with_thing_product(venue)
            PcObject.save(thing_offer)

            stock = create_stock_with_thing_offer(offerer,
                                                  venue,
                                                  thing_offer,
                                                  price=0)
            PcObject.save(stock)

            recommendation = create_recommendation(thing_offer, user)
            PcObject.save(recommendation)

            deposit_date = datetime.utcnow() - timedelta(minutes=2)
            deposit = create_deposit(user, amount=500)
            PcObject.save(deposit)

            booking_json = {
                'stockId': humanize(stock.id),
                'recommendationId': humanize(recommendation.id),
                'quantity': 1
            }

            # When
            r_create = TestClient(app.test_client()) \
                .with_auth('*****@*****.**') \
                .post('/bookings', json=booking_json)

            # Then
            assert r_create.status_code == 400
            assert 'cannotBookFreeOffers' in r_create.json
            assert r_create.json['cannotBookFreeOffers'] == [
                "Votre compte ne vous permet pas de faire de réservation."
            ]
def save_sandbox():

    offerer = create_offerer()
    venue = create_venue(offerer, is_virtual=True, siret=None)
    offer = create_offer_with_thing_product(venue,
                                            thing_type=ThingType.ACTIVATION)
    stock = create_stock_with_thing_offer(offerer,
                                          venue,
                                          offer=offer,
                                          price=0,
                                          available=10000)
    PcObject.save(stock)
        def when_user_has_an_offerer_attached(self, app):
            # Given
            user = create_user(email='*****@*****.**')
            deposit = create_deposit(user, amount=500, source='public')
            offerer1 = create_offerer()
            offerer2 = create_offerer(siren='123456788')
            user_offerer1 = create_user_offerer(user, offerer1, validation_token=None)
            user_offerer2 = create_user_offerer(user, offerer2, validation_token=None)
            venue1 = create_venue(offerer1)
            venue2 = create_venue(offerer1, siret='12345678912346')
            venue3 = create_venue(offerer2, siret='12345678912347')
            bank_information1 = create_bank_information(id_at_providers='79387501900056', venue=venue1)
            bank_information2 = create_bank_information(id_at_providers='79387501900057', venue=venue2)
            stock1 = create_stock_with_thing_offer(offerer=offerer1, venue=venue1, price=10)
            stock2 = create_stock_with_thing_offer(offerer=offerer1, venue=venue2, price=11)
            stock3 = create_stock_with_thing_offer(offerer=offerer2, venue=venue3, price=12)
            stock4 = create_stock_with_thing_offer(offerer=offerer2, venue=venue3, price=13)
            booking1 = create_booking(user, stock1, venue=venue1, token='ABCDEF', is_used=True)
            booking2 = create_booking(user, stock1, venue=venue1, token='ABCDEG')
            booking3 = create_booking(user, stock2, venue=venue2, token='ABCDEH', is_used=True)
            booking4 = create_booking(user, stock3, venue=venue3, token='ABCDEI', is_used=True)
            booking5 = create_booking(user, stock4, venue=venue3, token='ABCDEJ', is_used=True)
            booking6 = create_booking(user, stock4, venue=venue3, token='ABCDEK', is_used=True)
            PcObject.save(deposit, booking1, booking2, booking3,
                          booking4, booking5, booking6, user_offerer1,
                          user_offerer2, bank_information1, bank_information2)
            generate_new_payments()

            # When
            response = TestClient(app.test_client()).with_auth(user.email).get(
                '/reimbursements/csv')
            response_lines = response.data.decode('utf-8').split('\n')

            # Then
            assert response.status_code == 200
            assert response.headers['Content-type'] == 'text/csv; charset=utf-8;'
            assert response.headers['Content-Disposition'] == 'attachment; filename=remboursements_pass_culture.csv'
            assert len(response_lines) == 7
示例#23
0
        def when_user_cannot_book_free_offers_but_has_enough_credit_for_paid_offer(
                self, app):
            user = create_user(email='*****@*****.**',
                               can_book_free_offers=False)
            PcObject.save(user)

            offerer = create_offerer(siren='899999768',
                                     address='2 Test adress',
                                     city='Test city',
                                     postal_code='93000',
                                     name='Test offerer')
            PcObject.save(offerer)

            venue = create_venue(offerer, 'Test offerer',
                                 '*****@*****.**', '123 rue test',
                                 '93000', 'Test city', '93')
            PcObject.save(venue)

            thing_offer = create_offer_with_thing_product(venue)
            PcObject.save(thing_offer)

            stock = create_stock_with_thing_offer(offerer,
                                                  venue,
                                                  thing_offer,
                                                  price=10)
            PcObject.save(stock)

            recommendation = create_recommendation(thing_offer, user)
            PcObject.save(recommendation)

            deposit_date = datetime.utcnow() - timedelta(minutes=2)
            deposit = create_deposit(user, amount=500)
            PcObject.save(deposit)

            booking_json = {
                "stockId": humanize(stock.id),
                "recommendationId": humanize(recommendation.id),
                "quantity": 1
            }

            # When
            r_create = TestClient(app.test_client()) \
                .with_auth('*****@*****.**') \
                .post('/bookings', json=booking_json)

            # Then
            r_create_json = r_create.json
            assert r_create.status_code == 201
            assert r_create_json['amount'] == 10.0
            assert r_create_json['quantity'] == 1
        def when_given_mediation_does_not_match_given_offer(self, app):
            # given
            user = create_user(email='*****@*****.**')
            offerer = create_offerer()
            venue = create_venue(offerer)
            offer_thing_1 = create_offer_with_thing_product(venue, thumb_count=1, dominant_color=b'123')
            offer_thing_2 = create_offer_with_thing_product(venue, thumb_count=1, dominant_color=b'123')
            stock_thing_1 = create_stock_with_thing_offer(offerer, venue, offer_thing_1, price=0)
            stock_thing_2 = create_stock_with_thing_offer(offerer, venue, offer_thing_2, price=0)
            mediation_1 = create_mediation(offer_thing_1)
            mediation_2 = create_mediation(offer_thing_2)
            PcObject.save(user, stock_thing_1, stock_thing_2, mediation_1, mediation_2)
            auth_request = TestClient(app.test_client()).with_auth(user.email)

            # when
            response = auth_request.put(RECOMMENDATION_URL +
                                        "?offerId=" +
                                        humanize(offer_thing_1.id) +
                                        "?mediationId=" +
                                        humanize(mediation_2.id), json={'seenRecommendationIds': []})

            # then
            assert response.status_code == 404
示例#25
0
        def when_too_many_bookings(self, app):
            # given
            offerer = create_offerer('987654321', 'Test address', 'Test city',
                                     '93000', 'Test name')
            venue = create_venue(offerer, 'Test offerer',
                                 '*****@*****.**', '123 rue test',
                                 '93000', 'Test city', '93')
            too_many_bookings_stock = create_stock_with_thing_offer(
                offerer=Offerer(), venue=venue, offer=None, available=2)

            user = create_user(email='*****@*****.**')
            user2 = create_user(email='*****@*****.**')

            deposit = create_deposit(user, amount=500)
            deposit2 = create_deposit(user2, amount=500)

            recommendation = create_recommendation(
                offer=too_many_bookings_stock.offer, user=user)

            booking = create_booking(user2,
                                     too_many_bookings_stock,
                                     venue,
                                     quantity=2)

            PcObject.save(booking, recommendation, user, deposit, deposit2,
                          too_many_bookings_stock)

            booking_json = {
                'stockId': humanize(too_many_bookings_stock.id),
                'recommendationId': humanize(recommendation.id),
                'quantity': 1
            }

            # when
            r_create = TestClient(app.test_client()) \
                .with_auth('*****@*****.**') \
                .post('/bookings', json=booking_json)

            # then
            assert r_create.status_code == 400
            assert 'global' in r_create.json
            assert 'quantité disponible' in r_create.json['global'][0]
示例#26
0
        def when_user_has_enough_credit(self, app):
            # Given
            offerer = create_offerer('819202819', '1 Fake Address',
                                     'Fake city', '93000', 'Fake offerer')
            venue = create_venue(offerer, 'venue name', '*****@*****.**',
                                 '1 fake street', '93000', 'False city', '93')
            thing_offer = create_offer_with_thing_product(venue)

            user = create_user(email='*****@*****.**')
            PcObject.save(user)

            stock = create_stock_with_thing_offer(offerer,
                                                  venue,
                                                  thing_offer,
                                                  price=50,
                                                  available=1)
            PcObject.save(stock)

            recommendation = create_recommendation(thing_offer, user)
            PcObject.save(recommendation)

            deposit = create_deposit(user, amount=50)
            PcObject.save(deposit)

            booking_json = {
                'stockId': humanize(stock.id),
                'recommendationId': humanize(recommendation.id),
                'quantity': 1
            }

            # when
            response = TestClient(app.test_client()) \
                .with_auth('*****@*****.**') \
                .post('/bookings', json=booking_json)

            # then
            assert response.status_code == 201
            assert 'recommendation' in response.json
            assert 'offer' in response.json['recommendation']
            assert 'venue' in response.json['recommendation']['offer']
            assert 'validationToken' not in response.json['recommendation'][
                'offer']['venue']
        def when_offer_is_known_and_mediation_is_unknown(self, app):
            # given
            user = create_user(email='*****@*****.**')
            offerer = create_offerer()
            venue = create_venue(offerer)
            offer_thing = create_offer_with_thing_product(venue, thumb_count=1, dominant_color=b'123')
            stock_thing = create_stock_with_thing_offer(offerer, venue, offer_thing, price=0)
            mediation = create_mediation(offer_thing)
            PcObject.save(user, stock_thing, mediation)
            auth_request = TestClient(app.test_client()).with_auth(user.email)

            # when
            response = auth_request.put(RECOMMENDATION_URL +
                                        "?offerId=" +
                                        humanize(offer_thing.id) +
                                        "?mediationId=" +
                                        "ABCDE", json={'seenRecommendationIds': []})

            # then
            assert response.status_code == 404
        def when_not_logged_in_and_give_right_email_and_offer_id_thing(
                self, app):
            # Given
            user = create_user(email='*****@*****.**')
            admin_user = create_user(email='*****@*****.**')
            offerer = create_offerer()
            venue = create_venue(offerer)
            stock = create_stock_with_thing_offer(offerer,
                                                  venue,
                                                  offer=None,
                                                  price=0)
            booking = create_booking(user, stock, venue=venue)

            PcObject.save(admin_user, booking)
            url = '/bookings/token/{}?email={}&offer_id={}'.format(
                booking.token, '*****@*****.**', humanize(stock.offerId))

            # When
            response = TestClient(app.test_client()).get(url)
            # Then
            assert response.status_code == 204
示例#29
0
    def test_should_return_offers_that_occur_in_less_than_10_days_and_things_first(
            app):
        # Given
        offerer = create_offerer()
        venue = create_venue(offerer,
                             postal_code='34000',
                             departement_code='34')

        stock1 = create_stock_with_thing_offer(offerer, venue, name='thing')
        stock2 = create_stock_with_event_offer(
            offerer,
            venue,
            beginning_datetime=datetime.utcnow() + timedelta(days=4),
            end_datetime=datetime.utcnow() + timedelta(days=4, hours=2),
            name='event_occurs_soon',
            thumb_count=1)
        stock3 = create_stock_with_event_offer(
            offerer,
            venue,
            beginning_datetime=datetime.utcnow() + timedelta(days=11),
            end_datetime=datetime.utcnow() + timedelta(days=11, hours=2),
            name='event_occurs_later',
            thumb_count=1)

        PcObject.save(stock3)
        PcObject.save(stock2)
        PcObject.save(stock1)

        # When
        offers = get_active_offers(user=create_user(email="*****@*****.**"),
                                   departement_codes=['00'],
                                   offer_id=None)

        # Then
        assert len(offers) == 3
        assert (offers[0].name == 'event_occurs_soon'
                and offers[1].name == 'thing') \
               or (offers[1].name == 'event_occurs_soon'
                   and offers[0].name == 'thing')
        assert offers[2].name == 'event_occurs_later'
示例#30
0
        def when_booking_limit_datetime_is_none_for_thing(self, app):
            # Given
            user = create_user(email='*****@*****.**', can_book_free_offers=False, is_admin=True)
            offerer = create_offerer()
            venue = create_venue(offerer)
            stock = create_stock_with_thing_offer(offerer, venue)
            PcObject.save(user, stock)
            stock_id = stock.id

            data = {
                'price': 120,
                'offerId': humanize(stock.offer.id),
                'bookingLimitDatetime': None
            }

            # When
            response = TestClient(app.test_client()).with_auth(user.email) \
                .patch('/stocks/' + humanize(stock.id), json=data)

            # Then
            assert response.status_code == 200
            assert Stock.query.get(stock_id).price == 120