user: revert phone modelfield-to-attribute implicit write (#79135)

This commit is contained in:
Paul Marillonnet 2023-06-28 14:25:18 +02:00
parent 9b37fd1b1b
commit a0fee85568
5 changed files with 17 additions and 34 deletions

View File

@ -472,7 +472,7 @@ class UserCsvImporter:
header.key = True
elif header.name not in SPECIAL_COLUMNS:
try:
if header.name in ['email', 'phone', 'first_name', 'last_name', 'username']:
if header.name in ['email', 'first_name', 'last_name', 'username']:
User._meta.get_field(header.name)
header.field = True
if header.name == 'email':

View File

@ -118,7 +118,7 @@ class Attributes:
)
update_fields = ['modified']
if name in ['first_name', 'last_name', 'phone']:
if name in ['first_name', 'last_name']:
if getattr(self.owner, name) != value:
setattr(self.owner, name, value)
update_fields.append(name)
@ -510,7 +510,7 @@ class User(AbstractBaseUser):
def save(self, *args, **kwargs):
update_fields = kwargs.get('update_fields')
super().save(*args, **kwargs)
if not update_fields or not set(update_fields).isdisjoint({'first_name', 'last_name', 'phone'}):
if not update_fields or not set(update_fields).isdisjoint({'first_name', 'last_name'}):
try:
self.attributes.first_name
except AttributeError:
@ -526,14 +526,6 @@ class User(AbstractBaseUser):
if self.attributes.last_name != self.last_name:
self.attributes.last_name = self.last_name
try:
self.attributes.phone
except AttributeError:
pass
else:
if self.attributes.phone != self.phone:
self.attributes.phone = self.phone
def can_change_password(self):
return True

View File

@ -3221,7 +3221,7 @@ def test_api_basic_authz_user_phone_number(app, settings, superuser, phone_activ
headers = basic_authorization_header(superuser)
app.get('/api/users/', headers=headers, status=200)
superuser.phone = '+33499985643'
superuser.attributes.phone = '+33499985643'
superuser.save()
# authn valid

View File

@ -201,7 +201,7 @@ x,x,x,x'''
CsvHeader(1, 'email', field=True, key=True, verified=True),
CsvHeader(2, 'first_name', field=True),
CsvHeader(3, 'last_name', field=True),
CsvHeader(4, 'phone', field=True),
CsvHeader(4, 'phone', field=False, attribute=True),
]
assert importer.has_errors
assert len(importer.rows) == 3
@ -253,7 +253,7 @@ x,x,x,x'''
CsvHeader(1, 'email', field=True, key=True, verified=True),
CsvHeader(2, 'first_name', field=True),
CsvHeader(3, 'last_name', field=True),
CsvHeader(4, 'phone', field=True),
CsvHeader(4, 'phone', field=False, attribute=True),
]
assert importer.has_errors
assert len(importer.rows) == 3
@ -435,7 +435,7 @@ app1,2,tnoel@entrouvert.com,Thomas,Noël,0606060606
CsvHeader(3, 'email', field=True, verified=True),
CsvHeader(4, 'first_name', field=True),
CsvHeader(5, 'last_name', field=True),
CsvHeader(6, 'phone', field=True),
CsvHeader(6, 'phone', field=False, attribute=True),
]
assert not importer.has_errors
assert len(importer.rows) == 2

View File

@ -89,17 +89,19 @@ def test_sync_first_name(db, settings):
assert user.attributes.first_name == 'John Paul'
def test_sync_phone(db, settings):
def test_sync_phone_deactivated(db, settings):
Attribute.objects.get_or_create(name='phone', defaults={'label': 'Phone', 'kind': 'phone_number'})
user = User(username='john.doe', email='john.doe2@example.net')
user.phone = '+33123456789' # deprecated model field
user.save()
user.phone = '+33123456789'
user.save()
assert user.attributes.phone == '+33123456789'
assert user.attributes.phone is None
user.attributes.phone = '+43876543210'
user.save()
user.refresh_from_db()
assert user.attributes.phone == '+43876543210'
assert user.phone == '+33123456789' # deprecated field left unused & unmodified
def test_save_does_not_reset_verified_attributes_first_name(db):
@ -186,35 +188,24 @@ def test_save_does_not_reset_verified_attributes_phone(db):
user.verified_attributes.phone = '+33123456789'
user = User.objects.get()
assert user.phone == '+33123456789'
assert user.phone is None # deprecated model field
assert user.is_verified.phone
assert user.verified_attributes.phone == '+33123456789'
assert user.attributes.phone == '+33123456789'
user.save()
user = User.objects.get()
assert user.phone == '+33123456789'
assert user.phone is None # deprecated model field
assert user.is_verified.phone
assert user.verified_attributes.phone == '+33123456789'
assert user.attributes.phone == '+33123456789'
user.phone = '+43876543210'
user.phone = '+43876543210' # deprecated field mistakenly modified in db
user.save()
assert not user.is_verified.phone
assert user.verified_attributes.phone is None
assert user.attributes.phone == '+43876543210'
user = User.objects.get()
assert user.phone == '+43876543210'
assert not user.is_verified.phone
assert user.verified_attributes.phone is None
assert user.attributes.phone == '+43876543210'
user.verified_attributes.phone = '+33123456789'
assert user.is_verified.phone
assert user.is_verified.phone # verication state unmodified
assert user.verified_attributes.phone == '+33123456789'
assert user.attributes.phone == '+33123456789'
user = User.objects.get()
assert user.phone == '+33123456789'
assert user.is_verified.phone
assert user.verified_attributes.phone == '+33123456789'
assert user.attributes.phone == '+33123456789'