workflows: add support for date fields to update profile action (#22578)

This commit is contained in:
Frédéric Péters 2018-03-20 08:30:09 +01:00
parent 849217f9f7
commit 5c37cdf39a
2 changed files with 23 additions and 10 deletions

View File

@ -2821,8 +2821,9 @@ def test_global_timeouts(pub):
assert formdef.data_class().get(formdata1.id).get_criticality_level_object().name == 'green'
formdata1.store()
def test_profile(pub):
user = pub.user_class()
def test_profile(two_pubs):
User = two_pubs.user_class
user = User()
user.store()
formdef = FormDef()
@ -2839,28 +2840,37 @@ def test_profile(pub):
item = UpdateUserProfileStatusItem()
item.fields = [{'field_id': '__email', 'value': '=form_var_foo'}]
item.perform(formdata)
assert pub.user_class.get(user.id).email == 'bar@localhost'
assert User.get(user.id).email == 'bar@localhost'
formdata.data = {'1': 'Plop'}
item.fields = [{'field_id': '__name', 'value': '=form_var_foo'}]
item.perform(formdata)
assert pub.user_class.get(user.id).name == 'Plop'
assert User.get(user.id).name == 'Plop'
item.fields = [{'field_id': '__name', 'value': 'dj{{form_var_foo}}'}]
item.perform(formdata)
assert pub.user_class.get(user.id).name == 'djPlop'
assert User.get(user.id).name == 'djPlop'
item.fields = [{'field_id': '__name', 'value': 'ezt[form_var_foo]'}]
item.perform(formdata)
assert pub.user_class.get(user.id).name == 'eztPlop'
assert User.get(user.id).name == 'eztPlop'
from wcs.admin.settings import UserFieldsFormDef
formdef = UserFieldsFormDef(pub)
formdef.fields = [StringField(id='3', label='test', type='string', varname='plop')]
formdef = UserFieldsFormDef(two_pubs)
formdef.fields = [
StringField(id='3', label='test', type='string', varname='plop'),
DateField(id='4', label='Date', type='date', varname='bar'),
]
formdef.store()
item.fields = [{'field_id': 'plop', 'value': '=form_var_foo'}]
item.perform(formdata)
assert pub.user_class.get(user.id).form_data == {'3': 'Plop'}
assert User.get(user.id).form_data.get('3') == 'Plop'
assert not User.get(user.id).form_data.get('4')
item.fields = [{'field_id': 'bar', 'value': '20/03/2018'}]
item.perform(formdata)
assert User.get(user.id).form_data.get('3') == 'Plop'
assert User.get(user.id).form_data.get('4').tm_year == 2018
def test_set_backoffice_field(http_requests, two_pubs):
Workflow.wipe()

View File

@ -152,7 +152,10 @@ class UpdateUserProfileStatusItem(WorkflowStatusItem):
new_user_data = {}
for field in user_formdef.fields:
if field.varname in new_data:
new_user_data[field.id] = new_data.get(field.varname)
field_value = new_data.get(field.varname)
if field and field_value and field.convert_value_from_anything:
field_value = field.convert_value_from_anything(field_value)
new_user_data[field.id] = field_value
if '__name' in new_data:
user.name = new_data.get('__name')