Update email if user changed on hep

This commit is contained in:
Christian Cueni 2020-02-04 13:15:14 +01:00
parent ffb330223c
commit 75e1597d6f
3 changed files with 46 additions and 13 deletions

View File

@ -54,6 +54,12 @@ class Login(relay.ClientIDMutation):
user, status_msg = handle_user_and_verify_products(user_data) user, status_msg = handle_user_and_verify_products(user_data)
# sync email if user changed it on hep account
if user.email != user_data['email']:
user.email = user_data['email']
user.username = user_data['email']
user.save()
if user and status_msg != EMAIL_NOT_VERIFIED: if user and status_msg != EMAIL_NOT_VERIFIED:
login(info.context, user) login(info.context, user)

View File

@ -30,10 +30,9 @@ from users.models import Role, User, SchoolClass
TOKEN = 'abcd12345!' TOKEN = 'abcd12345!'
class PasswordResetTests(TestCase): class PasswordResetTests(TestCase):
def setUp(self): def setUp(self):
self.user = UserFactory(username='aschi@iterativ.ch', email='aschi@iterativ.ch') self.user = UserFactory(username=ME_DATA['id'], email=ME_DATA['id'])
Role.objects.create_default_roles() Role.objects.create_default_roles()
self.teacher_role = Role.objects.get_default_teacher_role() self.teacher_role = Role.objects.get_default_teacher_role()
@ -80,6 +79,44 @@ class PasswordResetTests(TestCase):
self.assertTrue(result.get('data').get('login').get('success')) self.assertTrue(result.get('data').get('login').get('success'))
self.assertTrue(self.user.is_authenticated) self.assertTrue(self.user.is_authenticated)
@patch.object(HepClient, 'customer_me', return_value=ME_DATA)
def test_user_can_login_with_updated_email(self, me_mock):
old_mail = 'aschi@iterativ.ch'
self.user.hep_id = ME_DATA['id']
self.user.email = old_mail
self.user.username = old_mail
self.user.save()
now = timezone.now()
expiry_date = now + timedelta(365)
LicenseFactory(expire_date=expiry_date, licensee=self.user, for_role=self.teacher_role).save()
result = self.make_login_mutation(self.user.email, TOKEN)
user = User.objects.get(hep_id=self.user.hep_id)
self.assertEqual(user.username, ME_DATA['email'])
self.assertEqual(user.email, ME_DATA['email'])
self.assertTrue(result.get('data').get('login').get('success'))
self.assertTrue(self.user.is_authenticated)
@patch.object(HepClient, 'customer_me', return_value=ME_DATA)
def test_user_can_login_with_local_user_and_valid_local_license(self, me_mock):
self.user.hep_id = ME_DATA['id']
self.user.save()
now = timezone.now()
expiry_date = now + timedelta(365)
LicenseFactory(expire_date=expiry_date, licensee=self.user, for_role=self.teacher_role).save()
result = self.make_login_mutation(self.user.email, TOKEN)
self.assertTrue(result.get('data').get('login').get('success'))
self.assertTrue(self.user.is_authenticated)
@patch.object(HepClient, '_customer_orders', return_value=VALID_TEACHERS_ORDERS) @patch.object(HepClient, '_customer_orders', return_value=VALID_TEACHERS_ORDERS)
@patch.object(HepClient, 'customer_me', return_value=ME_DATA) @patch.object(HepClient, 'customer_me', return_value=ME_DATA)
@patch.object(HepClient, 'fetch_admin_token', return_value={'token': 'AABBCCDDEE**44566'}) @patch.object(HepClient, 'fetch_admin_token', return_value={'token': 'AABBCCDDEE**44566'})
@ -171,14 +208,3 @@ class PasswordResetTests(TestCase):
self.assertFalse(result.get('data').get('login').get('success')) self.assertFalse(result.get('data').get('login').get('success'))
self.assertEqual(result.get('data').get('login').get('errors')[0].get('field'), 'unknown_error') self.assertEqual(result.get('data').get('login').get('errors')[0].get('field'), 'unknown_error')
## can login with license and user
## can login with no user and license
# ?can login with no user and local license
## cannot login without user
## cannot login with user and not verfied
## cannot login with user and no license
## cannot login with user and expired license
## non 200 error
# if more than one valid license take correct
# if mulitple licenses and one correct take one test in own class

View File

@ -19,6 +19,7 @@ EMAIL_NOT_VERIFIED = 'email_not_verified'
UNKNOWN_ERROR = 'unknown_error' UNKNOWN_ERROR = 'unknown_error'
NO_VALID_LICENSE = 'no_valid_license' NO_VALID_LICENSE = 'no_valid_license'
def handle_user_and_verify_products(user_data): def handle_user_and_verify_products(user_data):
hep_client = HepClient() hep_client = HepClient()