misc: enable live changes on geojson data sources (#51943)
This commit is contained in:
parent
16d50764c8
commit
a8abf764f9
|
@ -7184,6 +7184,57 @@ def test_field_live_select_content(pub, http_requests):
|
|||
assert formdata.data['3'] == 'a'
|
||||
assert formdata.data['3_display'] == 'b'
|
||||
|
||||
# create and use geojson datasource
|
||||
NamedDataSource.wipe()
|
||||
data_source = NamedDataSource(name='geofoobar')
|
||||
data_source.data_source = {
|
||||
'type': 'geojson',
|
||||
'value': 'http://remote.example.net/geojson?plop={{form_var_bar2}}',
|
||||
}
|
||||
data_source.id_property = 'id'
|
||||
data_source.label_template_property = '{{ text }}'
|
||||
data_source.cache_duration = '5'
|
||||
data_source.store()
|
||||
formdef.fields[2].data_source = {'type': 'geofoobar'}
|
||||
formdef.store()
|
||||
formdef.data_class().wipe()
|
||||
|
||||
app = get_app(pub)
|
||||
resp = app.get('/foo/')
|
||||
assert 'f1' in resp.form.fields
|
||||
assert 'f2' in resp.form.fields
|
||||
assert resp.html.find('div', {'data-field-id': '2'}).attrs['data-live-source'] == 'true'
|
||||
assert resp.html.find('div', {'data-field-id': '3'}).find('select')
|
||||
resp.form['f1'] = 'hello'
|
||||
live_resp = app.post('/foo/live', params=resp.form.submit_fields())
|
||||
assert live_resp.json['result']['1']['visible']
|
||||
assert live_resp.json['result']['2']['visible']
|
||||
assert live_resp.json['result']['3']['visible']
|
||||
assert not 'items' in live_resp.json['result']['3']
|
||||
resp.form['f2'] = 'plop'
|
||||
live_resp = app.post('/foo/live?modified_field_id=2', params=resp.form.submit_fields())
|
||||
assert live_resp.json['result']['1']['visible']
|
||||
assert live_resp.json['result']['2']['visible']
|
||||
assert live_resp.json['result']['3']['visible']
|
||||
assert 'items' in live_resp.json['result']['3']
|
||||
resp.form['f3'].options = []
|
||||
for item in live_resp.json['result']['3']['items']:
|
||||
# simulate javascript filling the <select>
|
||||
resp.form['f3'].options.append((item['id'], False, item['text']))
|
||||
resp.form['f3'] = '1'
|
||||
resp = resp.form.submit('submit')
|
||||
assert 'Check values then click submit.' in resp.text
|
||||
assert 'name="f1"' in resp.text
|
||||
assert 'name="f2"' in resp.text
|
||||
assert 'name="f3"' in resp.text
|
||||
resp = resp.form.submit('submit')
|
||||
resp = resp.follow()
|
||||
formdata = formdef.data_class().select()[0]
|
||||
assert formdata.data['1'] == 'hello'
|
||||
assert formdata.data['2'] == 'plop'
|
||||
assert formdata.data['3'] == '1'
|
||||
assert formdata.data['3_display'] == 'foo'
|
||||
|
||||
|
||||
def test_field_live_select_content_on_workflow_form(pub, http_requests):
|
||||
create_user(pub)
|
||||
|
|
|
@ -756,7 +756,7 @@ class NamedDataSource(XmlStorableObject):
|
|||
def get_referenced_varnames(self, formdef):
|
||||
from .fields import Field
|
||||
|
||||
if self.type == 'json':
|
||||
if self.type in ('json', 'geojson'):
|
||||
return Field.get_referenced_varnames(formdef, self.data_source.get('value'))
|
||||
# else: carddef
|
||||
assert self.type.startswith('carddef:'), 'data source must be carddef'
|
||||
|
|
|
@ -742,7 +742,9 @@ class FormDef(StorableObject):
|
|||
live_condition_fields[varname].append(field)
|
||||
if field.key == 'item' and field.data_source:
|
||||
data_source = data_sources.get_object(field.data_source)
|
||||
if data_source.type != 'json' and not data_source.type.startswith('carddef:'):
|
||||
if data_source.type not in ('json', 'geojson') and not data_source.type.startswith(
|
||||
'carddef:'
|
||||
):
|
||||
continue
|
||||
varnames = data_source.get_referenced_varnames(formdef=self)
|
||||
for varname in varnames:
|
||||
|
|
|
@ -726,7 +726,9 @@ class FormStatusPage(Directory, FormTemplateMixin):
|
|||
for field in displayed_fields:
|
||||
if field.key == 'item' and field.data_source:
|
||||
data_source = data_sources.get_object(field.data_source)
|
||||
if data_source.type != 'json' and not data_source.type.startswith('carddef:'):
|
||||
if data_source.type not in ('json', 'geojson') and not data_source.type.startswith(
|
||||
'carddef:'
|
||||
):
|
||||
continue
|
||||
varnames = data_source.get_referenced_varnames(field.formdef)
|
||||
if (not modified_field_varnames or modified_field_varnames.intersection(varnames)) and (
|
||||
|
|
Loading…
Reference in New Issue