udata 12.0.2.dev16__py3-none-any.whl → 12.0.2.dev18__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.
- udata/commands/tests/test_fixtures.py +6 -3
- udata/core/badges/tests/test_commands.py +2 -4
- udata/core/badges/tests/test_model.py +2 -2
- udata/core/pages/tests/test_api.py +0 -2
- udata/core/spatial/tests/test_api.py +17 -20
- udata/core/spatial/tests/test_models.py +3 -3
- udata/core/user/tests/test_user_model.py +2 -6
- udata/features/identicon/tests/test_backends.py +3 -13
- udata/forms/fields.py +3 -3
- udata/forms/widgets.py +2 -2
- udata/harvest/tests/ckan/test_ckan_backend.py +300 -337
- udata/harvest/tests/ckan/test_ckan_backend_errors.py +94 -99
- udata/harvest/tests/ckan/test_ckan_backend_filters.py +128 -122
- udata/harvest/tests/ckan/test_dkan_backend.py +39 -51
- udata/harvest/tests/test_actions.py +7 -7
- udata/harvest/tests/test_api.py +2 -4
- udata/harvest/tests/test_base_backend.py +3 -4
- udata/harvest/tests/test_dcat_backend.py +5 -16
- udata/harvest/tests/test_models.py +2 -4
- udata/harvest/tests/test_notifications.py +2 -4
- udata/harvest/tests/test_tasks.py +2 -3
- udata/mongo/taglist_field.py +3 -3
- udata/settings.py +3 -0
- udata/tags.py +5 -5
- udata/tests/__init__.py +40 -58
- udata/tests/api/__init__.py +87 -2
- udata/tests/api/test_activities_api.py +17 -23
- udata/tests/api/test_auth_api.py +2 -4
- udata/tests/api/test_contact_points.py +48 -54
- udata/tests/api/test_dataservices_api.py +0 -2
- udata/tests/api/test_datasets_api.py +27 -49
- udata/tests/api/test_me_api.py +4 -6
- udata/tests/api/test_organizations_api.py +19 -38
- udata/tests/api/test_reports_api.py +0 -4
- udata/tests/api/test_reuses_api.py +9 -19
- udata/tests/api/test_swagger.py +2 -3
- udata/tests/api/test_tags_api.py +6 -7
- udata/tests/api/test_transfer_api.py +0 -2
- udata/tests/api/test_user_api.py +8 -10
- udata/tests/apiv2/test_datasets.py +0 -4
- udata/tests/apiv2/test_me_api.py +0 -2
- udata/tests/apiv2/test_organizations.py +0 -2
- udata/tests/apiv2/test_swagger.py +2 -3
- udata/tests/apiv2/test_topics.py +0 -2
- udata/tests/cli/test_cli_base.py +14 -12
- udata/tests/cli/test_db_cli.py +51 -54
- udata/tests/contact_point/test_contact_point_models.py +2 -2
- udata/tests/dataservice/test_csv_adapter.py +2 -5
- udata/tests/dataservice/test_dataservice_rdf.py +3 -6
- udata/tests/dataservice/test_dataservice_tasks.py +36 -38
- udata/tests/dataset/test_csv_adapter.py +2 -5
- udata/tests/dataset/test_dataset_actions.py +2 -4
- udata/tests/dataset/test_dataset_commands.py +2 -4
- udata/tests/dataset/test_dataset_events.py +3 -3
- udata/tests/dataset/test_dataset_model.py +6 -7
- udata/tests/dataset/test_dataset_rdf.py +6 -9
- udata/tests/dataset/test_dataset_recommendations.py +2 -2
- udata/tests/dataset/test_dataset_tasks.py +66 -68
- udata/tests/dataset/test_resource_preview.py +39 -48
- udata/tests/dataset/test_transport_tasks.py +2 -2
- udata/tests/features/territories/__init__.py +0 -6
- udata/tests/features/territories/test_territories_api.py +25 -24
- udata/tests/forms/test_current_user_field.py +2 -2
- udata/tests/forms/test_dict_field.py +2 -4
- udata/tests/forms/test_extras_fields.py +2 -3
- udata/tests/forms/test_image_field.py +2 -2
- udata/tests/forms/test_model_field.py +2 -4
- udata/tests/forms/test_publish_as_field.py +2 -4
- udata/tests/forms/test_user_forms.py +26 -29
- udata/tests/frontend/test_auth.py +2 -3
- udata/tests/frontend/test_csv.py +5 -6
- udata/tests/frontend/test_error_handlers.py +2 -3
- udata/tests/frontend/test_hooks.py +5 -7
- udata/tests/frontend/test_markdown.py +3 -4
- udata/tests/helpers.py +2 -7
- udata/tests/metrics/test_metrics.py +52 -48
- udata/tests/metrics/test_tasks.py +154 -150
- udata/tests/organization/test_csv_adapter.py +2 -5
- udata/tests/organization/test_notifications.py +2 -4
- udata/tests/organization/test_organization_model.py +3 -4
- udata/tests/organization/test_organization_rdf.py +2 -8
- udata/tests/plugin.py +6 -110
- udata/tests/reuse/test_reuse_model.py +3 -4
- udata/tests/site/test_site_api.py +0 -2
- udata/tests/site/test_site_csv_exports.py +0 -2
- udata/tests/site/test_site_metrics.py +2 -4
- udata/tests/site/test_site_model.py +2 -2
- udata/tests/site/test_site_rdf.py +3 -6
- udata/tests/test_activity.py +3 -3
- udata/tests/test_api_fields.py +6 -9
- udata/tests/test_cors.py +0 -2
- udata/tests/test_dcat_commands.py +2 -3
- udata/tests/test_discussions.py +2 -7
- udata/tests/test_mail.py +4 -10
- udata/tests/test_migrations.py +413 -419
- udata/tests/test_model.py +10 -11
- udata/tests/test_notifications.py +2 -3
- udata/tests/test_owned.py +3 -3
- udata/tests/test_routing.py +5 -5
- udata/tests/test_storages.py +6 -5
- udata/tests/test_tags.py +2 -4
- udata/tests/test_topics.py +2 -4
- udata/tests/test_transfer.py +4 -5
- udata/tests/topic/test_topic_tasks.py +25 -27
- udata/tests/user/test_user_rdf.py +2 -8
- udata/tests/workers/test_jobs_commands.py +2 -2
- udata/tests/workers/test_tasks_routing.py +27 -27
- udata/utils.py +1 -1
- {udata-12.0.2.dev16.dist-info → udata-12.0.2.dev18.dist-info}/METADATA +1 -1
- {udata-12.0.2.dev16.dist-info → udata-12.0.2.dev18.dist-info}/RECORD +114 -116
- udata/tests/frontend/__init__.py +0 -23
- udata/tests/metrics/conftest.py +0 -15
- {udata-12.0.2.dev16.dist-info → udata-12.0.2.dev18.dist-info}/WHEEL +0 -0
- {udata-12.0.2.dev16.dist-info → udata-12.0.2.dev18.dist-info}/entry_points.txt +0 -0
- {udata-12.0.2.dev16.dist-info → udata-12.0.2.dev18.dist-info}/licenses/LICENSE +0 -0
- {udata-12.0.2.dev16.dist-info → udata-12.0.2.dev18.dist-info}/top_level.txt +0 -0
|
@@ -1,18 +1,19 @@
|
|
|
1
|
+
import pytest
|
|
1
2
|
from flask import url_for
|
|
2
3
|
|
|
3
4
|
from udata.core.spatial.factories import GeoZoneFactory
|
|
4
5
|
from udata.tests.api import APITestCase
|
|
5
6
|
from udata.tests.features.territories import (
|
|
6
|
-
TerritoriesSettings,
|
|
7
7
|
create_geozones_fixtures,
|
|
8
8
|
create_old_new_regions_fixtures,
|
|
9
9
|
)
|
|
10
10
|
|
|
11
11
|
|
|
12
|
+
@pytest.mark.options(
|
|
13
|
+
ACTIVATE_TERRITORIES=True,
|
|
14
|
+
HANDLED_LEVELS=("fr:commune", "fr:departement", "fr:region", "country"),
|
|
15
|
+
)
|
|
12
16
|
class TerritoriesAPITest(APITestCase):
|
|
13
|
-
modules = []
|
|
14
|
-
settings = TerritoriesSettings
|
|
15
|
-
|
|
16
17
|
def setUp(self):
|
|
17
18
|
self.paca, self.bdr, self.arles = create_geozones_fixtures()
|
|
18
19
|
|
|
@@ -21,15 +22,15 @@ class TerritoriesAPITest(APITestCase):
|
|
|
21
22
|
self.assert400(response)
|
|
22
23
|
|
|
23
24
|
def test_suggest_empty(self):
|
|
24
|
-
response = self.get(url_for("api.suggest_territory"
|
|
25
|
+
response = self.get(url_for("api.suggest_territory", q="tes"))
|
|
25
26
|
self.assert200(response)
|
|
26
27
|
self.assertEqual(response.json, [])
|
|
27
|
-
response = self.get(url_for("api.suggest_territory"
|
|
28
|
+
response = self.get(url_for("api.suggest_territory", q="test"))
|
|
28
29
|
self.assert200(response)
|
|
29
30
|
self.assertEqual(response.json, [])
|
|
30
31
|
|
|
31
32
|
def test_suggest_town(self):
|
|
32
|
-
response = self.get(url_for("api.suggest_territory"
|
|
33
|
+
response = self.get(url_for("api.suggest_territory", q="arle"))
|
|
33
34
|
self.assert200(response)
|
|
34
35
|
result = response.json[0]
|
|
35
36
|
self.assertEqual(result["title"], self.arles.name)
|
|
@@ -37,7 +38,7 @@ class TerritoriesAPITest(APITestCase):
|
|
|
37
38
|
self.assertIn("page", result)
|
|
38
39
|
|
|
39
40
|
def test_suggest_town_five_letters(self):
|
|
40
|
-
response = self.get(url_for("api.suggest_territory"
|
|
41
|
+
response = self.get(url_for("api.suggest_territory", q="arles"))
|
|
41
42
|
self.assert200(response)
|
|
42
43
|
result = response.json[0]
|
|
43
44
|
self.assertEqual(result["title"], self.arles.name)
|
|
@@ -45,7 +46,7 @@ class TerritoriesAPITest(APITestCase):
|
|
|
45
46
|
self.assertIn("page", result)
|
|
46
47
|
|
|
47
48
|
def test_suggest_town_by_insee_code(self):
|
|
48
|
-
response = self.get(url_for("api.suggest_territory"
|
|
49
|
+
response = self.get(url_for("api.suggest_territory", q="13004"))
|
|
49
50
|
self.assert200(response)
|
|
50
51
|
result = response.json[0]
|
|
51
52
|
self.assertEqual(result["id"], self.arles.id)
|
|
@@ -55,7 +56,7 @@ class TerritoriesAPITest(APITestCase):
|
|
|
55
56
|
arles_sur_tech = GeoZoneFactory(
|
|
56
57
|
id="fr:commune:66009", level="fr:commune", name="Arles-sur-Tech", code="66009"
|
|
57
58
|
)
|
|
58
|
-
response = self.get(url_for("api.suggest_territory"
|
|
59
|
+
response = self.get(url_for("api.suggest_territory", q="arles"))
|
|
59
60
|
self.assert200(response)
|
|
60
61
|
results = response.json
|
|
61
62
|
self.assertEqual(len(results), 2)
|
|
@@ -64,7 +65,7 @@ class TerritoriesAPITest(APITestCase):
|
|
|
64
65
|
self.assertEqual(results[1]["id"], arles_sur_tech.id)
|
|
65
66
|
|
|
66
67
|
def test_suggest_county(self):
|
|
67
|
-
response = self.get(url_for("api.suggest_territory"
|
|
68
|
+
response = self.get(url_for("api.suggest_territory", q="bouche"))
|
|
68
69
|
self.assert200(response)
|
|
69
70
|
result = response.json[0]
|
|
70
71
|
self.assertEqual(result["title"], self.bdr.name)
|
|
@@ -72,7 +73,7 @@ class TerritoriesAPITest(APITestCase):
|
|
|
72
73
|
self.assertIn("page", result)
|
|
73
74
|
|
|
74
75
|
def test_suggest_region(self):
|
|
75
|
-
response = self.get(url_for("api.suggest_territory"
|
|
76
|
+
response = self.get(url_for("api.suggest_territory", q="prov"))
|
|
76
77
|
self.assert200(response)
|
|
77
78
|
result = response.json[0]
|
|
78
79
|
self.assertEqual(result["title"], self.paca.name)
|
|
@@ -81,7 +82,7 @@ class TerritoriesAPITest(APITestCase):
|
|
|
81
82
|
|
|
82
83
|
def test_suggest_old_new_region(self):
|
|
83
84
|
lr, occitanie = create_old_new_regions_fixtures()
|
|
84
|
-
response = self.get(url_for("api.suggest_territory"
|
|
85
|
+
response = self.get(url_for("api.suggest_territory", q="langue"))
|
|
85
86
|
self.assert200(response)
|
|
86
87
|
self.assertEqual(len(response.json), 2)
|
|
87
88
|
result = response.json[0]
|
|
@@ -92,7 +93,7 @@ class TerritoriesAPITest(APITestCase):
|
|
|
92
93
|
self.assertEqual(result["id"], lr.id)
|
|
93
94
|
|
|
94
95
|
def test_suggest_county_by_id(self):
|
|
95
|
-
response = self.get(url_for("api.suggest_territory"
|
|
96
|
+
response = self.get(url_for("api.suggest_territory", q="13"))
|
|
96
97
|
self.assert200(response)
|
|
97
98
|
result = response.json[0]
|
|
98
99
|
self.assertEqual(result["id"], self.bdr.id)
|
|
@@ -102,7 +103,7 @@ class TerritoriesAPITest(APITestCase):
|
|
|
102
103
|
bouchet = GeoZoneFactory(
|
|
103
104
|
id="fr:commune:26054", level="fr:commune", name="Bouchet", code="26054"
|
|
104
105
|
)
|
|
105
|
-
response = self.get(url_for("api.suggest_territory"
|
|
106
|
+
response = self.get(url_for("api.suggest_territory", q="bouche"))
|
|
106
107
|
self.assert200(response)
|
|
107
108
|
results = response.json
|
|
108
109
|
self.assertEqual(len(results), 2)
|
|
@@ -114,7 +115,7 @@ class TerritoriesAPITest(APITestCase):
|
|
|
114
115
|
guyane = GeoZoneFactory(
|
|
115
116
|
id="fr:departement:973", level="fr:departement", name="Guyane", code="973"
|
|
116
117
|
)
|
|
117
|
-
response = self.get(url_for("api.suggest_territory"
|
|
118
|
+
response = self.get(url_for("api.suggest_territory", q="guya"))
|
|
118
119
|
self.assert200(response)
|
|
119
120
|
results = response.json
|
|
120
121
|
self.assertEqual(len(results), 1)
|
|
@@ -124,7 +125,7 @@ class TerritoriesAPITest(APITestCase):
|
|
|
124
125
|
guyane = GeoZoneFactory(
|
|
125
126
|
id="fr:departement:973", level="fr:departement", name="Guyane", code="973"
|
|
126
127
|
)
|
|
127
|
-
response = self.get(url_for("api.suggest_territory"
|
|
128
|
+
response = self.get(url_for("api.suggest_territory", q="973"))
|
|
128
129
|
self.assert200(response)
|
|
129
130
|
results = response.json
|
|
130
131
|
self.assertEqual(len(results), 1)
|
|
@@ -134,7 +135,7 @@ class TerritoriesAPITest(APITestCase):
|
|
|
134
135
|
bastia = GeoZoneFactory(
|
|
135
136
|
id="fr:commune:2b033", level="fr:commune", name="Bastia", code="2b033"
|
|
136
137
|
)
|
|
137
|
-
response = self.get(url_for("api.suggest_territory"
|
|
138
|
+
response = self.get(url_for("api.suggest_territory", q="basti"))
|
|
138
139
|
self.assert200(response)
|
|
139
140
|
results = response.json
|
|
140
141
|
self.assertEqual(len(results), 1)
|
|
@@ -144,7 +145,7 @@ class TerritoriesAPITest(APITestCase):
|
|
|
144
145
|
bastia = GeoZoneFactory(
|
|
145
146
|
id="fr:commune:2b033", level="fr:commune", name="Bastia", code="2b033"
|
|
146
147
|
)
|
|
147
|
-
response = self.get(url_for("api.suggest_territory"
|
|
148
|
+
response = self.get(url_for("api.suggest_territory", q="2b033"))
|
|
148
149
|
self.assert200(response)
|
|
149
150
|
results = response.json
|
|
150
151
|
self.assertEqual(len(results), 1)
|
|
@@ -154,7 +155,7 @@ class TerritoriesAPITest(APITestCase):
|
|
|
154
155
|
haute_corse = GeoZoneFactory(
|
|
155
156
|
id="fr:departement:2b", level="fr:departement", name="Haute-Corse", code="2b"
|
|
156
157
|
)
|
|
157
|
-
response = self.get(url_for("api.suggest_territory"
|
|
158
|
+
response = self.get(url_for("api.suggest_territory", q="2b"))
|
|
158
159
|
self.assert200(response)
|
|
159
160
|
results = response.json
|
|
160
161
|
self.assertEqual(len(results), 1)
|
|
@@ -162,21 +163,21 @@ class TerritoriesAPITest(APITestCase):
|
|
|
162
163
|
|
|
163
164
|
def test_not_suggest_country(self):
|
|
164
165
|
GeoZoneFactory(id="country:fr", level="country", name="France")
|
|
165
|
-
response = self.get(url_for("api.suggest_territory"
|
|
166
|
+
response = self.get(url_for("api.suggest_territory", q="fra"))
|
|
166
167
|
self.assert200(response)
|
|
167
168
|
results = response.json
|
|
168
169
|
self.assertEqual(len(results), 0)
|
|
169
|
-
response = self.get(url_for("api.suggest_territory"
|
|
170
|
+
response = self.get(url_for("api.suggest_territory", q="fran"))
|
|
170
171
|
self.assert200(response)
|
|
171
172
|
results = response.json
|
|
172
173
|
self.assertEqual(len(results), 0)
|
|
173
|
-
response = self.get(url_for("api.suggest_territory"
|
|
174
|
+
response = self.get(url_for("api.suggest_territory", q="franc"))
|
|
174
175
|
self.assert200(response)
|
|
175
176
|
results = response.json
|
|
176
177
|
self.assertEqual(len(results), 0)
|
|
177
178
|
|
|
178
179
|
def test_suggest_unicode(self):
|
|
179
|
-
response = self.get(url_for("api.suggest_territory"
|
|
180
|
+
response = self.get(url_for("api.suggest_territory", q="Bouches-du-Rhône"))
|
|
180
181
|
self.assert200(response)
|
|
181
182
|
result = response.json[0]
|
|
182
183
|
self.assertEqual(result["title"], self.bdr.name)
|
|
@@ -9,11 +9,11 @@ from udata.core.user.factories import AdminFactory, UserFactory
|
|
|
9
9
|
from udata.forms import ModelForm, fields
|
|
10
10
|
from udata.i18n import gettext as _
|
|
11
11
|
from udata.models import User, db
|
|
12
|
-
from udata.tests import
|
|
12
|
+
from udata.tests.api import DBTestCase
|
|
13
13
|
from udata.tests.helpers import security_gettext
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
class CurrentUserFieldTest(
|
|
16
|
+
class CurrentUserFieldTest(DBTestCase):
|
|
17
17
|
def factory(self, *args, **kwargs):
|
|
18
18
|
class Ownable(db.Document):
|
|
19
19
|
owner = db.ReferenceField(User)
|
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
from datetime import date, datetime
|
|
2
2
|
|
|
3
|
-
import pytest
|
|
4
3
|
from werkzeug.datastructures import MultiDict
|
|
5
4
|
|
|
6
5
|
from udata.forms import ModelForm, fields
|
|
7
6
|
from udata.mongo import db
|
|
7
|
+
from udata.tests import PytestOnlyTestCase
|
|
8
8
|
|
|
9
|
-
pytestmark = [pytest.mark.usefixtures("app")]
|
|
10
9
|
|
|
11
|
-
|
|
12
|
-
class DictFieldTest:
|
|
10
|
+
class DictFieldTest(PytestOnlyTestCase):
|
|
13
11
|
def factory(self):
|
|
14
12
|
class Fake(db.Document):
|
|
15
13
|
raw = db.DictField()
|
|
@@ -6,11 +6,10 @@ from werkzeug.datastructures import MultiDict
|
|
|
6
6
|
|
|
7
7
|
from udata.forms import ModelForm, fields
|
|
8
8
|
from udata.mongo import db
|
|
9
|
+
from udata.tests import PytestOnlyTestCase
|
|
9
10
|
|
|
10
|
-
pytestmark = [pytest.mark.usefixtures("app")]
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
class ExtrasFieldTest:
|
|
12
|
+
class ExtrasFieldTest(PytestOnlyTestCase):
|
|
14
13
|
def factory(self):
|
|
15
14
|
class Fake(db.Document):
|
|
16
15
|
extras = db.ExtrasField()
|
|
@@ -7,6 +7,7 @@ from udata.core.storages import tmp
|
|
|
7
7
|
from udata.forms import Form
|
|
8
8
|
from udata.forms.fields import ImageField
|
|
9
9
|
from udata.mongo import db
|
|
10
|
+
from udata.tests.api import PytestOnlyDBTestCase
|
|
10
11
|
from udata.tests.helpers import data_path
|
|
11
12
|
|
|
12
13
|
log = logging.getLogger(__name__)
|
|
@@ -24,8 +25,7 @@ class PostData(dict):
|
|
|
24
25
|
return value
|
|
25
26
|
|
|
26
27
|
|
|
27
|
-
|
|
28
|
-
class ImageFieldTest:
|
|
28
|
+
class ImageFieldTest(PytestOnlyDBTestCase):
|
|
29
29
|
class D(db.Document):
|
|
30
30
|
image = db.ImageField(fs=storage)
|
|
31
31
|
thumbnail = db.ImageField(fs=storage, thumbnails=SIZES)
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import pytest
|
|
2
1
|
from werkzeug.datastructures import MultiDict
|
|
3
2
|
|
|
4
3
|
from udata.forms import ModelForm, fields
|
|
5
4
|
from udata.i18n import gettext as _
|
|
6
5
|
from udata.mongo import db
|
|
7
|
-
|
|
8
|
-
pytestmark = [pytest.mark.usefixtures("clean_db")]
|
|
6
|
+
from udata.tests.api import PytestOnlyDBTestCase
|
|
9
7
|
|
|
10
8
|
|
|
11
9
|
class Target(db.Document):
|
|
@@ -233,7 +231,7 @@ class Optionnal:
|
|
|
233
231
|
assert model.target is None
|
|
234
232
|
|
|
235
233
|
|
|
236
|
-
class CommonMixin:
|
|
234
|
+
class CommonMixin(PytestOnlyDBTestCase):
|
|
237
235
|
@property
|
|
238
236
|
def form(self):
|
|
239
237
|
validators = [fields.validators.DataRequired()] if self.required else []
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import pytest
|
|
2
1
|
from bson import ObjectId
|
|
3
2
|
from werkzeug.datastructures import MultiDict
|
|
4
3
|
|
|
@@ -8,10 +7,10 @@ from udata.core.user.factories import AdminFactory, UserFactory
|
|
|
8
7
|
from udata.forms import ModelForm, fields
|
|
9
8
|
from udata.i18n import gettext as _
|
|
10
9
|
from udata.models import Member, Organization, User, db
|
|
11
|
-
from udata.tests import
|
|
10
|
+
from udata.tests.api import DBTestCase
|
|
12
11
|
|
|
13
12
|
|
|
14
|
-
class PublishFieldTest(
|
|
13
|
+
class PublishFieldTest(DBTestCase):
|
|
15
14
|
def factory(self, *args, **kwargs):
|
|
16
15
|
class Ownable(db.Document):
|
|
17
16
|
owner = db.ReferenceField(User)
|
|
@@ -194,7 +193,6 @@ class PublishFieldTest(TestCase):
|
|
|
194
193
|
self.assertIn("organization", form.errors)
|
|
195
194
|
self.assertEqual(len(form.errors["organization"]), 1)
|
|
196
195
|
|
|
197
|
-
@pytest.mark.usefixtures("clean_db")
|
|
198
196
|
def test_with_initial_and_both_member(self):
|
|
199
197
|
Ownable, OwnableForm = self.factory()
|
|
200
198
|
user = UserFactory()
|
|
@@ -1,34 +1,31 @@
|
|
|
1
|
-
import pytest
|
|
2
|
-
|
|
3
1
|
from udata.auth.forms import ExtendedRegisterForm
|
|
4
2
|
from udata.core.user.forms import UserProfileForm
|
|
3
|
+
from udata.tests.api import PytestOnlyDBTestCase
|
|
5
4
|
|
|
6
|
-
pytestmark = [pytest.mark.usefixtures("clean_db")]
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
def test_register_form_accepts_no_url():
|
|
10
|
-
form = ExtendedRegisterForm.from_json(
|
|
11
|
-
{
|
|
12
|
-
"email": "a@a.fr",
|
|
13
|
-
"password": "passpass",
|
|
14
|
-
"password_confirm": "passpass",
|
|
15
|
-
"first_name": "azeaezr http://dumdum.fr",
|
|
16
|
-
"last_name": "azeaze https://etalab.studio",
|
|
17
|
-
}
|
|
18
|
-
)
|
|
19
|
-
form.validate()
|
|
20
|
-
assert "first_name" in form.errors and "last_name" in form.errors
|
|
21
5
|
|
|
6
|
+
class UserFormsTest(PytestOnlyDBTestCase):
|
|
7
|
+
def test_register_form_accepts_no_url(self):
|
|
8
|
+
form = ExtendedRegisterForm.from_json(
|
|
9
|
+
{
|
|
10
|
+
"email": "a@a.fr",
|
|
11
|
+
"password": "passpass",
|
|
12
|
+
"password_confirm": "passpass",
|
|
13
|
+
"first_name": "azeaezr http://dumdum.fr",
|
|
14
|
+
"last_name": "azeaze https://etalab.studio",
|
|
15
|
+
}
|
|
16
|
+
)
|
|
17
|
+
form.validate()
|
|
18
|
+
assert "first_name" in form.errors and "last_name" in form.errors
|
|
22
19
|
|
|
23
|
-
def test_user_profile_form_accepts_no_url():
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
20
|
+
def test_user_profile_form_accepts_no_url(self):
|
|
21
|
+
form = UserProfileForm.from_json(
|
|
22
|
+
{
|
|
23
|
+
"email": "a@a.fr",
|
|
24
|
+
"password": "passpass",
|
|
25
|
+
"password_confirm": "passpass",
|
|
26
|
+
"first_name": "azeaezr http://dumdum.fr",
|
|
27
|
+
"last_name": "azeaze https://etalab.studio",
|
|
28
|
+
}
|
|
29
|
+
)
|
|
30
|
+
form.validate()
|
|
31
|
+
assert "first_name" in form.errors and "last_name" in form.errors
|
|
@@ -2,11 +2,10 @@ from flask import current_app, url_for
|
|
|
2
2
|
from flask_security.utils import hash_data
|
|
3
3
|
|
|
4
4
|
from udata.core.user.factories import AdminFactory
|
|
5
|
+
from udata.tests.api import APITestCase
|
|
5
6
|
|
|
6
|
-
from . import FrontTestCase
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
class AuthTest(FrontTestCase):
|
|
8
|
+
class AuthTest(APITestCase):
|
|
10
9
|
def test_change_mail(self):
|
|
11
10
|
user = self.login(AdminFactory())
|
|
12
11
|
|
udata/tests/frontend/test_csv.py
CHANGED
|
@@ -3,15 +3,15 @@ from io import StringIO
|
|
|
3
3
|
from random import randint
|
|
4
4
|
|
|
5
5
|
import factory
|
|
6
|
+
import pytest
|
|
6
7
|
from factory.mongoengine import MongoEngineFactory
|
|
7
8
|
from flask import Blueprint, url_for
|
|
8
9
|
|
|
9
10
|
from udata.core import csv
|
|
10
11
|
from udata.mongo import db
|
|
12
|
+
from udata.tests.api import APITestCase
|
|
11
13
|
from udata.utils import faker
|
|
12
14
|
|
|
13
|
-
from . import FrontTestCase
|
|
14
|
-
|
|
15
15
|
RE_ATTACHMENT = re.compile(r"^attachment; filename=(?P<filename>.*)$")
|
|
16
16
|
RE_FILENAME = re.compile(r"^(?P<basename>.*)-\d{4}-\d{2}-\d{2}-\d{2}-\d{2}\.csv$")
|
|
17
17
|
|
|
@@ -107,11 +107,10 @@ def with_basename():
|
|
|
107
107
|
return csv.stream(adapter, "test")
|
|
108
108
|
|
|
109
109
|
|
|
110
|
-
class CsvTest(
|
|
111
|
-
|
|
112
|
-
|
|
110
|
+
class CsvTest(APITestCase):
|
|
111
|
+
@pytest.fixture(autouse=True)
|
|
112
|
+
def setup_func(self, app):
|
|
113
113
|
app.register_blueprint(blueprint)
|
|
114
|
-
return app
|
|
115
114
|
|
|
116
115
|
def test_adapter_fields_as_list(self):
|
|
117
116
|
@csv.adapter(Fake)
|
|
@@ -3,11 +3,10 @@ from uuid import uuid4
|
|
|
3
3
|
from flask import url_for
|
|
4
4
|
|
|
5
5
|
from udata.i18n import _
|
|
6
|
+
from udata.tests.api import APITestCase
|
|
6
7
|
|
|
7
|
-
from . import FrontTestCase
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
class ErrorHandlersTest(FrontTestCase):
|
|
9
|
+
class ErrorHandlersTest(APITestCase):
|
|
11
10
|
def test_404_in_flask_routing_requesting_html(self):
|
|
12
11
|
"""Test that a 404 error displays the custom 404 HTML page"""
|
|
13
12
|
# Request a non-existent page
|
|
@@ -2,6 +2,7 @@ import pytest
|
|
|
2
2
|
from flask import Blueprint, render_template_string, url_for
|
|
3
3
|
|
|
4
4
|
from udata.frontend import template_hook
|
|
5
|
+
from udata.tests.api import PytestOnlyAPITestCase
|
|
5
6
|
from udata.tests.helpers import assert200
|
|
6
7
|
|
|
7
8
|
bp = Blueprint("hooks_tests", __name__, url_prefix="/hooks_tests")
|
|
@@ -92,14 +93,11 @@ def iter_conditionnal():
|
|
|
92
93
|
return render_template_string('{% for w in hook("conditionnal") %}<{{ w }}>{% endfor %}')
|
|
93
94
|
|
|
94
95
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
app
|
|
98
|
-
|
|
96
|
+
class HooksTest(PytestOnlyAPITestCase):
|
|
97
|
+
@pytest.fixture(autouse=True)
|
|
98
|
+
def setup_func(self, app):
|
|
99
|
+
app.register_blueprint(bp)
|
|
99
100
|
|
|
100
|
-
|
|
101
|
-
@pytest.mark.frontend
|
|
102
|
-
class HooksTest:
|
|
103
101
|
def test_empty_template_hook(self, client):
|
|
104
102
|
response = client.get(url_for("hooks_tests.render_empty"))
|
|
105
103
|
assert200(response)
|
|
@@ -3,6 +3,7 @@ from bleach._vendor import html5lib
|
|
|
3
3
|
from flask import render_template_string
|
|
4
4
|
|
|
5
5
|
from udata.frontend.markdown import EXCERPT_TOKEN, md, parse_html
|
|
6
|
+
from udata.tests.api import PytestOnlyAPITestCase
|
|
6
7
|
from udata.utils import faker
|
|
7
8
|
|
|
8
9
|
parser = html5lib.HTMLParser(tree=html5lib.getTreeBuilder("dom"))
|
|
@@ -38,8 +39,7 @@ def md2dom(app):
|
|
|
38
39
|
return helper
|
|
39
40
|
|
|
40
41
|
|
|
41
|
-
|
|
42
|
-
class MarkdownTest:
|
|
42
|
+
class MarkdownTest(PytestOnlyAPITestCase):
|
|
43
43
|
def test_excerpt_is_not_removed(self, app):
|
|
44
44
|
with app.test_request_context("/"):
|
|
45
45
|
assert_md_equal(md(EXCERPT_TOKEN), EXCERPT_TOKEN)
|
|
@@ -279,8 +279,7 @@ class MarkdownTest:
|
|
|
279
279
|
assert_md(text, expected)
|
|
280
280
|
|
|
281
281
|
|
|
282
|
-
|
|
283
|
-
class MdStripTest:
|
|
282
|
+
class MdStripTest(PytestOnlyAPITestCase):
|
|
284
283
|
def test_mdstrip_filter(self, app):
|
|
285
284
|
"""mdstrip should truncate the text before rendering"""
|
|
286
285
|
text = "1 2 3 4 5 6 7 8 9 0"
|
udata/tests/helpers.py
CHANGED
|
@@ -2,10 +2,10 @@ import os
|
|
|
2
2
|
from contextlib import contextmanager
|
|
3
3
|
from datetime import timedelta
|
|
4
4
|
from io import BytesIO
|
|
5
|
-
from urllib.parse import parse_qs,
|
|
5
|
+
from urllib.parse import parse_qs, urlparse
|
|
6
6
|
|
|
7
7
|
import mock
|
|
8
|
-
from flask import current_app, json
|
|
8
|
+
from flask import current_app, json
|
|
9
9
|
from flask_security.babel import FsDomain
|
|
10
10
|
from PIL import Image
|
|
11
11
|
|
|
@@ -182,11 +182,6 @@ def assert500(response):
|
|
|
182
182
|
assert_status(response, 500)
|
|
183
183
|
|
|
184
184
|
|
|
185
|
-
def full_url(*args, **kwargs):
|
|
186
|
-
"""Build a full URL"""
|
|
187
|
-
return urljoin(request.url_root, url_for(*args, **kwargs))
|
|
188
|
-
|
|
189
|
-
|
|
190
185
|
def data_path(filename):
|
|
191
186
|
"""Get a test data path"""
|
|
192
187
|
return os.path.join(os.path.dirname(__file__), "data", filename)
|
|
@@ -9,59 +9,63 @@ from udata.core.metrics.helpers import get_metrics_for_model, get_stock_metrics
|
|
|
9
9
|
from udata.core.organization.factories import OrganizationFactory
|
|
10
10
|
from udata.core.reuse.factories import ReuseFactory
|
|
11
11
|
from udata.models import Dataset, Organization, Reuse
|
|
12
|
+
from udata.tests.api import PytestOnlyDBTestCase
|
|
12
13
|
|
|
13
14
|
from .helpers import mock_monthly_metrics_payload
|
|
14
15
|
|
|
15
16
|
|
|
16
|
-
@pytest.mark.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
)
|
|
25
|
-
|
|
26
|
-
mock_monthly_metrics_payload(
|
|
27
|
-
app, rmock, target, data=[(value_key, 2403) for value_key in value_keys]
|
|
17
|
+
@pytest.mark.options(METRICS_API="http://metrics-api.fr/api")
|
|
18
|
+
class GetStockMetricsTest(PytestOnlyDBTestCase):
|
|
19
|
+
@pytest.mark.parametrize(
|
|
20
|
+
"target,value_keys",
|
|
21
|
+
[
|
|
22
|
+
("dataset", ["visit", "download_resource"]),
|
|
23
|
+
("dataservice", ["visit"]),
|
|
24
|
+
("reuse", ["visit"]),
|
|
25
|
+
("organization", ["visit_dataset", "download_resource", "visit_reuse"]),
|
|
26
|
+
],
|
|
28
27
|
)
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
def test_get_metrics_for_model(self, app, rmock, target, value_keys):
|
|
29
|
+
mock_monthly_metrics_payload(
|
|
30
|
+
app, rmock, target, data=[(value_key, 2403) for value_key in value_keys]
|
|
31
|
+
)
|
|
32
|
+
res = get_metrics_for_model(target, "id", value_keys)
|
|
33
|
+
for i, key in enumerate(value_keys):
|
|
34
|
+
assert len(res[i]) == 13 # The current month as well as last year's are included
|
|
35
|
+
assert list(res[i].values())[-1] == len(key) * 2403 + 1
|
|
36
|
+
assert list(res[i].values())[-2] == len(key) * 2403
|
|
34
37
|
|
|
38
|
+
def test_get_metrics_for_site(self, app, rmock):
|
|
39
|
+
value_keys = [
|
|
40
|
+
"visit_dataset",
|
|
41
|
+
"download_resource",
|
|
42
|
+
]
|
|
43
|
+
url = f"{app.config['METRICS_API']}/site/data/?metric_month__sort=desc"
|
|
44
|
+
mock_monthly_metrics_payload(
|
|
45
|
+
app, rmock, "site", data=[(value_key, 2403) for value_key in value_keys], url=url
|
|
46
|
+
)
|
|
47
|
+
res = get_metrics_for_model("site", None, value_keys)
|
|
48
|
+
for i, key in enumerate(value_keys):
|
|
49
|
+
assert len(res[i]) == 13 # The current month as well as last year's are included
|
|
50
|
+
assert list(res[i].values())[-1] == len(key) * 2403 + 1
|
|
51
|
+
assert list(res[i].values())[-2] == len(key) * 2403
|
|
35
52
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
53
|
+
@pytest.mark.parametrize(
|
|
54
|
+
"model,factory,date_label",
|
|
55
|
+
[
|
|
56
|
+
(Dataset, DatasetFactory, "created_at_internal"),
|
|
57
|
+
(Dataservice, DataserviceFactory, "created_at"),
|
|
58
|
+
(Reuse, ReuseFactory, "created_at"),
|
|
59
|
+
(Organization, OrganizationFactory, "created_at"),
|
|
60
|
+
],
|
|
44
61
|
)
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
(Dataset, DatasetFactory, "created_at_internal"),
|
|
56
|
-
(Dataservice, DataserviceFactory, "created_at"),
|
|
57
|
-
(Reuse, ReuseFactory, "created_at"),
|
|
58
|
-
(Organization, OrganizationFactory, "created_at"),
|
|
59
|
-
],
|
|
60
|
-
)
|
|
61
|
-
def test_get_stock_metrics(app, clean_db, model, factory, date_label):
|
|
62
|
-
[factory() for i in range(10)]
|
|
63
|
-
[factory(**{date_label: datetime.now().replace(day=1) - timedelta(days=1)}) for i in range(8)]
|
|
64
|
-
res = get_stock_metrics(model.objects(), date_label)
|
|
65
|
-
assert list(res.values())[-1] == 10
|
|
66
|
-
assert list(res.values())[-2] == 8
|
|
67
|
-
assert list(res.values())[-3] == 0
|
|
62
|
+
def test_get_stock_metrics(self, model, factory, date_label):
|
|
63
|
+
[factory() for i in range(10)]
|
|
64
|
+
[
|
|
65
|
+
factory(**{date_label: datetime.now().replace(day=1) - timedelta(days=1)})
|
|
66
|
+
for i in range(8)
|
|
67
|
+
]
|
|
68
|
+
res = get_stock_metrics(model.objects(), date_label)
|
|
69
|
+
assert list(res.values())[-1] == 10
|
|
70
|
+
assert list(res.values())[-2] == 8
|
|
71
|
+
assert list(res.values())[-3] == 0
|