Projet

Général

Profil

0002-custom_user-perform-implicit-writes-on-redundant-pho.patch

Paul Marillonnet, 19 septembre 2022 15:21

Télécharger (4,63 ko)

Voir les différences:

Subject: [PATCH 2/2] custom_user: perform implicit writes on redundant phone
 fields (#65173)

 src/authentic2/custom_user/models.py | 12 +++++--
 tests/test_user_model.py             | 53 ++++++++++++++++++++++++++++
 2 files changed, 63 insertions(+), 2 deletions(-)
src/authentic2/custom_user/models.py
95 95
                )
96 96

  
97 97
            update_fields = ['modified']
98
            if name in ['first_name', 'last_name']:
98
            if name in ['first_name', 'last_name', 'phone']:
99 99
                if getattr(self.owner, name) != value:
100 100
                    setattr(self.owner, name, value)
101 101
                    update_fields.append(name)
......
362 362
    def save(self, *args, **kwargs):
363 363
        update_fields = kwargs.get('update_fields')
364 364
        super().save(*args, **kwargs)
365
        if not update_fields or not set(update_fields).isdisjoint({'first_name', 'last_name'}):
365
        if not update_fields or not set(update_fields).isdisjoint({'first_name', 'last_name', 'phone'}):
366 366
            try:
367 367
                self.attributes.first_name
368 368
            except AttributeError:
......
378 378
                if self.attributes.last_name != self.last_name:
379 379
                    self.attributes.last_name = self.last_name
380 380

  
381
            try:
382
                self.attributes.phone
383
            except AttributeError:
384
                pass
385
            else:
386
                if self.attributes.phone != self.phone:
387
                    self.attributes.phone = self.phone
388

  
381 389
    def can_change_password(self):
382 390
        return True
383 391

  
tests/test_user_model.py
89 89
    assert user.attributes.first_name == 'John Paul'
90 90

  
91 91

  
92
def test_sync_phone(db, settings):
93
    Attribute.objects.get_or_create(name='phone', defaults={'label': 'Phone', 'kind': 'phone_number'})
94

  
95
    user = User(username='john.doe', email='john.doe2@example.net')
96
    user.save()
97
    user.phone = '+33123456789'
98
    user.save()
99
    assert user.attributes.phone == '+33123456789'
100

  
101
    user.attributes.phone = '+43876543210'
102
    assert user.attributes.phone == '+43876543210'
103

  
104

  
92 105
def test_save_does_not_reset_verified_attributes_first_name(db):
93 106
    user = User.objects.create()
94 107
    user.verified_attributes.first_name = 'John'
......
167 180
    assert user.attributes.last_name == 'John'
168 181

  
169 182

  
183
def test_save_does_not_reset_verified_attributes_phone(db):
184
    Attribute.objects.get_or_create(name='phone', defaults={'label': 'Phone', 'kind': 'phone_number'})
185
    user = User.objects.create()
186
    user.verified_attributes.phone = '+33123456789'
187

  
188
    user = User.objects.get()
189
    assert user.phone == '+33123456789'
190
    assert user.is_verified.phone
191
    assert user.verified_attributes.phone == '+33123456789'
192
    assert user.attributes.phone == '+33123456789'
193
    user.save()
194

  
195
    user = User.objects.get()
196
    assert user.phone == '+33123456789'
197
    assert user.is_verified.phone
198
    assert user.verified_attributes.phone == '+33123456789'
199
    assert user.attributes.phone == '+33123456789'
200
    user.phone = '+43876543210'
201
    user.save()
202
    assert not user.is_verified.phone
203
    assert user.verified_attributes.phone is None
204
    assert user.attributes.phone == '+43876543210'
205

  
206
    user = User.objects.get()
207
    assert user.phone == '+43876543210'
208
    assert not user.is_verified.phone
209
    assert user.verified_attributes.phone is None
210
    assert user.attributes.phone == '+43876543210'
211
    user.verified_attributes.phone = '+33123456789'
212
    assert user.is_verified.phone
213
    assert user.verified_attributes.phone == '+33123456789'
214
    assert user.attributes.phone == '+33123456789'
215

  
216
    user = User.objects.get()
217
    assert user.phone == '+33123456789'
218
    assert user.is_verified.phone
219
    assert user.verified_attributes.phone == '+33123456789'
220
    assert user.attributes.phone == '+33123456789'
221

  
222

  
170 223
def test_fix_attributes(db):
171 224
    first_name_attribute = Attribute.objects.get(name='first_name')
172 225
    user = User.objects.create(first_name='john', last_name='Doe')
173
-