0001-general-support-prefilling-with-verified-profile-fie.patch
tests/test_form_pages.py | ||
---|---|---|
1387 | 1387 |
assert 'widget-prefilled' in resp.body |
1388 | 1388 |
assert not 'Value has been automatically prefilled.' in resp.body |
1389 | 1389 | |
1390 |
def test_form_page_profile_prefill(pub): |
|
1391 |
user = create_user(pub) |
|
1392 |
formdef = create_formdef() |
|
1393 |
formdef.data_class().wipe() |
|
1394 |
formdef.fields = [fields.StringField(id='0', label='string', |
|
1395 |
prefill={'type': 'user', 'value': 'email'})] |
|
1396 |
formdef.store() |
|
1397 | ||
1398 |
resp = get_app(pub).get('/test/') |
|
1399 |
assert resp.forms[0]['f0'].value == '' |
|
1400 | ||
1401 |
resp = login(get_app(pub), username='foo', password='foo').get('/test/') |
|
1402 |
assert resp.forms[0]['f0'].value == 'foo@localhost' |
|
1403 | ||
1390 | 1404 |
def test_form_page_formula_prefill(pub): |
1391 | 1405 |
user = create_user(pub) |
1392 | 1406 |
formdef = create_formdef() |
... | ... | |
2890 | 2904 |
assert resp.headers['Set-Cookie'].startswith('wcs-') |
2891 | 2905 |
assert 'httponly' in resp.headers['Set-Cookie'] |
2892 | 2906 |
assert 'secure' in resp.headers['Set-Cookie'] |
2907 | ||
2908 |
def test_form_page_profile_verified_prefill(pub): |
|
2909 |
user = create_user(pub) |
|
2910 |
formdef = create_formdef() |
|
2911 |
formdef.data_class().wipe() |
|
2912 |
formdef.fields = [fields.StringField(id='0', label='string', |
|
2913 |
prefill={'type': 'user', 'value': 'email'})] |
|
2914 |
formdef.store() |
|
2915 | ||
2916 |
resp = get_app(pub).get('/test/') |
|
2917 |
assert resp.form['f0'].value == '' |
|
2918 | ||
2919 |
resp = login(get_app(pub), username='foo', password='foo').get('/test/') |
|
2920 |
assert resp.form['f0'].value == 'foo@localhost' |
|
2921 |
assert not 'readonly' in resp.form['f0'].attrs |
|
2922 |
resp.form['f0'].value = 'Hello' |
|
2923 |
resp = resp.form.submit('submit') |
|
2924 |
assert 'Check values then click submit.' in resp.body |
|
2925 |
assert resp.form['f0'].value == 'Hello' |
|
2926 | ||
2927 |
user.verified_fields = ['email'] |
|
2928 |
user.store() |
|
2929 | ||
2930 |
resp = login(get_app(pub), username='foo', password='foo').get('/test/') |
|
2931 |
assert resp.form['f0'].value == 'foo@localhost' |
|
2932 |
assert 'readonly' in resp.form['f0'].attrs |
|
2933 | ||
2934 |
resp.form['f0'].value = 'Hello' # try changing the value |
|
2935 |
resp = resp.form.submit('submit') |
|
2936 |
assert 'Check values then click submit.' in resp.body |
|
2937 |
assert resp.form['f0'].value == 'foo@localhost' # it is reverted |
|
2938 | ||
2939 |
resp.form['f0'].value = 'Hello' # try again changing the value |
|
2940 |
resp = resp.form.submit('submit') |
|
2941 | ||
2942 |
assert formdef.data_class().count() == 1 |
|
2943 |
assert formdef.data_class().select()[0].data['0'] == 'foo@localhost' |
|
2944 | ||
2945 |
resp = login(get_app(pub), username='foo', password='foo').get('/test/') |
|
2946 |
assert resp.form['f0'].value == 'foo@localhost' |
|
2947 |
resp = resp.form.submit('submit') |
|
2948 |
assert 'Check values then click submit.' in resp.body |
|
2949 |
resp.form['f0'].value = 'Hello' # try changing |
|
2950 |
resp = resp.form.submit('previous') |
|
2951 |
assert 'readonly' in resp.form['f0'].attrs |
|
2952 |
assert not 'Check values then click submit.' in resp.body |
|
2953 |
assert resp.form['f0'].value == 'foo@localhost' |
tests/test_prefill.py | ||
---|---|---|
1 | 1 |
import sys |
2 | 2 |
import shutil |
3 | 3 | |
4 |
import pytest |
|
5 | ||
4 | 6 |
from quixote import cleanup, get_request |
5 | 7 |
from wcs.qommon.http_request import HTTPRequest |
6 | 8 |
from wcs import fields |
... | ... | |
17 | 19 |
req = HTTPRequest(None, {}) |
18 | 20 |
pub._set_request(req) |
19 | 21 | |
22 |
@pytest.fixture |
|
23 |
def user(request): |
|
24 |
pub.user_class.wipe() |
|
20 | 25 |
user = pub.user_class(name='user') |
21 | 26 |
user.id = 'user' |
22 | 27 |
user.email = 'test@example.net' |
23 | ||
24 |
req._user = user |
|
25 | ||
28 |
get_request()._user = user |
|
29 |
return user |
|
26 | 30 | |
27 | 31 |
def teardown_module(module): |
28 | 32 |
shutil.rmtree(pub.APP_DIR) |
... | ... | |
31 | 35 |
def test_prefill_string(): |
32 | 36 |
field = fields.Field() |
33 | 37 |
field.prefill = {'type': 'string', 'value': 'test'} |
38 |
assert field.get_prefill_value() == ('test', False) |
|
34 | 39 | |
35 |
assert field.get_prefill_value() == 'test' |
|
40 |
def test_prefill_user(user): |
|
41 |
field = fields.Field() |
|
42 |
field.prefill = {'type': 'user', 'value': 'email'} |
|
43 |
assert field.get_prefill_value(user=get_request().user) == ('test@example.net', False) |
|
36 | 44 | |
45 |
def test_prefill_user_attribute(user): |
|
46 |
from wcs.admin.settings import UserFieldsFormDef |
|
47 |
formdef = UserFieldsFormDef(pub) |
|
48 |
formdef.fields = [fields.StringField(id='3', label='test', type='string', varname='plop')] |
|
49 |
formdef.store() |
|
37 | 50 | |
38 |
def test_prefill_user(): |
|
39 | 51 |
field = fields.Field() |
40 |
field.prefill = {'type': 'user', 'value': 'email'} |
|
52 |
field.prefill = {'type': 'user', 'value': '3'} |
|
53 |
assert field.get_prefill_value(user=get_request().user) == (None, False) |
|
41 | 54 | |
42 |
assert field.get_prefill_value(user=get_request().user) == 'test@example.net' |
|
55 |
user.form_data = {'3': 'Plop'} |
|
56 |
user.store() |
|
57 |
assert field.get_prefill_value(user=get_request().user) == ('Plop', False) |
|
43 | 58 | |
59 |
def test_prefill_verified_user_attribute(user): |
|
60 |
from wcs.admin.settings import UserFieldsFormDef |
|
61 |
formdef = UserFieldsFormDef(pub) |
|
62 |
formdef.fields = [fields.StringField(id='3', label='test', type='string', varname='plop')] |
|
63 |
formdef.store() |
|
44 | 64 | |
45 |
def test_prefill_formula(): |
|
46 | 65 |
field = fields.Field() |
47 |
field.prefill = {'type': 'formula', 'value': 'str(2+5)'} |
|
66 |
field.prefill = {'type': 'user', 'value': '3'} |
|
67 |
assert field.get_prefill_value(user=get_request().user) == (None, False) |
|
48 | 68 | |
49 |
assert field.get_prefill_value() == '7' |
|
69 |
user.form_data = {'3': 'Plop'} |
|
70 |
user.verified_fields = ['3'] |
|
71 |
user.store() |
|
72 |
assert field.get_prefill_value(user=get_request().user) == ('Plop', True) |
|
50 | 73 | |
74 |
def test_prefill_formula(): |
|
75 |
field = fields.Field() |
|
76 |
field.prefill = {'type': 'formula', 'value': 'str(2+5)'} |
|
77 |
assert field.get_prefill_value() == ('7', False) |
|
51 | 78 | |
52 | 79 |
def test_prefill_formula_with_error(): |
53 | 80 |
field = fields.Field() |
54 | 81 |
field.prefill = {'type': 'formula', 'value': 'foobar'} |
82 |
assert field.get_prefill_value() == (None, False) |
|
55 | 83 | |
56 |
assert field.get_prefill_value() is None |
|
57 | ||
58 | ||
59 |
def test_prefill_formula_substition_variable(): |
|
84 |
def test_prefill_formula_substitution_variable(): |
|
60 | 85 |
pub.substitutions.get_context_variables = lambda: {'test': 'value'} |
61 | 86 |
field = fields.Field() |
62 | 87 |
field.prefill = {'type': 'formula', 'value': 'test'} |
63 | ||
64 |
assert field.get_prefill_value() == 'value' |
|
88 |
assert field.get_prefill_value() == ('value', False) |
wcs/fields.py | ||
---|---|---|
281 | 281 |
elif t == 'user' and user: |
282 | 282 |
x = self.prefill.get('value') |
283 | 283 |
if x == 'email': |
284 |
return (user.email, False)
|
|
284 |
return (user.email, 'email' in (user.verified_fields or []))
|
|
285 | 285 |
elif user.form_data: |
286 | 286 |
userform = user.get_formdef() |
287 | 287 |
for userfield in userform.fields: |
288 | 288 |
if userfield.id == x: |
289 | 289 |
return (user.form_data.get(x), |
290 |
str(userfield.id) in user.verified_fields or [])
|
|
290 |
str(userfield.id) in (user.verified_fields or []))
|
|
291 | 291 | |
292 | 292 |
elif t == 'formula': |
293 | 293 |
formula = self.prefill.get('value') |
... | ... | |
301 | 301 |
pass |
302 | 302 | |
303 | 303 |
elif t == 'geolocation': |
304 |
return (None, None)
|
|
304 |
return (None, False)
|
|
305 | 305 | |
306 |
return (None, None)
|
|
306 |
return (None, False)
|
|
307 | 307 | |
308 | 308 |
def get_prefill_attributes(self): |
309 | 309 |
t = self.prefill.get('type') |
wcs/users.py | ||
---|---|---|
33 | 33 |
anonymous = False |
34 | 34 |
form_data = None # dumping ground for custom fields |
35 | 35 | |
36 |
certified_fields = None
|
|
36 |
verified_fields = None
|
|
37 | 37 |
name_identifiers = None |
38 | 38 |
lasso_dump = None |
39 | 39 | |
40 |
- |