def test_should_return_all_user_emails(self, app):
        # Given
        first_day_after_quarantine = datetime(2020, 4, 16)
        today = datetime(2020, 4, 10)
        tomorrow = today + timedelta(days=1)

        pro = users_factories.ProFactory(email="*****@*****.**")
        pro1 = users_factories.ProFactory(email="*****@*****.**")

        offerer = create_offerer(siren="123456789")
        user_offerer = create_user_offerer(user=pro, offerer=offerer)
        venue = create_venue(offerer, siret="1234567899876")
        offer = create_offer_with_event_product(venue)
        stock = create_stock(beginning_datetime=tomorrow, offer=offer)

        offerer1 = create_offerer(siren="987654321")
        user_offerer1 = create_user_offerer(user=pro1, offerer=offerer1)
        venue1 = create_venue(offerer1, siret="9876543216543")
        offer1 = create_offer_with_event_product(venue1)
        stock1 = create_stock(beginning_datetime=tomorrow, offer=offer1)

        repository.save(stock1, stock, user_offerer, user_offerer1)

        # When
        pro_emails = fetch_user_emails_for_offers_with_max_stock_date_between_today_and_end_of_quarantine(
            first_day_after_quarantine, today)

        # Then
        assert len(pro_emails) == 2
        assert set(pro_emails) == {
            "*****@*****.**", "*****@*****.**"
        }
Example #2
0
    def should_book_an_offer_even_if_physical_offer_capping_is_exeeded(
            self, mocked_redis, app):
        # Given
        user = create_user()
        deposit = create_deposit(user)
        offerer = create_offerer()
        venue = create_venue(offerer)
        old_offer = create_offer_with_thing_product(
            venue, thing_type=ThingType.INSTRUMENT)
        old_stock = create_stock(offer=old_offer, price=200)
        old_booking = create_booking(user,
                                     stock=old_stock,
                                     amount=old_stock.price)
        new_offer = create_offer_with_thing_product(
            venue, thing_type=ThingType.LIVRE_EDITION)
        new_stock = create_stock(offer=new_offer, price=10)

        repository.save(old_booking, new_stock)

        # When
        create_booking_for_user_on_specific_stock_bypassing_capping_limits(
            user.id, new_stock.id)

        # Then
        assert Booking.query.filter_by(stockId=new_stock.id,
                                       userId=user.id).one() is not None
        mocked_redis.add_offer_id.assert_called_once_with(
            client=app.redis_client, offer_id=new_offer.id)
    def test_should_return_event_beginning_times_in_seconds(self, app):
        # Given
        in_three_days_at_eighteen_thirty = datetime.utcnow() + timedelta(
            days=3)
        in_four_days_at_eighteen_thirty = datetime.utcnow() + timedelta(days=4)
        in_five_days_at_twenty_one_thirty = datetime.utcnow() + timedelta(
            days=5, hours=3, seconds=18)
        offerer = create_offerer()
        venue = create_venue(offerer=offerer)
        offer = create_offer_with_event_product(venue=venue)
        stock1 = create_stock(
            beginning_datetime=in_three_days_at_eighteen_thirty, offer=offer)
        stock2 = create_stock(
            beginning_datetime=in_five_days_at_twenty_one_thirty, offer=offer)
        stock3 = create_stock(
            beginning_datetime=in_four_days_at_eighteen_thirty, offer=offer)
        repository.save(stock1, stock2, stock3)

        # When
        result = AlgoliaBackend.serialize_offer(offer)

        # Then
        eighteen_thirty_in_seconds = 66600
        twenty_one_thirty_in_seconds = 77418
        assert sorted(result["offer"]["times"]) == sorted(
            [eighteen_thirty_in_seconds, twenty_one_thirty_in_seconds])
Example #4
0
    def test_wallet_balance_does_not_count_cancelled_bookings(self, app):
        # given
        user = create_user()
        offerer = create_offerer()
        venue = create_venue(offerer)
        offer = create_offer_with_thing_product(venue)

        deposit1 = create_deposit(user, amount=100)
        deposit2 = create_deposit(user, amount=50)
        stock1 = create_stock(offer=offer, price=20)
        stock2 = create_stock(offer=offer, price=30)
        booking1 = create_booking(user=user,
                                  is_cancelled=False,
                                  quantity=1,
                                  stock=stock1,
                                  venue=venue)
        booking2 = create_booking(user=user,
                                  is_cancelled=True,
                                  quantity=2,
                                  stock=stock2,
                                  venue=venue)

        repository.save(deposit1, deposit2, booking1, booking2)

        # when
        balance = user.wallet_balance

        # then
        assert balance == Decimal(130)
Example #5
0
    def test_should_return_cancelled_booking_with_payment(self, app):
        # Given
        beneficiary = create_user()
        create_deposit(user=beneficiary)
        offerer = create_offerer()
        venue = create_venue(offerer)
        offer = create_offer_with_event_product(venue)
        stock1 = create_stock(beginning_datetime=datetime(2020, 4, 16),
                              offer=offer)
        stock2 = create_stock(beginning_datetime=datetime(2020, 4, 16),
                              offer=offer)
        booking1 = create_booking(stock=stock1,
                                  user=beneficiary,
                                  is_cancelled=True)
        booking2 = create_booking(stock=stock2,
                                  user=beneficiary,
                                  is_cancelled=True)
        payment = create_payment(offerer=offerer, booking=booking1)

        repository.save(payment, booking2)

        # When
        bookings_result = get_bookings_cancelled_during_quarantine_with_payment(
        )

        # Then
        assert bookings_result == [booking1]
Example #6
0
    def should_not_return_activation_bookings(self, app):
        # Given
        user = create_user()
        create_deposit(user)
        offerer = create_offerer()
        venue = create_venue(offerer)
        offer1 = create_offer_with_event_product(
            venue, event_type="ThingType.ACTIVATION")
        offer2 = create_offer_with_event_product(
            venue, event_type="EventType.ACTIVATION")
        offer3 = create_offer_with_event_product(venue,
                                                 event_type="ThingType.ANY")
        stock1 = create_stock(offer=offer1)
        stock2 = create_stock(offer=offer2)
        stock3 = create_stock(offer=offer3)
        booking1 = create_booking(user=user, stock=stock1)
        booking2 = create_booking(user=user, stock=stock2)
        booking3 = create_booking(user=user, stock=stock3)
        repository.save(booking1, booking2, booking3)

        # When
        result = BeneficiaryBookingsSQLRepository().get_beneficiary_bookings(
            beneficiary_id=user.id)

        # Then
        assert len(result.bookings) == 1
        assert result.bookings[0].id == booking3.id
Example #7
0
    def should_return_get_stocks_information(self, app):
        # Given
        offerer = create_offerer()
        venue = create_venue(offerer)
        offer = create_offer_with_thing_product(venue, url="http://url.com")
        stock1 = create_stock(
            beginning_datetime=datetime(2020, 3, 5),
            booking_limit_datetime=datetime(2020, 1, 6),
            date_created=datetime(2020, 1, 4),
            date_modified=datetime(2020, 1, 7),
            offer=offer,
            price=0,
        )
        stock2 = create_stock(
            beginning_datetime=datetime(2020, 4, 5),
            booking_limit_datetime=datetime(2020, 2, 6),
            date_created=datetime(2020, 2, 4),
            date_modified=datetime(2020, 2, 7),
            offer=offer,
            price=12,
        )

        repository.save(stock1, stock2)

        # When
        results = _get_stocks_information(offers_ids=[offer.id])

        # Then
        assert set(results) == {
            (
                datetime(2020, 1, 4, 0, 0),
                datetime(2020, 3, 5, 0, 0),
                datetime(2020, 1, 6, 0, 0),
                datetime(2020, 1, 7, 0, 0),
                offer.id,
                None,
                0.00,
                stock1.id,
                False,
                True,
            ),
            (
                datetime(2020, 2, 4, 0, 0),
                datetime(2020, 4, 5, 0, 0),
                datetime(2020, 2, 6, 0, 0),
                datetime(2020, 2, 7, 0, 0),
                offer.id,
                None,
                12.00,
                stock2.id,
                False,
                True,
            ),
        }
Example #8
0
    def test_should_delete_objects_when_objects_are_not_eligible_and_were_already_indexed(
        self,
        mock_build_object,
        mock_add_objects,
        mock_delete_objects,
        mock_add_to_indexed_offers,
        mock_check_offer_exists,
        mock_delete_indexed_offers,
        mock_add_offer_ids_in_error,
        app,
    ):
        # Given
        client = MagicMock()
        client.pipeline = MagicMock()
        client.pipeline.return_value = MagicMock()
        mock_pipeline = client.pipeline()
        mock_pipeline.execute = MagicMock()
        mock_pipeline.reset = MagicMock()
        offerer = create_offerer(is_active=True, validation_token=None)
        venue = create_venue(offerer=offerer, validation_token=None)
        offer1 = create_offer_with_thing_product(venue=venue, is_active=True)
        stock1 = create_stock(booking_limit_datetime=TOMORROW,
                              offer=offer1,
                              quantity=0)
        offer2 = create_offer_with_thing_product(venue=venue, is_active=True)
        stock2 = create_stock(booking_limit_datetime=TOMORROW,
                              offer=offer2,
                              quantity=0)
        repository.save(stock1, stock2)
        mock_check_offer_exists.side_effect = [True, True]

        # When
        process_eligible_offers(client=client,
                                offer_ids=[offer1.id, offer2.id],
                                from_provider_update=False)

        # Then
        mock_build_object.assert_not_called()
        mock_add_objects.assert_not_called()
        mock_add_to_indexed_offers.assert_not_called()
        mock_delete_objects.assert_called_once()
        assert mock_delete_objects.call_args_list == [
            call(object_ids=[humanize(offer1.id),
                             humanize(offer2.id)])
        ]
        mock_delete_indexed_offers.assert_called_once()
        assert mock_delete_indexed_offers.call_args_list == [
            call(client=client, offer_ids=[offer1.id, offer2.id])
        ]
        mock_pipeline.execute.assert_not_called()
        mock_pipeline.reset.assert_not_called()
        mock_add_offer_ids_in_error.assert_not_called()
Example #9
0
    def test_should_not_return_event_beginning_datetimes_as_timestamp_when_thing(self, app):
        # Given
        offerer = create_offerer()
        venue = create_venue(offerer=offerer)
        offer = create_offer_with_thing_product(venue=venue)
        stock1 = create_stock(offer=offer)
        stock2 = create_stock(offer=offer)
        repository.save(stock1, stock2)

        # When
        result = build_object(offer)

        # Then
        assert result["offer"]["dates"] == []
Example #10
0
    def test_should_return_the_first_stock_price(self, app):
        # Given
        offerer = create_offerer()
        venue = create_venue(offerer=offerer)
        offer = create_offer_with_thing_product(venue=venue)
        stock1 = create_stock(offer=offer, price=7)
        stock2 = create_stock(offer=offer, price=5)
        stock3 = create_stock(offer=offer, price=10.3)
        repository.save(stock1, stock2, stock3)

        # When
        result = build_object(offer)

        # Then
        assert result["offer"]["prices"] == [Decimal("5.00"), Decimal("7.00"), Decimal("10.30")]
Example #11
0
def test_create_payment_for_booking_when_iban_is_on_venue_should_take_payment_info_from_venue(
        app):
    # given
    user = create_user()
    stock = create_stock(price=10, quantity=5)
    offerer = create_offerer(name="Test Offerer")
    venue = create_venue(
        offerer,
        name="Test Venue",
    )
    booking = create_booking(user=user, quantity=1, stock=stock)

    create_bank_information(bic="Lajr93",
                            iban="B135TGGEG532TG",
                            offerer=offerer)
    create_bank_information(bic="LokiJU76",
                            iban="KD98765RFGHZ788",
                            venue=venue)

    booking.stock.offer = Offer()
    booking.stock.offer.venue = venue
    booking.stock.offer.venue.managingOfferer = offerer
    booking_reimbursement = BookingReimbursement(
        booking, ReimbursementRules.PHYSICAL_OFFERS, Decimal(10))

    # when
    payment = create_payment_for_booking(booking_reimbursement)

    # then
    assert payment.iban == "KD98765RFGHZ788"
    assert payment.bic == "LOKIJU76"
Example #12
0
    def test_contains_info_on_offer(self):
        # given
        user = create_user(email="*****@*****.**", idx=3)
        offerer = create_offerer(siren="987654321", name="Joe le Libraire")
        venue = create_venue(offerer,
                             name="Jack le Sculpteur",
                             siret="1234567891234")
        offer = create_offer_with_thing_product(venue)
        stock = create_stock(offer=offer, price=12, quantity=5)
        booking = create_booking(user=user,
                                 stock=stock,
                                 date_created=datetime(2018, 2, 5),
                                 idx=5,
                                 quantity=2)
        payment = create_payment(booking, offerer, 35)
        find_date = Mock()
        find_date.return_value = datetime(2018, 2, 19)

        # when
        details = create_payment_details(payment,
                                         find_booking_date_used=find_date)

        # then
        assert details.offer_name == "Test Book"
        assert details.offer_type == "Audiovisuel - films sur supports physiques et VOD"
Example #13
0
    def test_contains_info_on_venue(self):
        # given
        user = create_user(email="*****@*****.**", idx=3)
        offerer = create_offerer(siren="987654321", name="Joe le Libraire")
        venue = create_venue(offerer,
                             name="Jack le Sculpteur",
                             siret="1234567891234",
                             idx=1)
        offer = create_offer_with_thing_product(venue)
        stock = create_stock(offer=offer, price=12, quantity=5)
        booking = create_booking(user=user,
                                 stock=stock,
                                 date_created=datetime(2018, 2, 5),
                                 idx=5,
                                 quantity=2)
        payment = create_payment(booking, offerer, 35)
        find_date = Mock()
        find_date.return_value = datetime(2018, 2, 19)

        # when
        details = create_payment_details(payment,
                                         find_booking_date_used=find_date)

        # then
        assert details.venue_name == "Jack le Sculpteur"
        assert details.venue_siret == "1234567891234"
        assert details.venue_humanized_id == humanize(venue.id)
Example #14
0
def test_create_payment_for_booking_with_common_information(app):
    # given
    user = create_user()
    stock = create_stock(price=10, quantity=5)
    booking = create_booking(user=user, quantity=1, stock=stock)
    booking.stock.offer = Offer()
    booking.stock.offer.venue = VenueSQLEntity()
    offerer = create_offerer()
    create_bank_information(bic="QSDFGH8Z555",
                            iban="CF13QSDFGH456789",
                            offerer=offerer)
    booking.stock.offer.venue.managingOfferer = offerer
    booking_reimbursement = BookingReimbursement(
        booking, ReimbursementRules.PHYSICAL_OFFERS, Decimal(10))

    # when
    payment = create_payment_for_booking(booking_reimbursement)

    # then
    assert payment.booking == booking
    assert payment.amount == Decimal(10)
    assert payment.reimbursementRule == ReimbursementRules.PHYSICAL_OFFERS.value.description
    assert payment.reimbursementRate == ReimbursementRules.PHYSICAL_OFFERS.value.rate
    assert payment.comment is None
    assert payment.author == "batch"
    assert payment.transactionLabel == "pass Culture Pro - remboursement 2nde quinzaine 10-2018"
Example #15
0
        def when_the_booking_does_not_exists(self, app):
            # Given
            user = users_factories.UserFactory()
            offerer = create_offerer()
            user_offerer = create_user_offerer(user, offerer)
            venue = create_venue(offerer)
            offer = create_offer_with_event_product(venue)
            stock = create_stock(offer=offer)
            booking = create_booking(user=user, stock=stock, venue=venue)
            repository.save(user_offerer, booking)

            api_key = "A_MOCKED_API_KEY"
            offerer_api_key = create_api_key_for_offerer(offerer, api_key)
            repository.save(offerer_api_key)

            # When
            response = TestClient(app.test_client()).patch(
                "/v2/bookings/cancel/token/FAKETOKEN",
                headers={
                    "Authorization": f"Bearer {api_key}",
                    "Origin": "http://localhost"
                },
            )

            # Then
            assert response.status_code == 404
            assert response.json["global"] == [
                "Cette contremarque n'a pas été trouvée"
            ]
        def test_fnac_stock_provider_update_one_stock_and_update_matching_offer(self, mock_fnac_api_response, app):
            # Given
            mock_fnac_api_response.return_value = iter([{"ref": "9780199536986", "available": 10, "price": 16}])

            offerer = create_offerer()
            venue = create_venue(offerer)

            fnac_stocks_provider = activate_provider("FnacStocks")
            venue_provider = create_venue_provider(
                venue, fnac_stocks_provider, is_active=True, venue_id_at_offer_provider="12345678912345"
            )
            product = create_product_with_thing_type(id_at_providers="9780199536986")
            offer = create_offer_with_thing_product(
                venue, product=product, id_at_providers="9780199536986@12345678912345"
            )
            stock = create_stock(id_at_providers="9780199536986@12345678912345", offer=offer, quantity=20)

            repository.save(product, offer, stock)

            fnac_stocks = FnacStocks(venue_provider)

            # When
            fnac_stocks.updateObjects()

            # Then
            stock = Stock.query.one()
            assert stock.quantity == 10
            assert Offer.query.count() == 1
Example #17
0
def save_reimbursable_thing_offer(venue: VenueSQLEntity):
    paid_reimbursable_offer = create_offer_with_thing_product(
        venue, thing_name="Roman cool", thing_type=ThingType.LIVRE_EDITION)
    reimbursable_stock = create_stock(offer=paid_reimbursable_offer, price=30)
    repository.save(reimbursable_stock)
    logger.info("created 1 reimbursable thing offer with 1 paid stock of 30 €")
    return reimbursable_stock
Example #18
0
        def test_titelive_stock_provider_update_1_stock_and_1_offer(self, stub_get_stocks_information, app):
            # Given
            stub_get_stocks_information.return_value = iter(
                [{"ref": "0002730757438", "available": 10, "price": 4500, "validUntil": "2019-10-31T15:10:27Z"}]
            )

            offerer = create_offerer()
            venue = create_venue(offerer, siret="77567146400110")

            titelive_stocks_provider = activate_provider("TiteLiveStocks")
            venue_provider = create_venue_provider(
                venue, titelive_stocks_provider, is_active=True, venue_id_at_offer_provider="77567146400110"
            )
            product = create_product_with_thing_type(id_at_providers="02730757438")
            offer = create_offer_with_thing_product(
                venue, product=product, id_at_providers="0002730757438@77567146400110"
            )
            stock = create_stock(id_at_providers="0002730757438@77567146400110", offer=offer, quantity=10)
            repository.save(product, venue_provider, stock)

            titelive_stocks = TiteLiveStocks(venue_provider)

            # When
            titelive_stocks.updateObjects()

            # Then
            stock = Stock.query.one()
            assert stock.quantity == 10
            assert Offer.query.count() == 1
Example #19
0
    def test_delete_venue_and_offers_should_raise_an_attribute_error_when_at_least_one_offer_has_stocks(
            self, app):
        # Given
        offerer = create_offerer(siren="123456789")
        venue = create_venue(
            offerer,
            idx=1,
            siret="12345678900002",
            address="1 rue Vieille Adresse",
            name="Vieux nom",
            city="Vieilleville",
            latitude="48.863",
            longitude="2.36",
            postal_code="75001",
        )
        offer1 = create_offer_with_event_product(venue)
        offer2 = create_offer_with_event_product(venue)
        stock = create_stock(offer=offer1)

        repository.save(offer1, offer2, stock, venue)

        # When
        with pytest.raises(AttributeError) as e:
            delete_venue_and_offers_for_venue_id(humanize(venue.id))

        # Then
        assert str(
            e.value
        ) == "Offres non supprimables car au moins une contient des stocks"
    def test_save_chunks_insert_1_offer_and_1_stock_in_chunk(self, app):
        # Given
        offerer = create_offerer()
        venue = create_venue(offerer)
        product = create_product_with_thing_subcategory()
        repository.save(venue, product)

        offer = create_offer_with_thing_product(
            venue, product=product, id_at_providers="1%12345678912345")
        offer.venueId = venue.id
        offer_id = db.session.execute(Sequence("offer_id_seq"))
        offer.id = offer_id

        stock = create_stock(offer=offer)
        stock.offerId = offer_id

        chunk_to_insert = {
            "1|Offer": offer,
            "1|Stock": stock,
        }
        db.session.expunge(offer)
        db.session.expunge(stock)

        chunk_to_update = {}

        # When
        save_chunks(chunk_to_insert, chunk_to_update)

        # Then
        assert Offer.query.count() == 1
        assert Stock.query.count() == 1
Example #21
0
        def when_user_is_logged_in_and_a_favorite_booked_offer_exist(self, app):
            # Given
            user = create_user()
            offerer = create_offerer()
            venue = create_venue(offerer, postal_code="29100", siret="12345678912341")
            offer = create_offer_with_thing_product(venue, thumb_count=0)
            mediation = create_mediation(offer, is_active=True)
            favorite = create_favorite(mediation=mediation, offer=offer, user=user)
            stock = create_stock(offer=offer, price=0)
            booking = create_booking(user=user, stock=stock)
            repository.save(booking, favorite)

            # When
            response = TestClient(app.test_client()).with_auth(user.email).get("/favorites")

            # Then
            assert response.status_code == 200
            assert len(response.json) == 1
            favorite = response.json[0]
            assert "offer" in favorite
            assert "venue" in favorite["offer"]
            assert "stocks" in favorite["offer"]
            assert stock.price == favorite["offer"]["stocks"][0]["price"]
            assert booking.quantity == favorite["booking"]["quantity"]
            assert humanize(booking.id) in favorite["booking"]["id"]
            assert "validationToken" not in favorite["offer"]["venue"]
Example #22
0
        def test_should_returns_204_with_lowercase_token(self, app):
            # Given
            pro_user = create_user(email="Mr [email protected]",
                                   public_name="Mr Books")
            offerer = create_offerer(siren="793875030")
            user_offerer = create_user_offerer(pro_user, offerer)
            venue = create_venue(offerer)
            book_offer = create_offer_with_event_product(venue)
            stock = create_stock(offer=book_offer)

            user = users_factories.UserFactory()
            booking = create_booking(user=user, stock=stock, venue=venue)

            repository.save(booking, user_offerer)
            api_key = random_token(64)
            offerer_api_key = create_api_key_for_offerer(offerer, api_key)
            repository.save(offerer_api_key)

            # When
            token = booking.token.lower()
            response = TestClient(app.test_client()).patch(
                "/v2/bookings/cancel/token/{}".format(token),
                headers={
                    "Authorization": "Bearer " + api_key,
                    "Origin": "http://localhost"
                },
            )

            # Then
            assert response.status_code == 204
            updated_booking = Booking.query.first()
            assert updated_booking.isCancelled
Example #23
0
        def test_cancel_a_booking_already_cancelled(self, app):
            # Given
            pro_user = create_user(email="Mr [email protected]",
                                   public_name="Mr Books")
            offerer = create_offerer(siren="793875030")
            user_offerer = create_user_offerer(pro_user, offerer)
            venue = create_venue(offerer)
            book_offer = create_offer_with_thing_product(venue)
            stock = create_stock(offer=book_offer)

            user = users_factories.UserFactory()
            booking = create_booking(user=user,
                                     stock=stock,
                                     is_cancelled=True,
                                     venue=venue)

            repository.save(booking, user_offerer)
            api_key = random_token(64)
            offerer_api_key = create_api_key_for_offerer(offerer, api_key)
            repository.save(offerer_api_key)

            # When
            response = TestClient(app.test_client()).patch(
                "/v2/bookings/cancel/token/{}".format(booking.token),
                headers={
                    "Authorization": "Bearer " + api_key,
                    "Origin": "http://localhost"
                },
            )

            # Then
            assert response.status_code == 410
            assert response.json["global"] == [
                "Cette contremarque a déjà été annulée"
            ]
Example #24
0
    def test_should_not_revert_booking_dateused_if_booking_already_has_one(
            self, stub_get_bookings_cancelled_during_quarantine_with_payment,
            app):
        # Given
        dateused = datetime(2020, 7, 3, 20, 4, 4)
        beneficiary = create_user()
        create_deposit(user=beneficiary)
        offerer = create_offerer()
        venue = create_venue(offerer)
        offer = create_offer_with_event_product(venue)
        stock = create_stock(beginning_datetime=datetime(2020, 4, 16),
                             offer=offer)
        booking = create_booking(
            stock=stock,
            user=beneficiary,
            is_cancelled=True,
            date_created=datetime(2019, 7, 3, 20, 4, 4),
            date_used=dateused,
        )
        payment = create_payment(offerer=offerer, booking=booking)
        repository.save(payment)

        stub_get_bookings_cancelled_during_quarantine_with_payment.return_value = [
            booking
        ]

        # When
        correct_booking_status()

        # Then
        corrected_booking = Booking.query.get(booking.id)
        assert corrected_booking.isCancelled is False
        assert corrected_booking.cancellationDate is None
        assert corrected_booking.isUsed is True
        assert corrected_booking.dateUsed == dateused
Example #25
0
        def expect_the_booking_to_be_cancelled_by_current_user(self, app):
            # Given
            in_four_days = datetime.utcnow() + timedelta(days=4)
            user = create_user()
            offerer = create_offerer()
            venue = create_venue(offerer)
            offer = create_offer_with_event_product(venue)
            stock = create_stock(beginning_datetime=in_four_days, offer=offer)
            booking = create_booking(user=user, stock=stock, venue=venue)
            create_deposit(user, amount=500)
            repository.save(booking)

            # When
            response = (TestClient(app.test_client()).with_auth(
                user.email).put(f"/bookings/{humanize(booking.id)}/cancel"))

            # Then
            assert response.status_code == 200
            assert Booking.query.get(booking.id).isCancelled
            assert response.json == {
                "amount": 10.0,
                "completedUrl": None,
                "id": humanize(booking.id),
                "isCancelled": True,
                "quantity": booking.quantity,
                "stock": {
                    "price": 10.0
                },
                "stockId": humanize(stock.id),
                "token": booking.token,
            }
    def test_should_return_empty_isbn_when_product_does_not_contain_isbn(self):
        # Given
        user = create_user(email="*****@*****.**", public_name="John Doe")
        offerer = create_offerer()
        venue = create_venue(offerer,
                             name="Venue name",
                             address="Venue address")
        product = create_product_with_thing_type(
            thing_name="Event Name",
            thing_type=ThingType.CINEMA_ABO,
            extra_data={})
        offer = create_offer_with_thing_product(venue,
                                                product=product,
                                                idx=999)
        stock = create_stock(offer=offer, price=12)
        booking = create_booking(user=user,
                                 quantity=3,
                                 stock=stock,
                                 venue=venue)

        # When
        response = serialize_booking(booking)

        # Then
        assert response["ean13"] == ""
        def test_fnac_stock_provider_available_stock_is_sum_of_updated_available_and_bookings(
            self, mock_fnac_api_response, app
        ):
            # Given
            mock_fnac_api_response.return_value = iter([{"ref": "9780199536986", "available": 5, "price": 0}])

            offerer = create_offerer()
            venue = create_venue(offerer, siret="12345678912345")
            fnac_stocks_provider = activate_provider("FnacStocks")
            venue_provider = create_venue_provider(
                venue, fnac_stocks_provider, is_active=True, venue_id_at_offer_provider="12345678912345"
            )
            product = create_product_with_thing_type(id_at_providers="9780199536986")

            offer = create_offer_with_thing_product(
                venue, product=product, id_at_providers="9780199536986@12345678912345"
            )

            stock = create_stock(id_at_providers="9780199536986@12345678912345", offer=offer, price=0, quantity=20)

            booking = create_booking(user=create_user(), quantity=1, stock=stock)

            repository.save(venue_provider, booking)

            mock_fnac_api_response.return_value = iter([{"ref": "9780199536986", "available": 66, "price": 0}])

            fnac_stocks = FnacStocks(venue_provider)

            # When
            fnac_stocks.updateObjects()

            # Then
            stock = Stock.query.one()
            assert stock.quantity == 67
Example #28
0
def test_create_payment_for_booking_when_no_iban_on_venue_should_take_payment_info_from_offerer(
        app):
    # given
    user = create_user()
    stock = create_stock(price=10, quantity=5)
    offerer = create_offerer(name="Test Offerer")
    venue = create_venue(offerer, name="Test Venue")

    create_bank_information(bic="QsdFGH8Z555",
                            iban="cf13QSDFGH456789",
                            offerer=offerer)
    create_bank_information(bic=None, iban=None, venue=venue)

    booking = create_booking(user=user, quantity=1, stock=stock)
    booking.stock.offer = Offer()
    booking.stock.offer.venue = venue
    booking.stock.offer.venue.managingOfferer = offerer
    booking_reimbursement = BookingReimbursement(
        booking, ReimbursementRules.PHYSICAL_OFFERS, Decimal(10))

    # when
    payment = create_payment_for_booking(booking_reimbursement)

    # then
    assert payment.iban == "CF13QSDFGH456789"
    assert payment.bic == "QSDFGH8Z555"
Example #29
0
def test_create_payment_for_booking_takes_recipient_name_and_siren_from_offerer(
        app):
    # given
    user = create_user()
    stock = create_stock(price=10, quantity=5)
    booking = create_booking(user=user, quantity=1, stock=stock)
    booking.stock.offer = Offer()
    offerer = create_offerer(name="Test Offerer", siren="123456789")
    venue = create_venue(offerer, name="Test Venue")

    create_bank_information(bic="QSDFGH8Z555",
                            iban="CF13QSDFGH456789",
                            offerer=offerer)
    create_bank_information(bic=None, iban=None, venue=venue)

    booking.stock.offer.venue = venue
    booking.stock.offer.venue.managingOfferer = offerer
    booking_reimbursement = BookingReimbursement(
        booking, ReimbursementRules.PHYSICAL_OFFERS, Decimal(10))

    # when
    payment = create_payment_for_booking(booking_reimbursement)

    # then
    assert payment.recipientName == "Test Offerer"
    assert payment.recipientSiren == "123456789"
Example #30
0
        def when_the_logged_user_has_not_rights_on_offerer(self, app):
            # Given
            pro_user = create_user(email="*****@*****.**",
                                   public_name="Mr Books")
            offerer = create_offerer(siren="793875030")
            user_offerer = create_user_offerer(pro_user, offerer)
            venue = create_venue(offerer)
            book_offer = create_offer_with_event_product(venue)
            stock = create_stock(offer=book_offer)

            user = users_factories.UserFactory()
            booking = create_booking(user=user, stock=stock, venue=venue)

            repository.save(booking, user_offerer)

            offerer_with_api_key = create_offerer()
            repository.save(offerer_with_api_key)

            api_key = random_token(64)
            offerer_api_key = create_api_key_for_offerer(
                offerer_with_api_key, api_key)

            repository.save(offerer_api_key)

            # When
            response = (TestClient(app.test_client()).with_auth(
                user.email).patch("/v2/bookings/cancel/token/{}".format(
                    booking.token)))

            # 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."
            ]