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"]
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
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
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)
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)
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)
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" ]
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
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
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
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
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
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
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
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
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
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
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
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
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
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" ]
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)
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
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]
def test_not_editabe_if_from_another_provider(self): provider = providers_factories.AllocineProviderFactory( localClass="TiteLiveStocks") offer = factories.OfferFactory(lastProvider=provider) assert not offer.isEditable
def test_editable_if_from_allocine(self): provider = providers_factories.AllocineProviderFactory( localClass="AllocineStocks") offer = factories.OfferFactory(lastProvider=provider) assert offer.isEditable