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,26 +1,27 @@
|
|
|
1
|
-
import pytest
|
|
2
|
-
|
|
3
1
|
from datetime import datetime
|
|
4
2
|
|
|
3
|
+
import pytest
|
|
5
4
|
from flask import url_for
|
|
6
5
|
|
|
7
6
|
from udata.core.badges.factories import badge_factory
|
|
8
7
|
from udata.core.dataset.factories import DatasetFactory
|
|
9
|
-
from udata.core.user.factories import AdminFactory
|
|
10
|
-
from udata.core.reuse.factories import ReuseFactory
|
|
11
8
|
from udata.core.organization.factories import OrganizationFactory
|
|
12
|
-
from udata.core.user.factories import UserFactory
|
|
13
|
-
from udata.models import Reuse, Follow, Member
|
|
14
9
|
from udata.core.reuse.constants import REUSE_TOPICS, REUSE_TYPES
|
|
15
|
-
from udata.
|
|
16
|
-
|
|
10
|
+
from udata.core.reuse.factories import ReuseFactory
|
|
11
|
+
from udata.core.user.factories import AdminFactory, UserFactory
|
|
12
|
+
from udata.models import Follow, Member, Reuse
|
|
17
13
|
from udata.tests.helpers import (
|
|
18
|
-
assert200,
|
|
14
|
+
assert200,
|
|
15
|
+
assert201,
|
|
16
|
+
assert204,
|
|
17
|
+
assert400,
|
|
18
|
+
assert404,
|
|
19
|
+
assert410,
|
|
19
20
|
)
|
|
20
|
-
|
|
21
|
+
from udata.utils import faker
|
|
21
22
|
|
|
22
23
|
pytestmark = [
|
|
23
|
-
pytest.mark.usefixtures(
|
|
24
|
+
pytest.mark.usefixtures("clean_db"),
|
|
24
25
|
]
|
|
25
26
|
|
|
26
27
|
|
|
@@ -28,93 +29,93 @@ class ReuseAPITest:
|
|
|
28
29
|
modules = []
|
|
29
30
|
|
|
30
31
|
def test_reuse_api_list(self, api):
|
|
31
|
-
|
|
32
|
+
"""It should fetch a reuse list from the API"""
|
|
32
33
|
reuses = ReuseFactory.create_batch(3, visible=True)
|
|
33
34
|
|
|
34
|
-
response = api.get(url_for(
|
|
35
|
+
response = api.get(url_for("api.reuses"))
|
|
35
36
|
assert200(response)
|
|
36
|
-
assert len(response.json[
|
|
37
|
+
assert len(response.json["data"]) == len(reuses)
|
|
37
38
|
|
|
38
39
|
def test_reuse_api_list_with_filters(self, api):
|
|
39
|
-
|
|
40
|
+
"""Should filters reuses results based on query filters"""
|
|
40
41
|
owner = UserFactory()
|
|
41
42
|
org = OrganizationFactory()
|
|
42
43
|
|
|
43
|
-
[ReuseFactory(topic=
|
|
44
|
+
[ReuseFactory(topic="health", type="api") for i in range(2)]
|
|
44
45
|
|
|
45
|
-
tag_reuse = ReuseFactory(tags=[
|
|
46
|
-
owner_reuse = ReuseFactory(owner=owner, topic=
|
|
47
|
-
org_reuse = ReuseFactory(organization=org, topic=
|
|
48
|
-
featured_reuse = ReuseFactory(featured=True, topic=
|
|
49
|
-
topic_reuse = ReuseFactory(topic=
|
|
50
|
-
type_reuse = ReuseFactory(topic=
|
|
46
|
+
tag_reuse = ReuseFactory(tags=["my-tag", "other"], topic="health", type="api")
|
|
47
|
+
owner_reuse = ReuseFactory(owner=owner, topic="health", type="api")
|
|
48
|
+
org_reuse = ReuseFactory(organization=org, topic="health", type="api")
|
|
49
|
+
featured_reuse = ReuseFactory(featured=True, topic="health", type="api")
|
|
50
|
+
topic_reuse = ReuseFactory(topic="transport_and_mobility", type="api")
|
|
51
|
+
type_reuse = ReuseFactory(topic="health", type="application")
|
|
51
52
|
|
|
52
53
|
# filter on tag
|
|
53
|
-
response = api.get(url_for(
|
|
54
|
+
response = api.get(url_for("api.reuses", tag="my-tag"))
|
|
54
55
|
assert200(response)
|
|
55
|
-
assert len(response.json[
|
|
56
|
-
assert response.json[
|
|
56
|
+
assert len(response.json["data"]) == 1
|
|
57
|
+
assert response.json["data"][0]["id"] == str(tag_reuse.id)
|
|
57
58
|
|
|
58
59
|
# filter on featured
|
|
59
|
-
response = api.get(url_for(
|
|
60
|
+
response = api.get(url_for("api.reuses", featured="true"))
|
|
60
61
|
assert200(response)
|
|
61
|
-
assert len(response.json[
|
|
62
|
-
assert response.json[
|
|
62
|
+
assert len(response.json["data"]) == 1
|
|
63
|
+
assert response.json["data"][0]["id"] == str(featured_reuse.id)
|
|
63
64
|
|
|
64
65
|
# filter on topic
|
|
65
|
-
response = api.get(url_for(
|
|
66
|
+
response = api.get(url_for("api.reuses", topic=topic_reuse.topic))
|
|
66
67
|
assert200(response)
|
|
67
|
-
assert len(response.json[
|
|
68
|
-
assert response.json[
|
|
68
|
+
assert len(response.json["data"]) == 1
|
|
69
|
+
assert response.json["data"][0]["id"] == str(topic_reuse.id)
|
|
69
70
|
|
|
70
71
|
# filter on type
|
|
71
|
-
response = api.get(url_for(
|
|
72
|
+
response = api.get(url_for("api.reuses", type=type_reuse.type))
|
|
72
73
|
assert200(response)
|
|
73
|
-
assert len(response.json[
|
|
74
|
-
assert response.json[
|
|
74
|
+
assert len(response.json["data"]) == 1
|
|
75
|
+
assert response.json["data"][0]["id"] == str(type_reuse.id)
|
|
75
76
|
|
|
76
77
|
# filter on owner
|
|
77
|
-
response = api.get(url_for(
|
|
78
|
+
response = api.get(url_for("api.reuses", owner=owner.id))
|
|
78
79
|
assert200(response)
|
|
79
|
-
assert len(response.json[
|
|
80
|
-
assert response.json[
|
|
80
|
+
assert len(response.json["data"]) == 1
|
|
81
|
+
assert response.json["data"][0]["id"] == str(owner_reuse.id)
|
|
81
82
|
|
|
82
83
|
# filter on organization
|
|
83
|
-
response = api.get(url_for(
|
|
84
|
+
response = api.get(url_for("api.reuses", organization=org.id))
|
|
84
85
|
assert200(response)
|
|
85
|
-
assert len(response.json[
|
|
86
|
-
assert response.json[
|
|
86
|
+
assert len(response.json["data"]) == 1
|
|
87
|
+
assert response.json["data"][0]["id"] == str(org_reuse.id)
|
|
87
88
|
|
|
88
|
-
response = api.get(url_for(
|
|
89
|
+
response = api.get(url_for("api.reuses", owner="owner-id"))
|
|
89
90
|
assert400(response)
|
|
90
91
|
|
|
91
|
-
response = api.get(url_for(
|
|
92
|
+
response = api.get(url_for("api.reuses", organization="org-id"))
|
|
92
93
|
assert400(response)
|
|
93
94
|
|
|
94
95
|
def test_reuse_api_get(self, api):
|
|
95
|
-
|
|
96
|
+
"""It should fetch a reuse from the API"""
|
|
96
97
|
reuse = ReuseFactory()
|
|
97
|
-
response = api.get(url_for(
|
|
98
|
+
response = api.get(url_for("api.reuse", reuse=reuse))
|
|
98
99
|
assert200(response)
|
|
99
100
|
|
|
100
101
|
def test_reuse_api_get_deleted(self, api):
|
|
101
|
-
|
|
102
|
+
"""It should not fetch a deleted reuse from the API and raise 410"""
|
|
102
103
|
reuse = ReuseFactory(deleted=datetime.utcnow())
|
|
103
|
-
response = api.get(url_for(
|
|
104
|
+
response = api.get(url_for("api.reuse", reuse=reuse))
|
|
104
105
|
assert410(response)
|
|
105
106
|
|
|
106
107
|
def test_reuse_api_get_deleted_but_authorized(self, api):
|
|
107
|
-
|
|
108
|
+
"""It should fetch a deleted reuse from the API if authorized"""
|
|
108
109
|
user = api.login()
|
|
109
110
|
reuse = ReuseFactory(deleted=datetime.utcnow(), owner=user)
|
|
110
|
-
response = api.get(url_for(
|
|
111
|
+
response = api.get(url_for("api.reuse", reuse=reuse))
|
|
111
112
|
assert200(response)
|
|
112
113
|
|
|
113
114
|
def test_reuse_api_create(self, api):
|
|
114
|
-
|
|
115
|
+
"""It should create a reuse from the API"""
|
|
115
116
|
data = ReuseFactory.as_dict()
|
|
116
117
|
user = api.login()
|
|
117
|
-
response = api.post(url_for(
|
|
118
|
+
response = api.post(url_for("api.reuses"), data)
|
|
118
119
|
assert201(response)
|
|
119
120
|
assert Reuse.objects.count() == 1
|
|
120
121
|
|
|
@@ -123,13 +124,13 @@ class ReuseAPITest:
|
|
|
123
124
|
assert reuse.organization is None
|
|
124
125
|
|
|
125
126
|
def test_reuse_api_create_as_org(self, api):
|
|
126
|
-
|
|
127
|
+
"""It should create a reuse as organization from the API"""
|
|
127
128
|
user = api.login()
|
|
128
129
|
data = ReuseFactory.as_dict()
|
|
129
|
-
member = Member(user=user, role=
|
|
130
|
+
member = Member(user=user, role="editor")
|
|
130
131
|
org = OrganizationFactory(members=[member])
|
|
131
|
-
data[
|
|
132
|
-
response = api.post(url_for(
|
|
132
|
+
data["organization"] = str(org.id)
|
|
133
|
+
response = api.post(url_for("api.reuses"), data)
|
|
133
134
|
assert201(response)
|
|
134
135
|
assert Reuse.objects.count() == 1
|
|
135
136
|
|
|
@@ -145,53 +146,53 @@ class ReuseAPITest:
|
|
|
145
146
|
api.login()
|
|
146
147
|
data = ReuseFactory.as_dict()
|
|
147
148
|
org = OrganizationFactory()
|
|
148
|
-
data[
|
|
149
|
-
response = api.post(url_for(
|
|
149
|
+
data["organization"] = str(org.id)
|
|
150
|
+
response = api.post(url_for("api.reuses"), data)
|
|
150
151
|
assert400(response)
|
|
151
152
|
assert Reuse.objects.count() == 0
|
|
152
153
|
|
|
153
154
|
def test_reuse_api_update(self, api):
|
|
154
|
-
|
|
155
|
+
"""It should update a reuse from the API"""
|
|
155
156
|
user = api.login()
|
|
156
157
|
reuse = ReuseFactory(owner=user)
|
|
157
158
|
data = reuse.to_dict()
|
|
158
|
-
data[
|
|
159
|
-
response = api.put(url_for(
|
|
159
|
+
data["description"] = "new description"
|
|
160
|
+
response = api.put(url_for("api.reuse", reuse=reuse), data)
|
|
160
161
|
assert200(response)
|
|
161
162
|
assert Reuse.objects.count() == 1
|
|
162
|
-
assert Reuse.objects.first().description ==
|
|
163
|
+
assert Reuse.objects.first().description == "new description"
|
|
163
164
|
|
|
164
165
|
def test_reuse_api_update_deleted(self, api):
|
|
165
|
-
|
|
166
|
+
"""It should not update a deleted reuse from the API and raise 410"""
|
|
166
167
|
api.login()
|
|
167
168
|
reuse = ReuseFactory(deleted=datetime.utcnow())
|
|
168
|
-
response = api.put(url_for(
|
|
169
|
+
response = api.put(url_for("api.reuse", reuse=reuse), {})
|
|
169
170
|
assert410(response)
|
|
170
171
|
|
|
171
172
|
def test_reuse_api_delete(self, api):
|
|
172
|
-
|
|
173
|
+
"""It should delete a reuse from the API"""
|
|
173
174
|
user = api.login()
|
|
174
175
|
reuse = ReuseFactory(owner=user)
|
|
175
|
-
response = api.delete(url_for(
|
|
176
|
+
response = api.delete(url_for("api.reuse", reuse=reuse))
|
|
176
177
|
assert204(response)
|
|
177
178
|
assert Reuse.objects.count() == 1
|
|
178
179
|
assert Reuse.objects[0].deleted is not None
|
|
179
180
|
|
|
180
181
|
def test_reuse_api_delete_deleted(self, api):
|
|
181
|
-
|
|
182
|
+
"""It should not delete a deleted reuse from the API and raise 410"""
|
|
182
183
|
api.login()
|
|
183
184
|
reuse = ReuseFactory(deleted=datetime.utcnow())
|
|
184
|
-
response = api.delete(url_for(
|
|
185
|
+
response = api.delete(url_for("api.reuse", reuse=reuse))
|
|
185
186
|
assert410(response)
|
|
186
187
|
|
|
187
188
|
def test_reuse_api_add_dataset(self, api):
|
|
188
|
-
|
|
189
|
+
"""It should add a dataset to a reuse from the API"""
|
|
189
190
|
user = api.login()
|
|
190
191
|
reuse = ReuseFactory(owner=user)
|
|
191
192
|
|
|
192
193
|
dataset = DatasetFactory()
|
|
193
|
-
data = {
|
|
194
|
-
url = url_for(
|
|
194
|
+
data = {"id": dataset.id, "class": "Dataset"}
|
|
195
|
+
url = url_for("api.reuse_add_dataset", reuse=reuse)
|
|
195
196
|
response = api.post(url, data)
|
|
196
197
|
assert201(response)
|
|
197
198
|
reuse.reload()
|
|
@@ -199,8 +200,8 @@ class ReuseAPITest:
|
|
|
199
200
|
assert reuse.datasets[-1] == dataset
|
|
200
201
|
|
|
201
202
|
dataset = DatasetFactory()
|
|
202
|
-
data = {
|
|
203
|
-
url = url_for(
|
|
203
|
+
data = {"id": dataset.id, "class": "Dataset"}
|
|
204
|
+
url = url_for("api.reuse_add_dataset", reuse=reuse)
|
|
204
205
|
response = api.post(url, data)
|
|
205
206
|
assert201(response)
|
|
206
207
|
reuse.reload()
|
|
@@ -208,13 +209,13 @@ class ReuseAPITest:
|
|
|
208
209
|
assert reuse.datasets[-1] == dataset
|
|
209
210
|
|
|
210
211
|
def test_reuse_api_add_dataset_twice(self, api):
|
|
211
|
-
|
|
212
|
+
"""It should not add twice a dataset to a reuse from the API"""
|
|
212
213
|
user = api.login()
|
|
213
214
|
dataset = DatasetFactory()
|
|
214
215
|
reuse = ReuseFactory(owner=user, datasets=[dataset])
|
|
215
216
|
|
|
216
|
-
data = {
|
|
217
|
-
url = url_for(
|
|
217
|
+
data = {"id": dataset.id, "class": "Dataset"}
|
|
218
|
+
url = url_for("api.reuse_add_dataset", reuse=reuse)
|
|
218
219
|
response = api.post(url, data)
|
|
219
220
|
assert200(response)
|
|
220
221
|
reuse.reload()
|
|
@@ -222,12 +223,12 @@ class ReuseAPITest:
|
|
|
222
223
|
assert reuse.datasets[-1] == dataset
|
|
223
224
|
|
|
224
225
|
def test_reuse_api_add_dataset_not_found(self, api):
|
|
225
|
-
|
|
226
|
+
"""It should return 404 when adding an unknown dataset to a reuse"""
|
|
226
227
|
user = api.login()
|
|
227
228
|
reuse = ReuseFactory(owner=user)
|
|
228
229
|
|
|
229
|
-
data = {
|
|
230
|
-
url = url_for(
|
|
230
|
+
data = {"id": "not-found", "class": "Dataset"}
|
|
231
|
+
url = url_for("api.reuse_add_dataset", reuse=reuse)
|
|
231
232
|
response = api.post(url, data)
|
|
232
233
|
|
|
233
234
|
assert404(response)
|
|
@@ -235,59 +236,59 @@ class ReuseAPITest:
|
|
|
235
236
|
assert len(reuse.datasets) == 0
|
|
236
237
|
|
|
237
238
|
def test_reuse_api_feature(self, api):
|
|
238
|
-
|
|
239
|
+
"""It should mark the reuse featured on POST"""
|
|
239
240
|
reuse = ReuseFactory(featured=False)
|
|
240
241
|
|
|
241
242
|
with api.user(AdminFactory()):
|
|
242
|
-
response = api.post(url_for(
|
|
243
|
+
response = api.post(url_for("api.reuse_featured", reuse=reuse))
|
|
243
244
|
assert200(response)
|
|
244
245
|
|
|
245
246
|
reuse.reload()
|
|
246
247
|
assert reuse.featured
|
|
247
248
|
|
|
248
249
|
def test_reuse_api_feature_already(self, api):
|
|
249
|
-
|
|
250
|
+
"""It shouldn't do anything to feature an already featured reuse"""
|
|
250
251
|
reuse = ReuseFactory(featured=True)
|
|
251
252
|
|
|
252
253
|
with api.user(AdminFactory()):
|
|
253
|
-
response = api.post(url_for(
|
|
254
|
+
response = api.post(url_for("api.reuse_featured", reuse=reuse))
|
|
254
255
|
assert200(response)
|
|
255
256
|
|
|
256
257
|
reuse.reload()
|
|
257
258
|
assert reuse.featured
|
|
258
259
|
|
|
259
260
|
def test_reuse_api_unfeature(self, api):
|
|
260
|
-
|
|
261
|
+
"""It should mark the reuse featured on POST"""
|
|
261
262
|
reuse = ReuseFactory(featured=True)
|
|
262
263
|
|
|
263
264
|
with api.user(AdminFactory()):
|
|
264
|
-
response = api.delete(url_for(
|
|
265
|
+
response = api.delete(url_for("api.reuse_featured", reuse=reuse))
|
|
265
266
|
assert200(response)
|
|
266
267
|
|
|
267
268
|
reuse.reload()
|
|
268
269
|
assert not reuse.featured
|
|
269
270
|
|
|
270
271
|
def test_reuse_api_unfeature_already(self, api):
|
|
271
|
-
|
|
272
|
+
"""It shouldn't do anything to unfeature a not featured reuse"""
|
|
272
273
|
reuse = ReuseFactory(featured=False)
|
|
273
274
|
|
|
274
275
|
with api.user(AdminFactory()):
|
|
275
|
-
response = api.delete(url_for(
|
|
276
|
+
response = api.delete(url_for("api.reuse_featured", reuse=reuse))
|
|
276
277
|
assert200(response)
|
|
277
278
|
|
|
278
279
|
reuse.reload()
|
|
279
280
|
assert not reuse.featured
|
|
280
281
|
|
|
281
282
|
def test_follow_reuse(self, api):
|
|
282
|
-
|
|
283
|
+
"""It should follow a reuse on POST"""
|
|
283
284
|
user = api.login()
|
|
284
285
|
to_follow = ReuseFactory()
|
|
285
286
|
|
|
286
|
-
response = api.post(url_for(
|
|
287
|
+
response = api.post(url_for("api.reuse_followers", id=to_follow.id))
|
|
287
288
|
assert201(response)
|
|
288
289
|
|
|
289
290
|
to_follow.count_followers()
|
|
290
|
-
assert to_follow.get_metrics()[
|
|
291
|
+
assert to_follow.get_metrics()["followers"] == 1
|
|
291
292
|
|
|
292
293
|
assert Follow.objects.following(to_follow).count() == 0
|
|
293
294
|
assert Follow.objects.followers(to_follow).count() == 1
|
|
@@ -297,17 +298,17 @@ class ReuseAPITest:
|
|
|
297
298
|
assert Follow.objects.followers(user).count() == 0
|
|
298
299
|
|
|
299
300
|
def test_unfollow_reuse(self, api):
|
|
300
|
-
|
|
301
|
+
"""It should unfollow the reuse on DELETE"""
|
|
301
302
|
user = api.login()
|
|
302
303
|
to_follow = ReuseFactory()
|
|
303
304
|
Follow.objects.create(follower=user, following=to_follow)
|
|
304
305
|
|
|
305
|
-
response = api.delete(url_for(
|
|
306
|
+
response = api.delete(url_for("api.reuse_followers", id=to_follow.id))
|
|
306
307
|
assert200(response)
|
|
307
308
|
|
|
308
309
|
nb_followers = Follow.objects.followers(to_follow).count()
|
|
309
310
|
|
|
310
|
-
assert response.json[
|
|
311
|
+
assert response.json["followers"] == nb_followers
|
|
311
312
|
|
|
312
313
|
assert Follow.objects.following(to_follow).count() == 0
|
|
313
314
|
assert nb_followers == 0
|
|
@@ -315,68 +316,61 @@ class ReuseAPITest:
|
|
|
315
316
|
assert Follow.objects.followers(user).count() == 0
|
|
316
317
|
|
|
317
318
|
def test_suggest_reuses_api(self, api):
|
|
318
|
-
|
|
319
|
+
"""It should suggest reuses"""
|
|
319
320
|
for i in range(3):
|
|
320
321
|
ReuseFactory(
|
|
321
|
-
title=
|
|
322
|
+
title="arealtestprefix-{0}".format(i) if i % 2 else faker.word(),
|
|
322
323
|
visible=True,
|
|
323
|
-
metrics={"followers": i}
|
|
324
|
+
metrics={"followers": i},
|
|
325
|
+
)
|
|
324
326
|
max_follower_reuse = ReuseFactory(
|
|
325
|
-
title=
|
|
326
|
-
visible=True,
|
|
327
|
-
metrics={"followers": 10}
|
|
327
|
+
title="arealtestprefix-4", visible=True, metrics={"followers": 10}
|
|
328
328
|
)
|
|
329
329
|
|
|
330
|
-
response = api.get(url_for(
|
|
331
|
-
qs={'q': 'arealtestpref', 'size': '5'})
|
|
330
|
+
response = api.get(url_for("api.suggest_reuses"), qs={"q": "arealtestpref", "size": "5"})
|
|
332
331
|
assert200(response)
|
|
333
332
|
|
|
334
333
|
assert len(response.json) <= 5
|
|
335
334
|
assert len(response.json) > 1
|
|
336
335
|
|
|
337
336
|
for suggestion in response.json:
|
|
338
|
-
assert
|
|
339
|
-
assert
|
|
340
|
-
assert
|
|
341
|
-
assert
|
|
342
|
-
assert
|
|
343
|
-
assert response.json[0][
|
|
337
|
+
assert "id" in suggestion
|
|
338
|
+
assert "slug" in suggestion
|
|
339
|
+
assert "title" in suggestion
|
|
340
|
+
assert "image_url" in suggestion
|
|
341
|
+
assert "test" in suggestion["title"]
|
|
342
|
+
assert response.json[0]["id"] == str(max_follower_reuse.id)
|
|
344
343
|
|
|
345
344
|
def test_suggest_reuses_api_unicode(self, api):
|
|
346
|
-
|
|
345
|
+
"""It should suggest reuses with special characters"""
|
|
347
346
|
for i in range(4):
|
|
348
|
-
ReuseFactory(
|
|
349
|
-
title='testé-{0}'.format(i) if i % 2 else faker.word(),
|
|
350
|
-
visible=True)
|
|
347
|
+
ReuseFactory(title="testé-{0}".format(i) if i % 2 else faker.word(), visible=True)
|
|
351
348
|
|
|
352
|
-
response = api.get(url_for(
|
|
353
|
-
qs={'q': 'testé', 'size': '5'})
|
|
349
|
+
response = api.get(url_for("api.suggest_reuses"), qs={"q": "testé", "size": "5"})
|
|
354
350
|
assert200(response)
|
|
355
351
|
|
|
356
352
|
assert len(response.json) <= 5
|
|
357
353
|
assert len(response.json) > 1
|
|
358
354
|
|
|
359
355
|
for suggestion in response.json:
|
|
360
|
-
assert
|
|
361
|
-
assert
|
|
362
|
-
assert
|
|
363
|
-
assert
|
|
364
|
-
assert
|
|
356
|
+
assert "id" in suggestion
|
|
357
|
+
assert "slug" in suggestion
|
|
358
|
+
assert "title" in suggestion
|
|
359
|
+
assert "image_url" in suggestion
|
|
360
|
+
assert "test" in suggestion["title"]
|
|
365
361
|
|
|
366
362
|
def test_suggest_reuses_api_no_match(self, api):
|
|
367
|
-
|
|
363
|
+
"""It should not provide reuse suggestion if no match"""
|
|
368
364
|
ReuseFactory.create_batch(3, visible=True)
|
|
369
365
|
|
|
370
|
-
response = api.get(url_for(
|
|
371
|
-
qs={'q': 'xxxxxx', 'size': '5'})
|
|
366
|
+
response = api.get(url_for("api.suggest_reuses"), qs={"q": "xxxxxx", "size": "5"})
|
|
372
367
|
assert200(response)
|
|
373
368
|
assert len(response.json) == 0
|
|
374
369
|
|
|
375
370
|
def test_suggest_reuses_api_empty(self, api):
|
|
376
|
-
|
|
371
|
+
"""It should not provide reuse suggestion if no data"""
|
|
377
372
|
# self.init_search()
|
|
378
|
-
response = api.get(url_for(
|
|
379
|
-
qs={'q': 'xxxxxx', 'size': '5'})
|
|
373
|
+
response = api.get(url_for("api.suggest_reuses"), qs={"q": "xxxxxx", "size": "5"})
|
|
380
374
|
assert200(response)
|
|
381
375
|
assert len(response.json) == 0
|
|
382
376
|
|
|
@@ -387,15 +381,15 @@ class ReuseBadgeAPITest:
|
|
|
387
381
|
@pytest.fixture(autouse=True)
|
|
388
382
|
def setup(self, api, clean_db):
|
|
389
383
|
# Register at least two badges
|
|
390
|
-
Reuse.__badges__[
|
|
391
|
-
Reuse.__badges__[
|
|
384
|
+
Reuse.__badges__["test-1"] = "Test 1"
|
|
385
|
+
Reuse.__badges__["test-2"] = "Test 2"
|
|
392
386
|
|
|
393
387
|
self.factory = badge_factory(Reuse)
|
|
394
388
|
self.user = api.login(AdminFactory())
|
|
395
389
|
self.reuse = ReuseFactory()
|
|
396
390
|
|
|
397
391
|
def test_list(self, api):
|
|
398
|
-
response = api.get(url_for(
|
|
392
|
+
response = api.get(url_for("api.available_reuse_badges"))
|
|
399
393
|
assert200(response)
|
|
400
394
|
assert len(response.json) == len(Reuse.__badges__)
|
|
401
395
|
for kind, label in Reuse.__badges__.items():
|
|
@@ -404,15 +398,15 @@ class ReuseBadgeAPITest:
|
|
|
404
398
|
|
|
405
399
|
def test_create(self, api):
|
|
406
400
|
data = self.factory.as_dict()
|
|
407
|
-
response = api.post(url_for(
|
|
401
|
+
response = api.post(url_for("api.reuse_badges", reuse=self.reuse), data)
|
|
408
402
|
assert201(response)
|
|
409
403
|
self.reuse.reload()
|
|
410
404
|
assert len(self.reuse.badges) == 1
|
|
411
405
|
|
|
412
406
|
def test_create_same(self, api):
|
|
413
407
|
data = self.factory.as_dict()
|
|
414
|
-
api.post(url_for(
|
|
415
|
-
response = api.post(url_for(
|
|
408
|
+
api.post(url_for("api.reuse_badges", reuse=self.reuse), data)
|
|
409
|
+
response = api.post(url_for("api.reuse_badges", reuse=self.reuse), data)
|
|
416
410
|
assert200(response)
|
|
417
411
|
self.reuse.reload()
|
|
418
412
|
assert len(self.reuse.badges) == 1
|
|
@@ -423,8 +417,8 @@ class ReuseBadgeAPITest:
|
|
|
423
417
|
kinds_keys = list(Reuse.__badges__)
|
|
424
418
|
self.reuse.add_badge(kinds_keys[0])
|
|
425
419
|
data = self.factory.as_dict()
|
|
426
|
-
data[
|
|
427
|
-
response = api.post(url_for(
|
|
420
|
+
data["kind"] = kinds_keys[1]
|
|
421
|
+
response = api.post(url_for("api.reuse_badges", reuse=self.reuse), data)
|
|
428
422
|
assert201(response)
|
|
429
423
|
self.reuse.reload()
|
|
430
424
|
assert len(self.reuse.badges) == 2
|
|
@@ -432,16 +426,17 @@ class ReuseBadgeAPITest:
|
|
|
432
426
|
def test_delete(self, api):
|
|
433
427
|
badge = self.factory()
|
|
434
428
|
self.reuse.add_badge(badge.kind)
|
|
435
|
-
response = api.delete(
|
|
436
|
-
|
|
437
|
-
|
|
429
|
+
response = api.delete(
|
|
430
|
+
url_for("api.reuse_badge", reuse=self.reuse, badge_kind=str(badge.kind))
|
|
431
|
+
)
|
|
438
432
|
assert204(response)
|
|
439
433
|
self.reuse.reload()
|
|
440
434
|
assert len(self.reuse.badges) == 0
|
|
441
435
|
|
|
442
436
|
def test_delete_404(self, api):
|
|
443
|
-
response = api.delete(
|
|
444
|
-
|
|
437
|
+
response = api.delete(
|
|
438
|
+
url_for("api.reuse_badge", reuse=self.reuse, badge_kind=str(self.factory().kind))
|
|
439
|
+
)
|
|
445
440
|
assert404(response)
|
|
446
441
|
|
|
447
442
|
|
|
@@ -449,13 +444,13 @@ class ReuseReferencesAPITest:
|
|
|
449
444
|
modules = []
|
|
450
445
|
|
|
451
446
|
def test_reuse_types_list(self, api):
|
|
452
|
-
|
|
453
|
-
response = api.get(url_for(
|
|
447
|
+
"""It should fetch the reuse types list from the API"""
|
|
448
|
+
response = api.get(url_for("api.reuse_types"))
|
|
454
449
|
assert200(response)
|
|
455
450
|
assert len(response.json) == len(REUSE_TYPES)
|
|
456
451
|
|
|
457
452
|
def test_reuse_topics_list(self, api):
|
|
458
|
-
|
|
459
|
-
response = api.get(url_for(
|
|
453
|
+
"""It should fetch the reuse topics list from the API"""
|
|
454
|
+
response = api.get(url_for("api.reuse_topics"))
|
|
460
455
|
assert200(response)
|
|
461
456
|
assert len(response.json) == len(REUSE_TOPICS)
|
udata/tests/api/test_swagger.py
CHANGED
|
@@ -10,15 +10,15 @@ class SwaggerBlueprintTest:
|
|
|
10
10
|
modules = []
|
|
11
11
|
|
|
12
12
|
def test_swagger_resource_type(self, api):
|
|
13
|
-
response = api.get(url_for(
|
|
13
|
+
response = api.get(url_for("api.specs"))
|
|
14
14
|
assert200(response)
|
|
15
15
|
swagger = json.loads(response.data)
|
|
16
|
-
expected = swagger[
|
|
17
|
-
expected = expected[
|
|
18
|
-
assert expected ==
|
|
16
|
+
expected = swagger["paths"]["/datasets/{dataset}/resources/"]
|
|
17
|
+
expected = expected["put"]["responses"]["200"]["schema"]["type"]
|
|
18
|
+
assert expected == "array"
|
|
19
19
|
|
|
20
20
|
def test_swagger_specs_validate(self, api):
|
|
21
|
-
response = api.get(url_for(
|
|
21
|
+
response = api.get(url_for("api.specs"))
|
|
22
22
|
try:
|
|
23
23
|
schemas.validate(response.json)
|
|
24
24
|
except schemas.SchemaValidationError as e:
|