api: add custom view support to geojson API (#42850)

This commit is contained in:
Frédéric Péters 2020-05-13 18:33:52 +02:00
parent 9988c32906
commit 8d3e067c83
2 changed files with 49 additions and 1 deletions

View File

@ -2139,6 +2139,54 @@ def test_api_ods_formdata_custom_view(pub, local_user):
assert len(ods_sheet.findall('.//{%s}table-row' % ods.NS['table'])) == 21
def test_api_geojson_formdata_custom_view(pub, local_user):
Role.wipe()
role = Role(name='test')
role.store()
FormDef.wipe()
formdef = FormDef()
formdef.name = 'test'
formdef.workflow_roles = {'_receiver': role.id}
formdef.fields = [fields.StringField(id='0', label='foobar', varname='foobar'),]
formdef.geolocations = {'base': 'Location'}
formdef.store()
data_class = formdef.data_class()
data_class.wipe()
for i in range(30):
formdata = data_class()
formdata.data = {'0': 'FOO BAR %d' % i}
formdata.geolocations = {'base': {'lat': 48, 'lon': 2}}
formdata.user_id = local_user.id
formdata.just_created()
if i % 3 == 0:
formdata.jump_status('new')
else:
formdata.jump_status('finished')
formdata.store()
# add proper role to user
local_user.roles = [role.id]
local_user.store()
# check it now gets the data
resp = get_app(pub).get(sign_uri('/api/forms/test/geojson', user=local_user))
assert len(resp.json['features']) == 10
custom_view = pub.custom_view_class()
custom_view.title = 'custom view'
custom_view.formdef = formdef
custom_view.columns = {'list': [{'id': '0'}]}
custom_view.filters = {"filter": "done", "filter-status": "on"}
custom_view.visibility = 'any'
custom_view.store()
resp = get_app(pub).get(sign_uri('/api/forms/test/geojson/custom-view', user=local_user))
assert len(resp.json['features']) == 20
def test_api_global_geojson(pub, local_user):
Role.wipe()
role = Role(name='test')

View File

@ -203,7 +203,7 @@ class ApiFormPage(BackofficeFormPage):
return ApiFormdataPage(self.formdef, formdata)
def _q_traverse(self, path):
for mode in ('list', 'ods'):
for mode in ('list', 'ods', 'geojson'):
if len(path) == 2 and path[0] == mode:
if path[1] == '':
path = [mode] # default view, with trailing slash