udata 9.1.2.dev30355__py2.py3-none-any.whl → 9.1.2.dev30454__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of udata might be problematic. Click here for more details.
- tasks/__init__.py +109 -107
- tasks/helpers.py +18 -18
- udata/__init__.py +4 -4
- udata/admin/views.py +5 -5
- udata/api/__init__.py +111 -134
- udata/api/commands.py +45 -37
- udata/api/errors.py +5 -4
- udata/api/fields.py +23 -21
- udata/api/oauth2.py +55 -74
- udata/api/parsers.py +15 -15
- udata/api/signals.py +1 -1
- udata/api_fields.py +137 -89
- udata/app.py +58 -55
- udata/assets.py +5 -5
- udata/auth/__init__.py +37 -26
- udata/auth/forms.py +23 -15
- udata/auth/helpers.py +1 -1
- udata/auth/mails.py +3 -3
- udata/auth/password_validation.py +19 -15
- udata/auth/views.py +94 -68
- udata/commands/__init__.py +71 -69
- udata/commands/cache.py +7 -7
- udata/commands/db.py +201 -140
- udata/commands/dcat.py +36 -30
- udata/commands/fixtures.py +100 -84
- udata/commands/images.py +21 -20
- udata/commands/info.py +17 -20
- udata/commands/init.py +10 -10
- udata/commands/purge.py +12 -13
- udata/commands/serve.py +41 -29
- udata/commands/static.py +16 -18
- udata/commands/test.py +20 -20
- udata/commands/tests/fixtures.py +26 -24
- udata/commands/worker.py +31 -33
- udata/core/__init__.py +12 -12
- udata/core/activity/__init__.py +0 -1
- udata/core/activity/api.py +59 -49
- udata/core/activity/models.py +28 -26
- udata/core/activity/signals.py +1 -1
- udata/core/activity/tasks.py +16 -10
- udata/core/badges/api.py +6 -6
- udata/core/badges/commands.py +14 -13
- udata/core/badges/fields.py +8 -5
- udata/core/badges/forms.py +7 -4
- udata/core/badges/models.py +16 -31
- udata/core/badges/permissions.py +1 -3
- udata/core/badges/signals.py +2 -2
- udata/core/badges/tasks.py +3 -2
- udata/core/badges/tests/test_commands.py +10 -10
- udata/core/badges/tests/test_model.py +24 -31
- udata/core/contact_point/api.py +19 -18
- udata/core/contact_point/api_fields.py +21 -14
- udata/core/contact_point/factories.py +2 -2
- udata/core/contact_point/forms.py +7 -6
- udata/core/contact_point/models.py +3 -5
- udata/core/dataservices/api.py +26 -21
- udata/core/dataservices/factories.py +13 -11
- udata/core/dataservices/models.py +35 -40
- udata/core/dataservices/permissions.py +4 -4
- udata/core/dataservices/rdf.py +40 -17
- udata/core/dataservices/tasks.py +4 -3
- udata/core/dataset/actions.py +10 -10
- udata/core/dataset/activities.py +21 -23
- udata/core/dataset/api.py +321 -298
- udata/core/dataset/api_fields.py +443 -271
- udata/core/dataset/apiv2.py +305 -229
- udata/core/dataset/commands.py +38 -36
- udata/core/dataset/constants.py +61 -54
- udata/core/dataset/csv.py +70 -74
- udata/core/dataset/events.py +39 -32
- udata/core/dataset/exceptions.py +8 -4
- udata/core/dataset/factories.py +57 -65
- udata/core/dataset/forms.py +87 -63
- udata/core/dataset/models.py +336 -280
- udata/core/dataset/permissions.py +9 -6
- udata/core/dataset/preview.py +15 -17
- udata/core/dataset/rdf.py +156 -122
- udata/core/dataset/search.py +92 -77
- udata/core/dataset/signals.py +1 -1
- udata/core/dataset/tasks.py +63 -54
- udata/core/discussions/actions.py +5 -5
- udata/core/discussions/api.py +124 -120
- udata/core/discussions/factories.py +2 -2
- udata/core/discussions/forms.py +9 -7
- udata/core/discussions/metrics.py +1 -3
- udata/core/discussions/models.py +25 -24
- udata/core/discussions/notifications.py +18 -14
- udata/core/discussions/permissions.py +3 -3
- udata/core/discussions/signals.py +4 -4
- udata/core/discussions/tasks.py +24 -28
- udata/core/followers/api.py +32 -33
- udata/core/followers/models.py +9 -9
- udata/core/followers/signals.py +3 -3
- udata/core/jobs/actions.py +7 -7
- udata/core/jobs/api.py +99 -92
- udata/core/jobs/commands.py +48 -49
- udata/core/jobs/forms.py +11 -11
- udata/core/jobs/models.py +6 -6
- udata/core/metrics/__init__.py +2 -2
- udata/core/metrics/commands.py +34 -30
- udata/core/metrics/models.py +2 -4
- udata/core/metrics/signals.py +1 -1
- udata/core/metrics/tasks.py +3 -3
- udata/core/organization/activities.py +12 -15
- udata/core/organization/api.py +167 -174
- udata/core/organization/api_fields.py +183 -124
- udata/core/organization/apiv2.py +32 -32
- udata/core/organization/commands.py +20 -22
- udata/core/organization/constants.py +11 -11
- udata/core/organization/csv.py +17 -15
- udata/core/organization/factories.py +8 -11
- udata/core/organization/forms.py +32 -26
- udata/core/organization/metrics.py +2 -1
- udata/core/organization/models.py +87 -67
- udata/core/organization/notifications.py +18 -14
- udata/core/organization/permissions.py +10 -11
- udata/core/organization/rdf.py +14 -14
- udata/core/organization/search.py +30 -28
- udata/core/organization/signals.py +7 -7
- udata/core/organization/tasks.py +42 -61
- udata/core/owned.py +38 -27
- udata/core/post/api.py +82 -81
- udata/core/post/constants.py +8 -5
- udata/core/post/factories.py +4 -4
- udata/core/post/forms.py +13 -14
- udata/core/post/models.py +20 -22
- udata/core/post/tests/test_api.py +30 -32
- udata/core/reports/api.py +8 -7
- udata/core/reports/constants.py +1 -3
- udata/core/reports/models.py +10 -10
- udata/core/reuse/activities.py +15 -19
- udata/core/reuse/api.py +123 -126
- udata/core/reuse/api_fields.py +120 -85
- udata/core/reuse/apiv2.py +11 -10
- udata/core/reuse/constants.py +23 -23
- udata/core/reuse/csv.py +18 -18
- udata/core/reuse/factories.py +5 -9
- udata/core/reuse/forms.py +24 -21
- udata/core/reuse/models.py +55 -51
- udata/core/reuse/permissions.py +2 -2
- udata/core/reuse/search.py +49 -46
- udata/core/reuse/signals.py +1 -1
- udata/core/reuse/tasks.py +4 -5
- udata/core/site/api.py +47 -50
- udata/core/site/factories.py +2 -2
- udata/core/site/forms.py +4 -5
- udata/core/site/models.py +94 -63
- udata/core/site/rdf.py +14 -14
- udata/core/spam/api.py +16 -9
- udata/core/spam/constants.py +4 -4
- udata/core/spam/fields.py +13 -7
- udata/core/spam/models.py +27 -20
- udata/core/spam/signals.py +1 -1
- udata/core/spam/tests/test_spam.py +6 -5
- udata/core/spatial/api.py +72 -80
- udata/core/spatial/api_fields.py +73 -58
- udata/core/spatial/commands.py +67 -64
- udata/core/spatial/constants.py +3 -3
- udata/core/spatial/factories.py +37 -54
- udata/core/spatial/forms.py +27 -26
- udata/core/spatial/geoids.py +17 -17
- udata/core/spatial/models.py +43 -47
- udata/core/spatial/tasks.py +2 -1
- udata/core/spatial/tests/test_api.py +115 -130
- udata/core/spatial/tests/test_fields.py +74 -77
- udata/core/spatial/tests/test_geoid.py +22 -22
- udata/core/spatial/tests/test_models.py +5 -7
- udata/core/spatial/translations.py +16 -16
- udata/core/storages/__init__.py +16 -18
- udata/core/storages/api.py +66 -64
- udata/core/storages/tasks.py +7 -7
- udata/core/storages/utils.py +15 -15
- udata/core/storages/views.py +5 -6
- udata/core/tags/api.py +17 -14
- udata/core/tags/csv.py +4 -4
- udata/core/tags/models.py +8 -5
- udata/core/tags/tasks.py +11 -13
- udata/core/tags/views.py +4 -4
- udata/core/topic/api.py +84 -73
- udata/core/topic/apiv2.py +157 -127
- udata/core/topic/factories.py +3 -4
- udata/core/topic/forms.py +12 -14
- udata/core/topic/models.py +14 -19
- udata/core/topic/parsers.py +26 -26
- udata/core/user/activities.py +30 -29
- udata/core/user/api.py +151 -152
- udata/core/user/api_fields.py +132 -100
- udata/core/user/apiv2.py +7 -7
- udata/core/user/commands.py +38 -38
- udata/core/user/factories.py +8 -9
- udata/core/user/forms.py +14 -11
- udata/core/user/metrics.py +2 -2
- udata/core/user/models.py +68 -69
- udata/core/user/permissions.py +4 -5
- udata/core/user/rdf.py +7 -8
- udata/core/user/tasks.py +2 -2
- udata/core/user/tests/test_user_model.py +24 -16
- udata/cors.py +99 -0
- udata/db/tasks.py +2 -1
- udata/entrypoints.py +35 -31
- udata/errors.py +2 -1
- udata/event/values.py +6 -6
- udata/factories.py +2 -2
- udata/features/identicon/api.py +5 -6
- udata/features/identicon/backends.py +48 -55
- udata/features/identicon/tests/test_backends.py +4 -5
- udata/features/notifications/__init__.py +0 -1
- udata/features/notifications/actions.py +9 -9
- udata/features/notifications/api.py +17 -13
- udata/features/territories/__init__.py +12 -10
- udata/features/territories/api.py +14 -15
- udata/features/territories/models.py +23 -28
- udata/features/transfer/actions.py +8 -11
- udata/features/transfer/api.py +84 -77
- udata/features/transfer/factories.py +2 -1
- udata/features/transfer/models.py +11 -12
- udata/features/transfer/notifications.py +19 -15
- udata/features/transfer/permissions.py +5 -5
- udata/forms/__init__.py +5 -2
- udata/forms/fields.py +164 -172
- udata/forms/validators.py +19 -22
- udata/forms/widgets.py +9 -13
- udata/frontend/__init__.py +31 -26
- udata/frontend/csv.py +68 -58
- udata/frontend/markdown.py +40 -44
- udata/harvest/actions.py +89 -77
- udata/harvest/api.py +294 -238
- udata/harvest/backends/__init__.py +4 -4
- udata/harvest/backends/base.py +128 -111
- udata/harvest/backends/dcat.py +80 -66
- udata/harvest/commands.py +56 -60
- udata/harvest/csv.py +8 -8
- udata/harvest/exceptions.py +6 -3
- udata/harvest/filters.py +24 -23
- udata/harvest/forms.py +27 -28
- udata/harvest/models.py +88 -80
- udata/harvest/notifications.py +15 -10
- udata/harvest/signals.py +13 -13
- udata/harvest/tasks.py +11 -10
- udata/harvest/tests/factories.py +23 -24
- udata/harvest/tests/test_actions.py +136 -166
- udata/harvest/tests/test_api.py +220 -214
- udata/harvest/tests/test_base_backend.py +117 -112
- udata/harvest/tests/test_dcat_backend.py +380 -308
- udata/harvest/tests/test_filters.py +33 -22
- udata/harvest/tests/test_models.py +11 -14
- udata/harvest/tests/test_notifications.py +6 -7
- udata/harvest/tests/test_tasks.py +7 -6
- udata/i18n.py +237 -78
- udata/linkchecker/backends.py +5 -11
- udata/linkchecker/checker.py +23 -22
- udata/linkchecker/commands.py +4 -6
- udata/linkchecker/models.py +6 -6
- udata/linkchecker/tasks.py +18 -20
- udata/mail.py +21 -21
- udata/migrations/2020-07-24-remove-s-from-scope-oauth.py +9 -8
- udata/migrations/2020-08-24-add-fs-filename.py +9 -8
- udata/migrations/2020-09-28-update-reuses-datasets-metrics.py +5 -4
- udata/migrations/2020-10-16-migrate-ods-resources.py +9 -10
- udata/migrations/2021-04-08-update-schema-with-new-structure.py +8 -7
- udata/migrations/2021-05-27-fix-default-schema-name.py +7 -6
- udata/migrations/2021-07-05-remove-unused-badges.py +17 -15
- udata/migrations/2021-07-07-update-schema-for-community-resources.py +7 -6
- udata/migrations/2021-08-17-follow-integrity.py +5 -4
- udata/migrations/2021-08-17-harvest-integrity.py +13 -12
- udata/migrations/2021-08-17-oauth2client-integrity.py +5 -4
- udata/migrations/2021-08-17-transfer-integrity.py +5 -4
- udata/migrations/2021-08-17-users-integrity.py +9 -8
- udata/migrations/2021-12-14-reuse-topics.py +7 -6
- udata/migrations/2022-04-21-improve-extension-detection.py +8 -7
- udata/migrations/2022-09-22-clean-inactive-harvest-datasets.py +16 -14
- udata/migrations/2022-10-10-add-fs_uniquifier-to-user-model.py +6 -6
- udata/migrations/2022-10-10-migrate-harvest-extras.py +36 -26
- udata/migrations/2023-02-08-rename-internal-dates.py +46 -28
- udata/migrations/2024-01-29-fix-reuse-and-dataset-with-private-None.py +10 -8
- udata/migrations/2024-03-22-migrate-activity-kwargs-to-extras.py +6 -4
- udata/migrations/2024-06-11-fix-reuse-datasets-references.py +7 -6
- udata/migrations/__init__.py +123 -105
- udata/models/__init__.py +4 -4
- udata/mongo/__init__.py +13 -11
- udata/mongo/badges_field.py +3 -2
- udata/mongo/datetime_fields.py +13 -12
- udata/mongo/document.py +17 -16
- udata/mongo/engine.py +15 -16
- udata/mongo/errors.py +2 -1
- udata/mongo/extras_fields.py +30 -20
- udata/mongo/queryset.py +12 -12
- udata/mongo/slug_fields.py +38 -28
- udata/mongo/taglist_field.py +1 -2
- udata/mongo/url_field.py +5 -5
- udata/mongo/uuid_fields.py +4 -3
- udata/notifications/__init__.py +1 -1
- udata/notifications/mattermost.py +10 -9
- udata/rdf.py +167 -188
- udata/routing.py +40 -45
- udata/search/__init__.py +18 -19
- udata/search/adapter.py +17 -16
- udata/search/commands.py +44 -51
- udata/search/fields.py +13 -20
- udata/search/query.py +23 -18
- udata/search/result.py +9 -10
- udata/sentry.py +21 -19
- udata/settings.py +262 -198
- udata/sitemap.py +8 -6
- udata/storage/s3.py +20 -13
- udata/tags.py +4 -5
- udata/tasks.py +43 -42
- udata/tests/__init__.py +9 -6
- udata/tests/api/__init__.py +8 -6
- udata/tests/api/test_auth_api.py +395 -321
- udata/tests/api/test_base_api.py +33 -35
- udata/tests/api/test_contact_points.py +7 -9
- udata/tests/api/test_dataservices_api.py +211 -158
- udata/tests/api/test_datasets_api.py +823 -812
- udata/tests/api/test_follow_api.py +13 -15
- udata/tests/api/test_me_api.py +95 -112
- udata/tests/api/test_organizations_api.py +301 -339
- udata/tests/api/test_reports_api.py +35 -25
- udata/tests/api/test_reuses_api.py +134 -139
- udata/tests/api/test_swagger.py +5 -5
- udata/tests/api/test_tags_api.py +18 -25
- udata/tests/api/test_topics_api.py +94 -94
- udata/tests/api/test_transfer_api.py +53 -48
- udata/tests/api/test_user_api.py +128 -141
- udata/tests/apiv2/test_datasets.py +290 -198
- udata/tests/apiv2/test_me_api.py +10 -11
- udata/tests/apiv2/test_organizations.py +56 -74
- udata/tests/apiv2/test_swagger.py +5 -5
- udata/tests/apiv2/test_topics.py +69 -87
- udata/tests/cli/test_cli_base.py +8 -8
- udata/tests/cli/test_db_cli.py +21 -19
- udata/tests/dataservice/test_dataservice_tasks.py +8 -12
- udata/tests/dataset/test_csv_adapter.py +44 -35
- udata/tests/dataset/test_dataset_actions.py +2 -3
- udata/tests/dataset/test_dataset_commands.py +7 -8
- udata/tests/dataset/test_dataset_events.py +36 -29
- udata/tests/dataset/test_dataset_model.py +224 -217
- udata/tests/dataset/test_dataset_rdf.py +142 -131
- udata/tests/dataset/test_dataset_tasks.py +15 -15
- udata/tests/dataset/test_resource_preview.py +10 -13
- udata/tests/features/territories/__init__.py +9 -13
- udata/tests/features/territories/test_territories_api.py +71 -91
- udata/tests/forms/test_basic_fields.py +7 -7
- udata/tests/forms/test_current_user_field.py +39 -66
- udata/tests/forms/test_daterange_field.py +31 -39
- udata/tests/forms/test_dict_field.py +28 -26
- udata/tests/forms/test_extras_fields.py +102 -76
- udata/tests/forms/test_form_field.py +8 -8
- udata/tests/forms/test_image_field.py +33 -26
- udata/tests/forms/test_model_field.py +134 -123
- udata/tests/forms/test_model_list_field.py +7 -7
- udata/tests/forms/test_nested_model_list_field.py +117 -79
- udata/tests/forms/test_publish_as_field.py +36 -65
- udata/tests/forms/test_reference_field.py +34 -53
- udata/tests/forms/test_user_forms.py +23 -21
- udata/tests/forms/test_uuid_field.py +6 -10
- udata/tests/frontend/__init__.py +9 -6
- udata/tests/frontend/test_auth.py +7 -6
- udata/tests/frontend/test_csv.py +81 -96
- udata/tests/frontend/test_hooks.py +43 -43
- udata/tests/frontend/test_markdown.py +211 -191
- udata/tests/helpers.py +32 -37
- udata/tests/models.py +2 -2
- udata/tests/organization/test_csv_adapter.py +21 -16
- udata/tests/organization/test_notifications.py +11 -18
- udata/tests/organization/test_organization_model.py +13 -13
- udata/tests/organization/test_organization_rdf.py +29 -22
- udata/tests/organization/test_organization_tasks.py +16 -17
- udata/tests/plugin.py +79 -73
- udata/tests/reuse/test_reuse_model.py +21 -21
- udata/tests/reuse/test_reuse_task.py +11 -13
- udata/tests/search/__init__.py +11 -12
- udata/tests/search/test_adapter.py +60 -70
- udata/tests/search/test_query.py +16 -16
- udata/tests/search/test_results.py +10 -7
- udata/tests/site/test_site_api.py +11 -16
- udata/tests/site/test_site_metrics.py +20 -30
- udata/tests/site/test_site_model.py +4 -5
- udata/tests/site/test_site_rdf.py +94 -78
- udata/tests/test_activity.py +17 -17
- udata/tests/test_cors.py +62 -0
- udata/tests/test_discussions.py +292 -299
- udata/tests/test_i18n.py +37 -40
- udata/tests/test_linkchecker.py +91 -85
- udata/tests/test_mail.py +13 -17
- udata/tests/test_migrations.py +219 -180
- udata/tests/test_model.py +164 -157
- udata/tests/test_notifications.py +17 -17
- udata/tests/test_owned.py +14 -14
- udata/tests/test_rdf.py +25 -23
- udata/tests/test_routing.py +89 -93
- udata/tests/test_storages.py +137 -128
- udata/tests/test_tags.py +44 -46
- udata/tests/test_topics.py +7 -7
- udata/tests/test_transfer.py +42 -49
- udata/tests/test_uris.py +160 -161
- udata/tests/test_utils.py +79 -71
- udata/tests/user/test_user_rdf.py +5 -9
- udata/tests/workers/test_jobs_commands.py +57 -58
- udata/tests/workers/test_tasks_routing.py +23 -29
- udata/tests/workers/test_workers_api.py +125 -131
- udata/tests/workers/test_workers_helpers.py +6 -6
- udata/tracking.py +4 -6
- udata/uris.py +45 -46
- udata/utils.py +68 -66
- udata/wsgi.py +1 -1
- {udata-9.1.2.dev30355.dist-info → udata-9.1.2.dev30454.dist-info}/METADATA +7 -3
- udata-9.1.2.dev30454.dist-info/RECORD +706 -0
- udata-9.1.2.dev30355.dist-info/RECORD +0 -704
- {udata-9.1.2.dev30355.dist-info → udata-9.1.2.dev30454.dist-info}/LICENSE +0 -0
- {udata-9.1.2.dev30355.dist-info → udata-9.1.2.dev30454.dist-info}/WHEEL +0 -0
- {udata-9.1.2.dev30355.dist-info → udata-9.1.2.dev30454.dist-info}/entry_points.txt +0 -0
- {udata-9.1.2.dev30355.dist-info → udata-9.1.2.dev30454.dist-info}/top_level.txt +0 -0
|
@@ -1,21 +1,24 @@
|
|
|
1
1
|
import datetime
|
|
2
|
+
from unittest.mock import patch
|
|
2
3
|
|
|
3
4
|
import pytest
|
|
4
|
-
|
|
5
5
|
from flask import current_app
|
|
6
6
|
from flask_restx import inputs
|
|
7
7
|
from flask_restx.reqparse import RequestParser
|
|
8
|
-
from unittest.mock import patch
|
|
9
8
|
|
|
10
9
|
from udata import search
|
|
10
|
+
from udata.core.dataset.factories import (
|
|
11
|
+
DatasetFactory,
|
|
12
|
+
HiddenDatasetFactory,
|
|
13
|
+
ResourceFactory,
|
|
14
|
+
)
|
|
11
15
|
from udata.core.dataset.models import Schema
|
|
16
|
+
from udata.core.dataset.search import DatasetSearch
|
|
12
17
|
from udata.i18n import gettext as _
|
|
13
|
-
from udata.
|
|
14
|
-
from udata.search import reindex, as_task_param
|
|
18
|
+
from udata.search import as_task_param, reindex
|
|
15
19
|
from udata.search.commands import index_model
|
|
16
|
-
from udata.core.dataset.search import DatasetSearch
|
|
17
|
-
from udata.core.dataset.factories import DatasetFactory, ResourceFactory, HiddenDatasetFactory
|
|
18
20
|
from udata.tests.api import APITestCase
|
|
21
|
+
from udata.utils import clean_string
|
|
19
22
|
|
|
20
23
|
from . import FakeSearch
|
|
21
24
|
|
|
@@ -24,35 +27,30 @@ from . import FakeSearch
|
|
|
24
27
|
#############################################################################
|
|
25
28
|
|
|
26
29
|
RANGE_LABELS = {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
30
|
+
"none": _("Never reused"),
|
|
31
|
+
"little": _("Little reused"),
|
|
32
|
+
"quite": _("Quite reused"),
|
|
33
|
+
"heavy": _("Heavily reused"),
|
|
31
34
|
}
|
|
32
35
|
|
|
33
36
|
|
|
34
37
|
class FakeSearchWithBool(FakeSearch):
|
|
35
|
-
filters = {
|
|
36
|
-
'boolean': search.BoolFilter()
|
|
37
|
-
}
|
|
38
|
+
filters = {"boolean": search.BoolFilter()}
|
|
38
39
|
|
|
39
40
|
|
|
40
41
|
class FakeSearchWithCoverage(FakeSearch):
|
|
41
|
-
filters = {
|
|
42
|
-
'coverage': search.TemporalCoverageFilter()
|
|
43
|
-
}
|
|
42
|
+
filters = {"coverage": search.TemporalCoverageFilter()}
|
|
44
43
|
|
|
45
44
|
|
|
46
45
|
#############################################################################
|
|
47
46
|
# Helpers #
|
|
48
47
|
#############################################################################
|
|
49
48
|
|
|
49
|
+
|
|
50
50
|
def assertHasArgument(parser, name, _type, choices=None):
|
|
51
51
|
__tracebackhide__ = True
|
|
52
|
-
candidates = [
|
|
53
|
-
|
|
54
|
-
]
|
|
55
|
-
assert len(candidates) == 1, 'Should have strictly one argument'
|
|
52
|
+
candidates = [arg for arg in parser.args if arg.name == name]
|
|
53
|
+
assert len(candidates) == 1, "Should have strictly one argument"
|
|
56
54
|
arg = candidates[0]
|
|
57
55
|
assert arg.type == _type
|
|
58
56
|
assert not arg.required
|
|
@@ -64,6 +62,7 @@ def assertHasArgument(parser, name, _type, choices=None):
|
|
|
64
62
|
# Tests #
|
|
65
63
|
#############################################################################
|
|
66
64
|
|
|
65
|
+
|
|
67
66
|
class SearchAdaptorTest:
|
|
68
67
|
def test_as_request_parser_filter(self):
|
|
69
68
|
parser = FakeSearch.as_request_parser()
|
|
@@ -71,12 +70,12 @@ class SearchAdaptorTest:
|
|
|
71
70
|
|
|
72
71
|
# query + tag and other filters + sorts + pagination
|
|
73
72
|
assert len(parser.args) == 6
|
|
74
|
-
assertHasArgument(parser,
|
|
75
|
-
assertHasArgument(parser,
|
|
76
|
-
assertHasArgument(parser,
|
|
77
|
-
assertHasArgument(parser,
|
|
78
|
-
assertHasArgument(parser,
|
|
79
|
-
assertHasArgument(parser,
|
|
73
|
+
assertHasArgument(parser, "q", str)
|
|
74
|
+
assertHasArgument(parser, "sort", str)
|
|
75
|
+
assertHasArgument(parser, "tag", clean_string)
|
|
76
|
+
assertHasArgument(parser, "other", clean_string)
|
|
77
|
+
assertHasArgument(parser, "page", int)
|
|
78
|
+
assertHasArgument(parser, "page_size", int)
|
|
80
79
|
|
|
81
80
|
def test_as_request_parser_bool_filter(self):
|
|
82
81
|
parser = FakeSearchWithBool.as_request_parser()
|
|
@@ -84,102 +83,93 @@ class SearchAdaptorTest:
|
|
|
84
83
|
|
|
85
84
|
# query + boolean filter + sorts + pagination
|
|
86
85
|
assert len(parser.args) == 5
|
|
87
|
-
assertHasArgument(parser,
|
|
88
|
-
assertHasArgument(parser,
|
|
89
|
-
assertHasArgument(parser,
|
|
90
|
-
assertHasArgument(parser,
|
|
91
|
-
assertHasArgument(parser,
|
|
86
|
+
assertHasArgument(parser, "q", str)
|
|
87
|
+
assertHasArgument(parser, "sort", str)
|
|
88
|
+
assertHasArgument(parser, "boolean", inputs.boolean)
|
|
89
|
+
assertHasArgument(parser, "page", int)
|
|
90
|
+
assertHasArgument(parser, "page_size", int)
|
|
92
91
|
|
|
93
92
|
def test_as_request_parser_temporal_coverage_facet(self):
|
|
94
93
|
parser = FakeSearchWithCoverage.as_request_parser()
|
|
95
|
-
filter = FakeSearchWithCoverage.filters[
|
|
94
|
+
filter = FakeSearchWithCoverage.filters["coverage"]
|
|
96
95
|
assert isinstance(parser, RequestParser)
|
|
97
96
|
|
|
98
97
|
# query + range facet + sorts + pagination
|
|
99
98
|
assert len(parser.args) == 5
|
|
100
|
-
assertHasArgument(parser,
|
|
101
|
-
assertHasArgument(parser,
|
|
102
|
-
assertHasArgument(parser,
|
|
103
|
-
assertHasArgument(parser,
|
|
104
|
-
assertHasArgument(parser,
|
|
99
|
+
assertHasArgument(parser, "q", str)
|
|
100
|
+
assertHasArgument(parser, "sort", str)
|
|
101
|
+
assertHasArgument(parser, "coverage", filter.validate_parameter)
|
|
102
|
+
assertHasArgument(parser, "page", int)
|
|
103
|
+
assertHasArgument(parser, "page_size", int)
|
|
105
104
|
|
|
106
105
|
|
|
107
106
|
@pytest.mark.options(SEARCH_SERVICE_API_URL="smtg/")
|
|
108
107
|
class IndexingLifecycleTest(APITestCase):
|
|
109
|
-
|
|
110
|
-
@patch('requests.delete')
|
|
108
|
+
@patch("requests.delete")
|
|
111
109
|
def test_producer_should_send_a_message_without_payload_if_not_indexable(self, mock_req):
|
|
112
|
-
fake_data = HiddenDatasetFactory(id=
|
|
110
|
+
fake_data = HiddenDatasetFactory(id="61fd30cb29ea95c7bc0e1211")
|
|
113
111
|
|
|
114
112
|
reindex.run(*as_task_param(fake_data))
|
|
115
113
|
|
|
116
|
-
search_service_url = current_app.config[
|
|
117
|
-
url = f
|
|
114
|
+
search_service_url = current_app.config["SEARCH_SERVICE_API_URL"]
|
|
115
|
+
url = f"{search_service_url}{DatasetSearch.search_url}{str(fake_data.id)}/unindex"
|
|
118
116
|
mock_req.assert_called_with(url)
|
|
119
117
|
|
|
120
|
-
@patch(
|
|
118
|
+
@patch("requests.post")
|
|
121
119
|
def test_producer_should_send_a_message_with_payload_if_indexable(self, mock_req):
|
|
122
120
|
resource = ResourceFactory(schema=Schema(url="http://localhost/my-schema"))
|
|
123
|
-
fake_data = DatasetFactory(id=
|
|
121
|
+
fake_data = DatasetFactory(id="61fd30cb29ea95c7bc0e1211", resources=[resource])
|
|
124
122
|
|
|
125
123
|
reindex.run(*as_task_param(fake_data))
|
|
126
124
|
|
|
127
|
-
expected_value = {
|
|
128
|
-
'document': DatasetSearch.serialize(fake_data)
|
|
129
|
-
}
|
|
125
|
+
expected_value = {"document": DatasetSearch.serialize(fake_data)}
|
|
130
126
|
url = f"{current_app.config['SEARCH_SERVICE_API_URL']}{DatasetSearch.search_url}index"
|
|
131
127
|
mock_req.assert_called_with(url, json=expected_value)
|
|
132
128
|
|
|
133
|
-
@patch(
|
|
129
|
+
@patch("requests.Session.post")
|
|
134
130
|
def test_index_model(self, mock_req):
|
|
135
|
-
fake_data = DatasetFactory(id=
|
|
131
|
+
fake_data = DatasetFactory(id="61fd30cb29ea95c7bc0e1211")
|
|
136
132
|
|
|
137
133
|
index_model(DatasetSearch, start=None, reindex=False, from_datetime=None)
|
|
138
134
|
|
|
139
|
-
expected_value = {
|
|
140
|
-
'document': DatasetSearch.serialize(fake_data),
|
|
141
|
-
'index': 'dataset'
|
|
142
|
-
}
|
|
135
|
+
expected_value = {"document": DatasetSearch.serialize(fake_data), "index": "dataset"}
|
|
143
136
|
url = f"{current_app.config['SEARCH_SERVICE_API_URL']}/datasets/index"
|
|
144
137
|
mock_req.assert_called_with(url, json=expected_value)
|
|
145
138
|
|
|
146
|
-
@patch(
|
|
147
|
-
@patch(
|
|
139
|
+
@patch("requests.post")
|
|
140
|
+
@patch("requests.Session.post")
|
|
148
141
|
def test_reindex_model(self, mock_session, mock_req):
|
|
149
|
-
fake_data = DatasetFactory(id=
|
|
142
|
+
fake_data = DatasetFactory(id="61fd30cb29ea95c7bc0e1211")
|
|
150
143
|
|
|
151
144
|
index_model(DatasetSearch, start=datetime.datetime(2022, 2, 20, 20, 2), reindex=True)
|
|
152
145
|
|
|
153
146
|
# Create index
|
|
154
|
-
expected_value = {
|
|
155
|
-
'index': 'dataset-2022-02-20-20-02'
|
|
156
|
-
}
|
|
147
|
+
expected_value = {"index": "dataset-2022-02-20-20-02"}
|
|
157
148
|
url = f"{current_app.config['SEARCH_SERVICE_API_URL']}/create-index"
|
|
158
149
|
mock_req.assert_called_with(url, json=expected_value)
|
|
159
150
|
|
|
160
151
|
# Index document
|
|
161
152
|
expected_value = {
|
|
162
|
-
|
|
163
|
-
|
|
153
|
+
"document": DatasetSearch.serialize(fake_data),
|
|
154
|
+
"index": "dataset-2022-02-20-20-02",
|
|
164
155
|
}
|
|
165
156
|
url = f"{current_app.config['SEARCH_SERVICE_API_URL']}/datasets/index"
|
|
166
157
|
mock_session.assert_called_with(url, json=expected_value)
|
|
167
158
|
|
|
168
|
-
@patch(
|
|
159
|
+
@patch("requests.Session.post")
|
|
169
160
|
def test_index_model_from_datetime(self, mock_req):
|
|
170
|
-
DatasetFactory(
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
161
|
+
DatasetFactory(
|
|
162
|
+
id="61fd30cb29ea95c7bc0e1211", last_modified_internal=datetime.datetime(2020, 1, 1)
|
|
163
|
+
)
|
|
164
|
+
fake_data = DatasetFactory(
|
|
165
|
+
id="61fd30cb29ea95c7bc0e1212", last_modified_internal=datetime.datetime(2022, 1, 1)
|
|
166
|
+
)
|
|
174
167
|
|
|
175
168
|
index_model(DatasetSearch, start=None, from_datetime=datetime.datetime(2023, 1, 1))
|
|
176
169
|
mock_req.assert_not_called()
|
|
177
170
|
|
|
178
171
|
index_model(DatasetSearch, start=None, from_datetime=datetime.datetime(2021, 1, 1))
|
|
179
172
|
|
|
180
|
-
expected_value = {
|
|
181
|
-
'document': DatasetSearch.serialize(fake_data),
|
|
182
|
-
'index': 'dataset'
|
|
183
|
-
}
|
|
173
|
+
expected_value = {"document": DatasetSearch.serialize(fake_data), "index": "dataset"}
|
|
184
174
|
url = f"{current_app.config['SEARCH_SERVICE_API_URL']}/datasets/index"
|
|
185
175
|
mock_req.assert_called_with(url, json=expected_value)
|
udata/tests/search/test_query.py
CHANGED
|
@@ -1,39 +1,39 @@
|
|
|
1
|
+
from udata.search.query import DEFAULT_PAGE_SIZE, SearchQuery
|
|
1
2
|
from udata.tests.api import APITestCase
|
|
2
|
-
from udata.search.query import SearchQuery, DEFAULT_PAGE_SIZE
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
class QueryTest(APITestCase):
|
|
6
6
|
def test_search_query_with_params(self):
|
|
7
7
|
query = {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
"organization": "534fff81a3a7292c64a77e5c",
|
|
9
|
+
"q": "insee",
|
|
10
|
+
"sort": "-created",
|
|
11
|
+
"page": 1,
|
|
12
|
+
"page_size": 20,
|
|
13
13
|
}
|
|
14
14
|
search_query = SearchQuery(params=query)
|
|
15
15
|
assert search_query.page == 1
|
|
16
16
|
assert search_query.page_size == 20
|
|
17
|
-
assert search_query._query ==
|
|
18
|
-
assert search_query.sort ==
|
|
19
|
-
assert search_query._filters[
|
|
17
|
+
assert search_query._query == "insee"
|
|
18
|
+
assert search_query.sort == "-created"
|
|
19
|
+
assert search_query._filters["organization"] == "534fff81a3a7292c64a77e5c"
|
|
20
20
|
|
|
21
21
|
def test_search_query_without_params(self):
|
|
22
22
|
search_query = SearchQuery(params={})
|
|
23
23
|
assert search_query.page == 1
|
|
24
24
|
assert search_query.page_size == DEFAULT_PAGE_SIZE
|
|
25
|
-
assert search_query._query ==
|
|
25
|
+
assert search_query._query == ""
|
|
26
26
|
assert search_query.sort is None
|
|
27
27
|
assert search_query._filters == {}
|
|
28
28
|
|
|
29
29
|
def test_search_query_to_url(self):
|
|
30
30
|
query = {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
"organization": "534fff81a3a7292c64a77e5c",
|
|
32
|
+
"q": "insee",
|
|
33
|
+
"sort": "-created",
|
|
34
|
+
"page": 1,
|
|
35
|
+
"page_size": 20,
|
|
36
36
|
}
|
|
37
37
|
search_query = SearchQuery(params=query)
|
|
38
38
|
url = search_query.to_url()
|
|
39
|
-
assert
|
|
39
|
+
assert "organization=534fff81a3a7292c64a77e5c&q=insee&sort=-created&page=1" in url
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
from udata.tests.api import APITestCase
|
|
2
|
-
from udata.search.result import SearchResult
|
|
3
1
|
from udata.core.dataset.factories import DatasetFactory
|
|
4
2
|
from udata.core.dataset.search import DatasetSearch
|
|
5
3
|
from udata.models import Dataset
|
|
4
|
+
from udata.search.result import SearchResult
|
|
5
|
+
from udata.tests.api import APITestCase
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
class ResultTest(APITestCase):
|
|
@@ -21,9 +21,11 @@ class ResultTest(APITestCase):
|
|
|
21
21
|
"previous_page": None,
|
|
22
22
|
"page_size": 20,
|
|
23
23
|
"total_pages": 1,
|
|
24
|
-
"total": 3
|
|
24
|
+
"total": 3,
|
|
25
25
|
}
|
|
26
|
-
search_results = SearchResult(
|
|
26
|
+
search_results = SearchResult(
|
|
27
|
+
query=search_query, result=service_result.pop("data"), **service_result
|
|
28
|
+
)
|
|
27
29
|
|
|
28
30
|
assert len(search_results.get_objects()) == 3
|
|
29
31
|
|
|
@@ -45,9 +47,11 @@ class ResultTest(APITestCase):
|
|
|
45
47
|
"previous_page": None,
|
|
46
48
|
"page_size": 20,
|
|
47
49
|
"total_pages": 1,
|
|
48
|
-
"total": 3
|
|
50
|
+
"total": 3,
|
|
49
51
|
}
|
|
50
|
-
search_results = SearchResult(
|
|
52
|
+
search_results = SearchResult(
|
|
53
|
+
query=search_query, result=service_result.pop("data"), **service_result
|
|
54
|
+
)
|
|
51
55
|
|
|
52
56
|
to_delete_random_dataset.delete()
|
|
53
57
|
assert len(search_results.get_objects()) == 3
|
|
@@ -56,4 +60,3 @@ class ResultTest(APITestCase):
|
|
|
56
60
|
objects = search_results.objects
|
|
57
61
|
for o in objects:
|
|
58
62
|
assert isinstance(o, Dataset)
|
|
59
|
-
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
|
|
2
1
|
from flask import url_for
|
|
3
2
|
|
|
4
|
-
from udata.core.site.models import Site
|
|
5
|
-
from udata.core.site.models import current_site
|
|
6
|
-
from udata.core.site.factories import SiteFactory
|
|
7
3
|
from udata.core.dataset.factories import DatasetFactory
|
|
8
4
|
from udata.core.reuse.factories import VisibleReuseFactory
|
|
5
|
+
from udata.core.site.factories import SiteFactory
|
|
6
|
+
from udata.core.site.models import Site, current_site
|
|
9
7
|
from udata.core.user.factories import AdminFactory
|
|
10
|
-
|
|
11
8
|
from udata.tests.api import APITestCase
|
|
12
9
|
|
|
13
10
|
|
|
@@ -15,31 +12,29 @@ class SiteAPITest(APITestCase):
|
|
|
15
12
|
modules = []
|
|
16
13
|
|
|
17
14
|
def test_get_site(self):
|
|
18
|
-
response = self.get(url_for(
|
|
15
|
+
response = self.get(url_for("api.site"))
|
|
19
16
|
self.assert200(response)
|
|
20
17
|
|
|
21
18
|
def test_get_home_datasets(self):
|
|
22
19
|
site = SiteFactory.create(
|
|
23
|
-
id=self.app.config[
|
|
24
|
-
settings__home_datasets=DatasetFactory.create_batch(3)
|
|
20
|
+
id=self.app.config["SITE_ID"], settings__home_datasets=DatasetFactory.create_batch(3)
|
|
25
21
|
)
|
|
26
22
|
current_site.reload()
|
|
27
23
|
|
|
28
24
|
self.login(AdminFactory())
|
|
29
|
-
response = self.get(url_for(
|
|
25
|
+
response = self.get(url_for("api.home_datasets"))
|
|
30
26
|
self.assert200(response)
|
|
31
27
|
|
|
32
28
|
self.assertEqual(len(response.json), len(site.settings.home_datasets))
|
|
33
29
|
|
|
34
30
|
def test_get_home_reuses(self):
|
|
35
31
|
site = SiteFactory.create(
|
|
36
|
-
id=self.app.config[
|
|
37
|
-
settings__home_reuses=VisibleReuseFactory.create_batch(3)
|
|
32
|
+
id=self.app.config["SITE_ID"], settings__home_reuses=VisibleReuseFactory.create_batch(3)
|
|
38
33
|
)
|
|
39
34
|
current_site.reload()
|
|
40
35
|
|
|
41
36
|
self.login(AdminFactory())
|
|
42
|
-
response = self.get(url_for(
|
|
37
|
+
response = self.get(url_for("api.home_reuses"))
|
|
43
38
|
self.assert200(response)
|
|
44
39
|
|
|
45
40
|
self.assertEqual(len(response.json), len(site.settings.home_reuses))
|
|
@@ -48,12 +43,12 @@ class SiteAPITest(APITestCase):
|
|
|
48
43
|
ids = [d.id for d in DatasetFactory.create_batch(3)]
|
|
49
44
|
|
|
50
45
|
self.login(AdminFactory())
|
|
51
|
-
response = self.put(url_for(
|
|
46
|
+
response = self.put(url_for("api.home_datasets"), ids)
|
|
52
47
|
|
|
53
48
|
self.assert200(response)
|
|
54
49
|
self.assertEqual(len(response.json), len(ids))
|
|
55
50
|
|
|
56
|
-
site = Site.objects.get(id=self.app.config[
|
|
51
|
+
site = Site.objects.get(id=self.app.config["SITE_ID"])
|
|
57
52
|
|
|
58
53
|
self.assertEqual([d.id for d in site.settings.home_datasets], ids)
|
|
59
54
|
|
|
@@ -61,11 +56,11 @@ class SiteAPITest(APITestCase):
|
|
|
61
56
|
ids = [r.id for r in VisibleReuseFactory.create_batch(3)]
|
|
62
57
|
|
|
63
58
|
self.login(AdminFactory())
|
|
64
|
-
response = self.put(url_for(
|
|
59
|
+
response = self.put(url_for("api.home_reuses"), ids)
|
|
65
60
|
|
|
66
61
|
self.assert200(response)
|
|
67
62
|
self.assertEqual(len(response.json), len(ids))
|
|
68
63
|
|
|
69
|
-
site = Site.objects.get(id=self.app.config[
|
|
64
|
+
site = Site.objects.get(id=self.app.config["SITE_ID"])
|
|
70
65
|
|
|
71
66
|
self.assertEqual([r.id for r in site.settings.home_reuses], ids)
|
|
@@ -1,67 +1,59 @@
|
|
|
1
1
|
import pytest
|
|
2
2
|
|
|
3
|
-
from udata.core.dataset.factories import
|
|
3
|
+
from udata.core.dataset.factories import (
|
|
4
|
+
DatasetFactory,
|
|
5
|
+
HiddenDatasetFactory,
|
|
6
|
+
OrganizationFactory,
|
|
7
|
+
)
|
|
8
|
+
from udata.core.organization.constants import PUBLIC_SERVICE
|
|
4
9
|
from udata.core.reuse.factories import VisibleReuseFactory
|
|
5
|
-
from udata.harvest.tests.factories import HarvestSourceFactory
|
|
6
10
|
from udata.core.site.factories import SiteFactory
|
|
11
|
+
from udata.harvest.tests.factories import HarvestSourceFactory
|
|
7
12
|
from udata.models import Badge
|
|
8
|
-
from udata.core.organization.constants import PUBLIC_SERVICE
|
|
9
13
|
|
|
10
14
|
|
|
11
|
-
@pytest.mark.usefixtures(
|
|
15
|
+
@pytest.mark.usefixtures("clean_db")
|
|
12
16
|
class SiteMetricTest:
|
|
13
17
|
def test_orga_metric(self, app):
|
|
14
|
-
site = SiteFactory.create(
|
|
15
|
-
id=app.config['SITE_ID']
|
|
16
|
-
)
|
|
18
|
+
site = SiteFactory.create(id=app.config["SITE_ID"])
|
|
17
19
|
OrganizationFactory.create_batch(3)
|
|
18
20
|
|
|
19
21
|
site.count_org()
|
|
20
22
|
|
|
21
|
-
assert site.get_metrics()[
|
|
23
|
+
assert site.get_metrics()["organizations"] == 3
|
|
22
24
|
|
|
23
25
|
def test_reuse_metric(self, app):
|
|
24
|
-
site = SiteFactory.create(
|
|
25
|
-
id=app.config['SITE_ID']
|
|
26
|
-
)
|
|
26
|
+
site = SiteFactory.create(id=app.config["SITE_ID"])
|
|
27
27
|
VisibleReuseFactory.create_batch(4)
|
|
28
28
|
|
|
29
29
|
site.count_reuses()
|
|
30
30
|
|
|
31
|
-
assert site.get_metrics()[
|
|
31
|
+
assert site.get_metrics()["reuses"] == 4
|
|
32
32
|
|
|
33
33
|
def test_dataset_metric(self, app):
|
|
34
|
-
site = SiteFactory.create(
|
|
35
|
-
id=app.config['SITE_ID']
|
|
36
|
-
)
|
|
34
|
+
site = SiteFactory.create(id=app.config["SITE_ID"])
|
|
37
35
|
DatasetFactory.create_batch(2)
|
|
38
36
|
HiddenDatasetFactory.create_batch(3)
|
|
39
37
|
|
|
40
38
|
site.count_datasets()
|
|
41
39
|
|
|
42
|
-
assert site.get_metrics()[
|
|
40
|
+
assert site.get_metrics()["datasets"] == 2
|
|
43
41
|
|
|
44
42
|
def test_resources_metric(self, app):
|
|
45
|
-
site = SiteFactory.create(
|
|
46
|
-
id=app.config['SITE_ID']
|
|
47
|
-
)
|
|
43
|
+
site = SiteFactory.create(id=app.config["SITE_ID"])
|
|
48
44
|
|
|
49
45
|
DatasetFactory.create_batch(3, nb_resources=3)
|
|
50
46
|
|
|
51
47
|
site.count_datasets()
|
|
52
48
|
site.count_resources()
|
|
53
49
|
|
|
54
|
-
assert site.get_metrics()[
|
|
50
|
+
assert site.get_metrics()["resources"] == 9
|
|
55
51
|
|
|
56
52
|
def test_badges_metric(self, app):
|
|
57
|
-
site = SiteFactory.create(
|
|
58
|
-
id=app.config['SITE_ID']
|
|
59
|
-
)
|
|
53
|
+
site = SiteFactory.create(id=app.config["SITE_ID"])
|
|
60
54
|
|
|
61
55
|
ps_badge = Badge(kind=PUBLIC_SERVICE)
|
|
62
|
-
public_services = [
|
|
63
|
-
OrganizationFactory(badges=[ps_badge]) for _ in range(2)
|
|
64
|
-
]
|
|
56
|
+
public_services = [OrganizationFactory(badges=[ps_badge]) for _ in range(2)]
|
|
65
57
|
for _ in range(3):
|
|
66
58
|
OrganizationFactory()
|
|
67
59
|
|
|
@@ -70,11 +62,9 @@ class SiteMetricTest:
|
|
|
70
62
|
assert site.get_metrics()[PUBLIC_SERVICE] == len(public_services)
|
|
71
63
|
|
|
72
64
|
def test_harvesters_metric(self, app):
|
|
73
|
-
site = SiteFactory.create(
|
|
74
|
-
id=app.config['SITE_ID']
|
|
75
|
-
)
|
|
65
|
+
site = SiteFactory.create(id=app.config["SITE_ID"])
|
|
76
66
|
sources = [HarvestSourceFactory() for i in range(10)]
|
|
77
67
|
|
|
78
68
|
site.count_harvesters()
|
|
79
69
|
|
|
80
|
-
assert site.get_metrics()[
|
|
70
|
+
assert site.get_metrics()["harvesters"] == len(sources)
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
from datetime import datetime
|
|
2
2
|
|
|
3
3
|
from udata.core.dataset.factories import DatasetFactory
|
|
4
|
-
from udata.core.site.models import current_site
|
|
5
4
|
from udata.core.reuse.factories import ReuseFactory
|
|
6
|
-
|
|
7
|
-
from udata.tests import
|
|
5
|
+
from udata.core.site.models import current_site
|
|
6
|
+
from udata.tests import DBTestMixin, TestCase
|
|
8
7
|
|
|
9
8
|
|
|
10
9
|
class SiteModelTest(DBTestMixin, TestCase):
|
|
11
10
|
def test_delete_home_dataset(self):
|
|
12
|
-
|
|
11
|
+
"""Should pull home datasets on deletion"""
|
|
13
12
|
current_site.settings.home_datasets = DatasetFactory.create_batch(3)
|
|
14
13
|
current_site.save()
|
|
15
14
|
|
|
@@ -23,7 +22,7 @@ class SiteModelTest(DBTestMixin, TestCase):
|
|
|
23
22
|
self.assertNotIn(dataset.id, home_datasets)
|
|
24
23
|
|
|
25
24
|
def test_delete_home_reuse(self):
|
|
26
|
-
|
|
25
|
+
"""Should pull home reuses on deletion"""
|
|
27
26
|
current_site.settings.home_reuses = ReuseFactory.create_batch(3)
|
|
28
27
|
current_site.save()
|
|
29
28
|
|