from rest_framework import status from rest_framework.test import APITestCase from django.test.utils import override_settings from pingcap_sso.models import User @override_settings( EMAIL_BACKEND='django.core.mail.backends.dummy.EmailBackend', SMS_BACKEND='sms.backends.dummy.SmsBackend', CACHES={ 'default': { # Just for disable django-rest-framework's throttle 'BACKEND': 'django.core.cache.backends.dummy.DummyCache', } }, RESERVED_USERNAMES=['admin'] ) class ProfileTest(APITestCase): databases = ['default', 'discourse'] fixtures = [ 'pingcap_sso/tests/fixtures/org/pingcap_sso.json', 'pingcap_sso/tests/fixtures/org/discourse.json' ] USER_PROFILE_PATH = '/api/profile' def setUp(self): self.user = User.objects.get(username='orgtest1') self.client.force_login(self.user) def test_get_profile(self): response = self.client.get(self.USER_PROFILE_PATH) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual( response.data['data'], { 'avatar_url': self.user.avatar_url, 'username': self.user.username, 'username_last_modified_at': self.user.username_last_modified_at, 'bio': self.user.bio, 'name': self.user.name, 'gender': self.user.gender, 'date_of_birth': self.user.date_of_birth, 'address': self.user.address, 'company_name': self.user.company_name, 'company_verified_status': self.user.company_verified_status, 'job_title': self.user.job_title_code } ) def _update_username(self, new_username, expected_status_code, expected_username=None, unexpected_username=None): response = self.client.patch(self.USER_PROFILE_PATH, { 'username': new_username }) self.user.refresh_from_db() self.assertEqual(response.status_code, expected_status_code) if expected_username: self.assertEqual(self.user.username, expected_username) if unexpected_username: self.assertNotEqual(self.user.username, unexpected_username) def test_update_valid_username(self): self._update_username('new_username', status.HTTP_200_OK, 'new_username') self._update_username('new_username', status.HTTP_200_OK, 'new_username') self._update_username('new_username2', status.HTTP_400_BAD_REQUEST, 'new_username') def test_update_invalid_username(self): self._update_username('13611081299', status.HTTP_400_BAD_REQUEST, None, '13611081299') self._update_username('abc', status.HTTP_400_BAD_REQUEST, None, 'abc') self._update_username( 'abcdefndandjandanjdnjaklndkjankdnakjndkankdnakdnklajkld', status.HTTP_400_BAD_REQUEST, None, 'abcdefndandjandanjdnjaklndkjankdnakjndkankdnakdnklajkld' ) self._update_username('Gin__', status.HTTP_400_BAD_REQUEST, None, 'Gin__') self._update_username('Gin_', status.HTTP_400_BAD_REQUEST, None, 'Gin_') # `admin` is a reserved username self._update_username('admin', status.HTTP_400_BAD_REQUEST, None, 'admin') self._update_username('admin1', status.HTTP_200_OK, 'admin1', self.user.username) def test_update_company(self): response = self.client.patch(self.USER_PROFILE_PATH, { 'company_name': 'new_company_name' }) self.assertEqual(response.status_code, status.HTTP_200_OK) self.user.refresh_from_db() self.assertEqual(self.user.company_name, 'new_company_name') def test_update_job_title(self): response = self.client.patch(self.USER_PROFILE_PATH, { 'job_title': '2G3agrmyP', }) self.assertEqual(response.status_code, status.HTTP_200_OK) self.user.refresh_from_db() self.assertEqual(self.user.job_title_code, '2G3agrmyP') self.assertEqual(self.user.job_title_text, '学生') response = self.client.get(self.USER_PROFILE_PATH) self.assertEqual(response.data['data']['job_title'], '2G3agrmyP') def test_update_gender(self): response = self.client.patch(self.USER_PROFILE_PATH, { 'gender': 0 }) self.assertEqual(response.status_code, status.HTTP_200_OK) self.user.refresh_from_db() self.assertEqual(self.user.gender, 0) response = self.client.patch(self.USER_PROFILE_PATH, { 'gender': 1 }) self.assertEqual(response.status_code, status.HTTP_200_OK) self.user.refresh_from_db() self.assertEqual(self.user.gender, 1) response = self.client.patch(self.USER_PROFILE_PATH, { 'gender': 2 }) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertIn('gender', response.data['errors']) self.user.refresh_from_db() self.assertEqual(self.user.gender, 1)