Projet

Général

Profil

0006-fields-prefill-phone-value-69838.patch

Paul Marillonnet, 16 novembre 2022 13:50

Télécharger (8,22 ko)

Voir les différences:

Subject: [PATCH 6/8] fields: prefill phone value (#69838)

 tests/form_pages/test_all.py | 77 ++++++++++++++++++++++++++++++++++++
 tests/test_prefill.py        | 48 +++++++++++++++++++++-
 wcs/fields.py                | 10 +++++
 3 files changed, 134 insertions(+), 1 deletion(-)
tests/form_pages/test_all.py
107 107
    user = pub.user_class()
108 108
    user.name = 'User Name'
109 109
    user.email = 'foo@localhost'
110
    user.phone = '+33123456789'
110 111
    user.store()
111 112
    account = PasswordAccount(id='foo')
112 113
    account.set_password('foo')
......
2064 2065
    resp = app.get('/code/%s/load' % tracking_code, headers={'User-agent': 'Googlebot'}, status=403)
2065 2066

  
2066 2067

  
2068
def test_form_phone_prefill(pub, nocache):
2069
    create_user(pub)
2070
    formdef = create_formdef()
2071
    formdef.data_class().wipe()
2072
    formdef.fields = [fields.StringField(id='0', label='string', prefill={'type': 'user', 'value': 'phone'})]
2073
    formdef.store()
2074

  
2075
    resp = login(get_app(pub), username='foo', password='foo').get('/test/')
2076
    assert resp.pyquery('input#form_f0').val() == '+33123456789'
2077
    resp.forms[0]['f0'] = '+33987654321'
2078
    resp = resp.forms[0].submit('submit')
2079
    assert resp.pyquery('button.form-submit').val() == 'Submit'
2080

  
2081

  
2082
def test_form_phone_prefill_phone_fr_validation(pub, nocache):
2083
    create_user(pub)
2084
    pub.load_site_options()
2085
    if not pub.site_options.has_section('options'):
2086
        pub.site_options.add_section('options')
2087
    pub.site_options.set('options', 'default-country-code', 'FR')
2088
    with open(os.path.join(pub.app_dir, 'site-options.cfg'), 'w') as fd:
2089
        pub.site_options.write(fd)
2090
    formdef = create_formdef()
2091
    formdef.data_class().wipe()
2092
    field = fields.StringField(id='0', label='string', prefill={'type': 'user', 'value': 'phone'})
2093
    field.validation = {'type': 'phone-fr'}
2094
    formdef.fields = [field]
2095
    formdef.store()
2096

  
2097
    resp = login(get_app(pub), username='foo', password='foo').get('/test/')
2098
    assert resp.pyquery('input#form_f0').val() == '01 23 45 67 89'
2099
    resp.forms[0]['f0'] = '0987654321'
2100
    resp = resp.forms[0].submit('submit')
2101
    assert resp.pyquery('button.form-submit').val() == 'Submit'
2102

  
2103

  
2104
def test_form_phone_prefill_phone_validation(pub, nocache):
2105
    user = create_user(pub)
2106
    pub.load_site_options()
2107
    if not pub.site_options.has_section('options'):
2108
        pub.site_options.add_section('options')
2109
    pub.site_options.set('options', 'default-country-code', 'BE')
2110
    with open(os.path.join(pub.app_dir, 'site-options.cfg'), 'w') as fd:
2111
        pub.site_options.write(fd)
2112
    formdef = create_formdef()
2113
    formdef.data_class().wipe()
2114
    field = fields.StringField(id='0', label='string', prefill={'type': 'user', 'value': 'phone'})
2115
    field.validation = {'type': 'phone'}
2116
    formdef.fields = [field]
2117
    formdef.store()
2118

  
2119
    resp = login(get_app(pub), username='foo', password='foo').get('/test/')
2120
    assert resp.pyquery('input#form_f0').val() == '01 23 45 67 89'
2121
    resp.forms[0]['f0'] = '0987654321'
2122
    resp = resp.forms[0].submit('submit')
2123
    assert resp.pyquery('button.form-submit').val() == 'Submit'
2124

  
2125
    user.phone = '+3281000000'
2126
    user.store()
2127

  
2128
    resp = login(get_app(pub), username='foo', password='foo').get('/test/')
2129
    assert resp.pyquery('input#form_f0').val() == '081 00 00 00'
2130
    resp.forms[0]['f0'] = '0987654321'
2131
    resp = resp.forms[0].submit('submit')
2132
    assert resp.pyquery('button.form-submit').val() == 'Submit'
2133

  
2134
    user.phone = '+99981000000'
2135
    user.store()
2136

  
2137
    resp = login(get_app(pub), username='foo', password='foo').get('/test/')
2138
    assert resp.pyquery('input#form_f0').val() == '+99981000000'
2139
    resp.forms[0]['f0'] = '0987654321'
2140
    resp = resp.forms[0].submit('submit')
2141
    assert resp.pyquery('button.form-submit').val() == 'Submit'
2142

  
2143

  
2067 2144
def test_form_tracking_code_prefill(pub, nocache):
2068 2145
    create_user(pub)
2069 2146
    formdef = create_formdef()
tests/test_prefill.py
1 1
import datetime
2
import os
2 3
import shutil
3 4

  
4 5
import pytest
......
20 21

  
21 22
    req = HTTPRequest(None, {'SCRIPT_NAME': '/', 'SERVER_NAME': 'example.net'})
22 23
    pub._set_request(req)
24
    pub.write_cfg()
23 25

  
24 26

  
25 27
@pytest.fixture
......
27 29
    pub.user_class.wipe()
28 30
    user = pub.user_class(name='user')
29 31
    user.email = 'test@example.net'
32
    user.phone = '+33123456789'
30 33
    user.store()
31 34
    get_request()._user = user
32 35
    return user
......
66 69
    assert field.get_prefill_value() == ('{{cards|objects:"unknown"|first|get:"foo"}}', False)
67 70

  
68 71

  
69
def test_prefill_user(user):
72
def test_prefill_user_email(user):
70 73
    field = fields.Field()
71 74
    field.prefill = {'type': 'user', 'value': 'email'}
72 75
    assert field.get_prefill_value(user=get_request().user) == ('test@example.net', False)
73 76

  
74 77

  
78
def test_prefill_user_phone(user):
79
    field = fields.Field()
80
    field.prefill = {'type': 'user', 'value': 'phone'}
81
    assert field.get_prefill_value(user=get_request().user) == ('+33123456789', False)
82

  
83

  
84
def test_prefill_user_phone_fr_validation(user):
85
    pub.load_site_options()
86
    if not pub.site_options.has_section('options'):
87
        pub.site_options.add_section('options')
88
    pub.site_options.set('options', 'default-country-code', 'FR')
89
    with open(os.path.join(pub.app_dir, 'site-options.cfg'), 'w') as fd:
90
        pub.site_options.write(fd)
91
    field = fields.Field()
92
    field.validation = {'type': 'phone-fr'}
93
    field.prefill = {'type': 'user', 'value': 'phone'}
94
    assert field.get_prefill_value(user=get_request().user) == ('01 23 45 67 89', False)
95

  
96

  
97
def test_prefill_user_phone_validation(user):
98
    pub.load_site_options()
99
    if not pub.site_options.has_section('options'):
100
        pub.site_options.add_section('options')
101
    pub.site_options.set('options', 'default-country-code', 'BE')
102
    with open(os.path.join(pub.app_dir, 'site-options.cfg'), 'w') as fd:
103
        pub.site_options.write(fd)
104
    field = fields.Field()
105
    field.validation = {'type': 'phone'}
106
    field.prefill = {'type': 'user', 'value': 'phone'}
107
    assert field.get_prefill_value(user=get_request().user) == ('01 23 45 67 89', False)
108

  
109
    user = get_request().user
110
    user.phone = '+3281000000'
111
    user.store()
112

  
113
    assert field.get_prefill_value(user=get_request().user) == ('081 00 00 00', False)
114

  
115
    user.phone = '+99981000000'
116
    user.store()
117

  
118
    assert field.get_prefill_value(user=get_request().user) == ('+99981000000', False)
119

  
120

  
75 121
def test_prefill_user_attribute(user):
76 122
    from wcs.admin.settings import UserFieldsFormDef
77 123

  
wcs/fields.py
83 83
    get_as_datetime,
84 84
    get_document_type_value_options,
85 85
    get_document_types,
86
    get_local_number,
86 87
    strftime,
87 88
    strip_some_tags,
88 89
    xml_node_text,
......
539 540
            x = self.prefill.get('value')
540 541
            if x == 'email':
541 542
                return (user.email, explicit_lock or 'email' in (user.verified_fields or []))
543
            elif x == 'phone':
544
                phone = user.phone
545
                if hasattr(self, 'validation'):
546
                    validation_type = self.validation.get('type', None)
547
                    if validation_type == 'phone-fr':
548
                        phone = get_local_number(user.phone, country_code='FR') or user.phone
549
                    elif validation_type == 'phone':
550
                        phone = get_local_number(user.phone) or user.phone
551
                return (phone, explicit_lock or 'phone' in (user.verified_fields or []))
542 552
            elif user.form_data:
543 553
                userform = user.get_formdef()
544 554
                for userfield in userform.fields:
545
-