From 47a5266752e539bdfb9b7c199e6fcc7c488aacdb Mon Sep 17 00:00:00 2001 From: Christian Cueni Date: Wed, 12 May 2021 12:57:15 +0200 Subject: [PATCH] Add registration test --- server/oauth/tests/test_login.py | 61 ++++++++++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 2 deletions(-) diff --git a/server/oauth/tests/test_login.py b/server/oauth/tests/test_login.py index 5b7cbfbf..2fee3dbc 100644 --- a/server/oauth/tests/test_login.py +++ b/server/oauth/tests/test_login.py @@ -10,7 +10,6 @@ from django.test import TestCase, RequestFactory from django.utils import timezone from core.factories import UserFactory -from oauth.factories import Oauth2TokenFactory from oauth.hep_client import HepClient from oauth.user_signup_login_handler import EMAIL_NOT_VERIFIED, NO_VALID_LICENSE, UNKNOWN_ERROR from oauth.views import authorize @@ -28,6 +27,11 @@ TOKEN = { 'expires_at': IN_A_HOUR_UNIX, } +NEW_ME_DATA = ME_DATA.copy() +NEW_ME_DATA['email'] = 'stiller@has.ch' +NEW_ME_DATA['id'] = 99 + + class LoginTests(TestCase): def setUp(self): self.user = UserFactory(username=ME_DATA['id'], email=ME_DATA['id']) @@ -97,7 +101,6 @@ class LoginTests(TestCase): except: pass - @patch.object(HepClient, 'fetch_eorders', return_value=VALID_STUDENT_ORDERS) @patch.object(DjangoRemoteApp, 'authorize_access_token', return_value=TOKEN) @patch.object(HepClient, 'user_details', return_value=ME_DATA) @@ -156,3 +159,57 @@ class LoginTests(TestCase): self.assertEqual(response.status_code, 302) self.assertEqual(response.url, f'/login-success?state={UNKNOWN_ERROR}') + + + def test_user_data_is_synced_on_login(self, user_mock, authorize_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() + + response = self._login('/api/oauth/authorize?code=1234') + user = User.objects.get(hep_id=self.user.hep_id) + + self.assertEqual(response.status_code, 302) + self.assertEqual(response.url, '/login-success?state=success') + self.assertEqual(user.username, ME_DATA['email']) + self.assertEqual(user.email, ME_DATA['email']) + self.assertTrue(self.user.is_authenticated) + + + @patch.object(HepClient, 'fetch_eorders', return_value=VALID_TEACHERS_ORDERS) + @patch.object(DjangoRemoteApp, 'authorize_access_token', return_value=TOKEN) + @patch.object(HepClient, 'user_details', return_value=NEW_ME_DATA) + def new_user_is_created_in_system_after_login(self, user_mock, authorize_mock, orders_mock): + response = self._login('/api/oauth/authorize?code=1234') + + try: + user = User.objects.get(email=NEW_ME_DATA['email']) + except: + self.fail('LoginTests.new_user_is_created_in_system_after_login: User was not created') + + user_role_key = user.user_roles.get(user=user).role.key + self.assertEqual(user_role_key, Role.objects.TEACHER_KEY) + + license = License.objects.get(licensee=user) + self.assertEqual(license.for_role.key, Role.objects.TEACHER_KEY) + + school_class = SchoolClass.objects.get(users__in=[user]) + self.assertIsNotNone(school_class) + + self.assertEqual(response.status_code, 302) + self.assertEqual(response.url, '/login-success?state=success') + self.assertTrue(self.user.is_authenticated) + + try: + UserData.objects.get(user=user) + self.fail('LoginTests.test_teacher_can_login_with_valid_license: Userdata should not exist') + except: + pass