コード例 #1
0
    def test_allocine_venue_provider_is_successfully_updated(self, app):
        # Given
        user_offerer = offer_factories.UserOffererFactory()
        user = user_offerer.user
        offerer = user_offerer.offerer
        venue = offer_factories.VenueFactory(managingOfferer=offerer)
        provider = offerers_factories.AllocineProviderFactory()
        venue_provider = offerers_factories.AllocineVenueProviderFactory(
            venue=venue,
            provider=provider,
            isDuo=False,
            quantity=42,
        )
        offerers_factories.AllocineVenueProviderPriceRuleFactory(allocineVenueProvider=venue_provider, price=10)

        updated_venue_provider_data = {
            "providerId": humanize(provider.id),
            "venueId": humanize(venue.id),
            "isDuo": True,
            "quantity": 77,
            "price": 64,
        }

        auth_request = TestClient(app.test_client()).with_session_auth(email=user.email)

        # When
        response = auth_request.put("/venueProviders", json=updated_venue_provider_data)

        # Then
        assert response.status_code == 200
        assert response.json["provider"]["id"] == humanize(provider.id)
        assert response.json["venueId"] == humanize(venue.id)
        assert response.json["quantity"] == updated_venue_provider_data["quantity"]
        assert response.json["price"] == updated_venue_provider_data["price"]
        assert response.json["isDuo"] == updated_venue_provider_data["isDuo"]
コード例 #2
0
    def test_get_enabled_providers_for_pro(self, app):
        # Given
        Provider.query.delete()  # remove automatically added providers
        provider1 = offerers_factories.AllocineProviderFactory(
            localClass="Truc", isActive=True, enabledForPro=True)
        offerers_factories.APIProviderFactory(name="NotEnabledAPIProvider",
                                              isActive=True,
                                              enabledForPro=False)
        offerers_factories.APIProviderFactory(name="InactiveAPIProvider",
                                              isActive=False,
                                              enabledForPro=True)
        offerers_factories.APIProviderFactory(name="InactiveAPIProvider2",
                                              isActive=False,
                                              enabledForPro=False)
        provider2 = offerers_factories.APIProviderFactory(name="Provider2",
                                                          isActive=True,
                                                          enabledForPro=True)

        # When
        enabled_providers = get_enabled_providers_for_pro()

        # Then
        assert len(enabled_providers) == 2
        assert provider1 in enabled_providers
        assert provider2 in enabled_providers
コード例 #3
0
    def test_user_has_right_on_venue(self, app):
        # Given
        user = user_factories.ProFactory()
        owner_offerer = offer_factories.UserOffererFactory()
        offerer = owner_offerer.offerer
        venue = offer_factories.VenueFactory(managingOfferer=offerer)
        provider = offerers_factories.AllocineProviderFactory()
        venue_provider = offerers_factories.AllocineVenueProviderFactory(
            venue=venue,
            provider=provider,
            isDuo=False,
            quantity=42,
        )
        offerers_factories.AllocineVenueProviderPriceRuleFactory(allocineVenueProvider=venue_provider, price=10)

        updated_venue_provider_data = {
            "providerId": humanize(provider.id),
            "venueId": humanize(venue.id),
            "isDuo": True,
            "quantity": 77,
            "price": 64,
        }

        auth_request = TestClient(app.test_client()).with_session_auth(email=user.email)

        # When
        response = auth_request.put("/venueProviders", json=updated_venue_provider_data)

        # Then
        assert response.status_code == 403
コード例 #4
0
    def test_allocine_offer(self):
        provider = offerers_factories.AllocineProviderFactory(
            localClass="AllocineStocks")
        offer = offers_factories.OfferFactory(lastProvider=provider,
                                              idAtProviders="1")

        validation.check_offer_existing_stocks_are_editable(offer)
コード例 #5
0
    def test_synchronize_venue_providers(self,
                                         mocked_synchronize_venue_provider,
                                         app):
        # Given
        api_provider_1 = offerers_factories.APIProviderFactory()
        api_provider_2 = offerers_factories.APIProviderFactory()
        specific_provider = offerers_factories.AllocineProviderFactory()
        inactive_provider = offerers_factories.APIProviderFactory(
            isActive=False)

        correct_venue_providers = [
            VenueProviderFactory(isActive=True, provider=api_provider_1),
            VenueProviderFactory(isActive=True, provider=api_provider_1),
            VenueProviderFactory(isActive=True, provider=api_provider_2),
        ]

        VenueProviderFactory(isActive=True, provider=specific_provider)
        VenueProviderFactory(isActive=False, provider=api_provider_1)
        VenueProviderFactory(isActive=True, provider=inactive_provider)

        # When
        synchronize_stocks()

        # Then
        assert mocked_synchronize_venue_provider.call_count == len(
            correct_venue_providers)
        mocked_synchronize_venue_provider.assert_has_calls(
            call(v) for v in correct_venue_providers)
コード例 #6
0
    def test_allocine_offer(self):
        provider = offerers_factories.AllocineProviderFactory(
            localClass="AllocineStocks")
        offer = offers_factories.OfferFactory(lastProvider=provider,
                                              idAtProviders="1")
        stock = offers_factories.StockFactory(offer=offer)

        validation.check_stock_is_updatable(stock)
コード例 #7
0
    def test_offer_from_provider(self, app):
        provider = offerers_factories.AllocineProviderFactory()
        offer = offers_factories.OfferFactory(lastProvider=provider,
                                              idAtProviders="1")

        with pytest.raises(ApiErrors) as error:
            validation.check_stock_can_be_created_for_offer(offer)

        assert error.value.errors["global"] == [
            "Les offres importées ne sont pas modifiables"
        ]
コード例 #8
0
    def test_iterator_is_called_until_exhausted(self, next_function):
        # Given
        offerers_factories.AllocineProviderFactory(localClass="TestLocalProvider")
        local_provider = provider_test_utils.TestLocalProvider()
        next_function.side_effect = [[], [], []]

        # When
        local_provider.updateObjects()

        # Then
        assert next_function.call_count == 4
コード例 #9
0
    def test_does_not_update_objects_when_provider_is_not_active(self, next_function):
        # Given
        offerers_factories.AllocineProviderFactory(localClass="TestLocalProvider", isActive=False)
        providable_info = create_providable_info(date_modified=datetime(2018, 1, 1))
        local_provider = provider_test_utils.TestLocalProvider()
        next_function.side_effect = [[providable_info]]

        # When
        local_provider.updateObjects()

        # Then
        assert Product.query.count() == 0
コード例 #10
0
    def test_does_not_create_new_object_when_can_create_is_false(self, next_function):
        # Given
        offerers_factories.AllocineProviderFactory(localClass="TestLocalProviderNoCreation")
        providable_info = create_providable_info()
        local_provider = provider_test_utils.TestLocalProviderNoCreation()
        next_function.side_effect = [[providable_info]]

        # When
        local_provider.updateObjects()

        # Then
        assert Product.query.count() == 0
コード例 #11
0
    def test_iterator_should_log_provider_event_from_start_to_stop(self, next_function):
        # Given
        offerers_factories.AllocineProviderFactory(localClass="TestLocalProvider")
        local_provider = provider_test_utils.TestLocalProvider()
        next_function.side_effect = [[], []]

        # When
        local_provider.updateObjects()

        # Then
        provider_events = LocalProviderEvent.query.order_by(LocalProviderEvent.id.asc()).all()
        assert provider_events[0].type == LocalProviderEventType.SyncStart
        assert provider_events[1].type == LocalProviderEventType.SyncEnd
コード例 #12
0
    def test_returns_object_with_expected_attributes(self):
        # Given
        provider = offerers_factories.AllocineProviderFactory(localClass="TestLocalProvider")
        providable_info = create_providable_info()
        local_provider = provider_test_utils.TestLocalProvider()

        # When
        product = local_provider._create_object(providable_info)

        # Then
        assert isinstance(product, Product)
        assert product.name == "New Product"
        assert product.subcategoryId == subcategories.LIVRE_PAPIER.id
        assert product.lastProviderId == provider.id
コード例 #13
0
    def test_creates_new_object_when_no_object_in_database(self, next_function):
        # Given
        offerers_factories.AllocineProviderFactory(localClass="TestLocalProvider")
        providable_info = create_providable_info()
        local_provider = provider_test_utils.TestLocalProvider()
        next_function.side_effect = [[providable_info]]

        # When
        local_provider.updateObjects()

        # Then
        new_product = Product.query.one()
        assert new_product.name == "New Product"
        assert new_product.subcategoryId == subcategories.LIVRE_PAPIER.id
コード例 #14
0
    def test_creates_only_one_object_when_limit_is_one(self, next_function):
        # Given
        offerers_factories.AllocineProviderFactory(localClass="TestLocalProvider")
        providable_info1 = create_providable_info()
        providable_info2 = create_providable_info(id_at_providers="2")
        local_provider = provider_test_utils.TestLocalProvider()
        next_function.side_effect = [[providable_info1], [providable_info2]]

        # When
        local_provider.updateObjects(limit=1)

        # Then
        new_product = Product.query.one()
        assert new_product.name == "New Product"
        assert new_product.subcategoryId == subcategories.LIVRE_PAPIER.id
コード例 #15
0
    def test_raises_api_errors_exception_when_errors_occur_on_model_and_log_error(self):
        # Given
        offerers_factories.AllocineProviderFactory(localClass="TestLocalProviderWithApiErrors")
        providable_info = create_providable_info()
        local_provider = provider_test_utils.TestLocalProviderWithApiErrors()

        # When
        with pytest.raises(ApiErrors) as api_errors:
            local_provider._create_object(providable_info)

        # Then
        assert api_errors.value.errors["url"] == [
            "Un produit de sous-catégorie ACHAT_INSTRUMENT ne peut pas être numérique"
        ]
        assert Product.query.count() == 0
        provider_event = LocalProviderEvent.query.one()
        assert provider_event.type == LocalProviderEventType.SyncError
コード例 #16
0
    def test_should_only_replace_image_at_specific_thumb_index_when_thumbCount_is_superior_to_thumbIndex(self):
        provider = offerers_factories.AllocineProviderFactory(localClass="TestLocalProviderWithThumb")
        providable_info = create_providable_info()
        product = offers_factories.ThingProductFactory(
            idAtProviders=providable_info.id_at_providers,
            lastProvider=provider,
            thumbCount=4,
        )
        local_provider = provider_test_utils.TestLocalProviderWithThumb()
        thumb = local_provider.get_object_thumb()

        # When
        thumb_index = 1
        _save_same_thumb_from_thumb_count_to_index(product, thumb_index, thumb)
        repository.save(product)

        # Then
        assert product.thumbCount == 4
コード例 #17
0
    def test_create_several_thumbs_when_thumb_index_is_4_and_current_thumbCount_is_0(self):
        # Given
        provider = offerers_factories.AllocineProviderFactory(localClass="TestLocalProviderWithThumbIndexAt4")
        providable_info = create_providable_info()
        product = offers_factories.ThingProductFactory(
            idAtProviders=providable_info.id_at_providers,
            lastProvider=provider,
        )
        local_provider = provider_test_utils.TestLocalProviderWithThumbIndexAt4()

        # When
        local_provider._handle_thumb(product)
        repository.save(product)

        # Then
        assert local_provider.checkedThumbs == 1
        assert local_provider.updatedThumbs == 0
        assert local_provider.createdThumbs == 4
        assert product.thumbCount == 4
コード例 #18
0
    def test_call_save_thumb_should_increase_thumbCount_by_1(self):
        # Given
        provider = offerers_factories.AllocineProviderFactory(localClass="TestLocalProviderWithThumb")
        providable_info = create_providable_info()
        product = offers_factories.ThingProductFactory(
            idAtProviders=providable_info.id_at_providers,
            lastProvider=provider,
        )
        local_provider = provider_test_utils.TestLocalProviderWithThumb()

        # When
        local_provider._handle_thumb(product)
        repository.save(product)

        # Then
        assert local_provider.checkedThumbs == 1
        assert local_provider.updatedThumbs == 0
        assert local_provider.createdThumbs == 1
        assert product.thumbCount == 1
コード例 #19
0
    def test_returns_object_with_expected_attributes(self):
        # Given
        provider = offerers_factories.AllocineProviderFactory(localClass="TestLocalProvider")
        providable_info = create_providable_info()
        product = offers_factories.ThingProductFactory(
            name="Old product name",
            subcategoryId=subcategories.ACHAT_INSTRUMENT.id,
            idAtProviders=providable_info.id_at_providers,
            lastProvider=provider,
        )
        local_provider = provider_test_utils.TestLocalProvider()

        # When
        local_provider._handle_update(product, providable_info)

        # Then
        product = Product.query.one()
        assert product.name == "New Product"
        assert product.subcategoryId == subcategories.LIVRE_PAPIER.id
コード例 #20
0
    def test_should_iterate_from_current_thumbCount_to_thumbIndex_when_thumbCount_is_0(self, app):
        # Given
        provider = offerers_factories.AllocineProviderFactory(localClass="TestLocalProviderWithThumb")
        providable_info = create_providable_info()
        product = offers_factories.ThingProductFactory(
            idAtProviders=providable_info.id_at_providers,
            lastProvider=provider,
            thumbCount=0,
        )
        local_provider = provider_test_utils.TestLocalProviderWithThumb()
        thumb = local_provider.get_object_thumb()

        # When
        thumb_index = 4
        _save_same_thumb_from_thumb_count_to_index(product, thumb_index, thumb)
        repository.save(product)

        # Then
        assert product.thumbCount == 4
コード例 #21
0
    def when_stock_is_on_an_offer_from_titelive_provider(
            self, app, db_session):
        # given
        provider = offerers_factories.AllocineProviderFactory(
            localClass="TiteLiveThings")
        offer = offers_factories.OfferFactory(lastProvider=provider,
                                              idAtProviders="1")
        stock = offers_factories.StockFactory(offer=offer)

        user = users_factories.AdminFactory()

        # when
        client = TestClient(app.test_client()).with_session_auth(user.email)
        response = client.delete(f"/stocks/{humanize(stock.id)}")

        # then
        assert response.status_code == 400
        assert response.json["global"] == [
            "Les offres importées ne sont pas modifiables"
        ]
コード例 #22
0
    def test_does_not_update_existing_object_when_date_is_older_than_last_modified_date(self, next_function):
        # Given
        provider = offerers_factories.AllocineProviderFactory(localClass="TestLocalProvider")
        providable_info = create_providable_info(date_modified=datetime(2018, 1, 1))
        product = offers_factories.ThingProductFactory(
            dateModifiedAtLastProvider=datetime(2020, 1, 1),
            lastProvider=provider,
            idAtProviders=providable_info.id_at_providers,
            name="Old product name",
            subcategoryId=subcategories.ACHAT_INSTRUMENT.id,
        )
        local_provider = provider_test_utils.TestLocalProvider()
        next_function.side_effect = [[providable_info]]

        # When
        local_provider.updateObjects()

        # Then
        product = Product.query.one()
        assert product.name == "Old product name"
        assert product.dateModifiedAtLastProvider == datetime(2020, 1, 1)
コード例 #23
0
    def test_raises_api_errors_exception_when_errors_occur_on_model(self):
        # Given
        provider = offerers_factories.AllocineProviderFactory(localClass="TestLocalProviderWithApiErrors")
        providable_info = create_providable_info()
        product = offers_factories.ThingProductFactory(
            name="Old product name",
            subcategoryId=subcategories.ACHAT_INSTRUMENT.id,
            idAtProviders=providable_info.id_at_providers,
            lastProvider=provider,
        )
        local_provider = provider_test_utils.TestLocalProviderWithApiErrors()

        # When
        with pytest.raises(ApiErrors) as api_errors:
            local_provider._handle_update(product, providable_info)

        # Then
        assert api_errors.value.errors["url"] == [
            "Un produit de sous-catégorie ACHAT_INSTRUMENT ne peut pas être numérique"
        ]
        provider_event = LocalProviderEvent.query.one()
        assert provider_event.type == LocalProviderEventType.SyncError
コード例 #24
0
    def test_should_get_actives_and_enabled_providers_for_pro(self, app):
        # Given
        Provider.query.delete()  # remove automatically added providers
        offerers_factories.AllocineProviderFactory(name="Provider1",
                                                   isActive=True,
                                                   enabledForPro=True)
        offerers_factories.APIProviderFactory(name="NotEnabledAPIProvider",
                                              isActive=True,
                                              enabledForPro=False)
        offerers_factories.APIProviderFactory(name="InactiveAPIProvider",
                                              isActive=False,
                                              enabledForPro=True)
        provider = offerers_factories.APIProviderFactory(name="Provider2",
                                                         isActive=True,
                                                         enabledForPro=True)

        # When
        providers = get_providers_enabled_for_pro_excluding_specific_provider(
            "AllocineStocks")

        # Then
        assert providers == [provider]
コード例 #25
0
 def test_not_editabe_if_from_another_provider(self):
     provider = providers_factories.AllocineProviderFactory(
         localClass="TiteLiveStocks")
     offer = factories.OfferFactory(lastProvider=provider)
     assert not offer.isEditable
コード例 #26
0
 def test_editable_if_from_allocine(self):
     provider = providers_factories.AllocineProviderFactory(
         localClass="AllocineStocks")
     offer = factories.OfferFactory(lastProvider=provider)
     assert offer.isEditable