def test_ding_login(self, mock_auth_code): mock_auth_code.return_value = "ding_uid" client = APIClient() res = client.post(reverse('siteapi:ding_login'), data={'code': 'ding_code'}) expect = {'code': ["this account hasn't registered"]} self.assertEqual(res.json(), expect) self.assertEqual(res.status_code, 400) user = User.create_user(username='******', password='') DingUser.valid_objects.create(user=user, uid='ding_uid') res = client.post(reverse('siteapi:ding_login'), data={'code': 'ding_code'}) self.assertEqual(res.status_code, 200) self.assertIn('token', res.json())
class TestCase(django_TestCase): ''' base TestCase ''' client = None maxDiff = None now = datetime.datetime(2019, 1, 1, tzinfo=pytz.timezone('UTC')) now_str = '2019-01-01T08:00:00+08:00' mock_now = False def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.anonymous = APIClient() self.user = User.valid_objects.get(username='******') @staticmethod def gen_client(token): ''' gen client by token ''' client = APIClient() client.credentials(HTTP_AUTHORIZATION='Token ' + token) return client def login(self, username, password): ''' gen test client as logined user ''' token = self.anonymous.post(reverse('siteapi:user_login'), data={ 'username': username, 'password': password, }).json()['token'] return self.gen_client(token) def login_as(self, user): ''' gen test client from user ''' return self.gen_client(user.token) def setUp(self): ''' pre-work ''' self.init() self.client = self.login_as(self.user) if self.mock_now: self.now_patcher = mock.patch('django.utils.timezone.now') self.mock_now = self.now_patcher.start() self.mock_now.return_value = self.now def tearDown(self): if self.mock_now: self.now_patcher.stop() def init(self): '''
class TestCase(django_TestCase): ''' base TestCase ''' client = None maxDiff = None def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.anonymous = APIClient() self.user = User.valid_objects.get(username='******') @staticmethod def gen_client(token): ''' gen client by token ''' client = APIClient() client.credentials(HTTP_AUTHORIZATION='Token ' + token) return client def login(self, username, password): ''' gen test client as logined user ''' token = self.anonymous.post(reverse('siteapi:user_login'), data={ 'username': username, 'password': password, }).json()['token'] return self.gen_client(token) def login_as(self, user): ''' gen test client from user ''' return self.gen_client(user.token) def setUp(self): ''' pre-work ''' self.init() self.client = self.login_as(self.user) def init(self): '''
def test_login(self, mock_check_sms_token): mock_check_sms_token.side_effect = [{'mobile': '18812341234'}] user = User.create_user(username='******', password='******') user.mobile = '18812341234' user.private_email = '*****@*****.**' user.save() client = APIClient() res = client.get(reverse('siteapi:user_self_perm')) self.assertEqual(res.status_code, 401) res = client.post(reverse('siteapi:user_login'), data={'username': '******', 'password': '******'}) self.assertEqual(res.status_code, 200) res = client.post(reverse('siteapi:user_login'), data={'private_email': '*****@*****.**', 'password': '******'}) self.assertEqual(res.status_code, 200) res = client.post(reverse('siteapi:user_login'), data={'mobile': '18812341234', 'sms_token': 'mock'}) self.assertEqual(res.status_code, 200) user = User.objects.get(username='******') self.assertIsNotNone(user.last_active_time) self.assertTrue(user.is_settled) client.credentials(HTTP_AUTHORIZATION='Token ' + res.json()['token']) res = client.get(reverse('siteapi:user_self_perm')) self.assertEqual(res.status_code, 200) res = client.post(reverse('siteapi:user_login'), data={'username': '******', 'password': '******'}) self.assertEqual(res.json()['perms'], ['system_oneid_all', 'system_ark-meta-server_all']) # test login failed because of account_config email_config = EmailConfig.get_current() email_config.is_valid = False email_config.save() res = client.post(reverse('siteapi:user_login'), data={'private_email': '*****@*****.**', 'password': '******'}) self.assertEqual(res.status_code, 400) mobile_config = SMSConfig.get_current() mobile_config.is_valid = False mobile_config.save() res = client.post(reverse('siteapi:user_login'), data={'mobile': '18812341234', 'sms_token': 'mock'}) self.assertEqual(res.status_code, 400)
class TestCase(django_TestCase): ''' base TestCase ''' client = None maxDiff = None now = datetime.datetime(2019, 1, 1, tzinfo=pytz.timezone('UTC')) now_str = '2019-01-01T08:00:00+08:00' mock_now = False def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.anonymous = APIClient() self.user = User.valid_objects.get(username='******') @staticmethod def gen_client(token): ''' gen client by token ''' client = APIClient() client.credentials(HTTP_AUTHORIZATION='Token ' + token) return client def login(self, username, password): ''' gen test client as logined user ''' token = self.anonymous.post(reverse('siteapi:user_login'), data={ 'username': username, 'password': password, }).json()['token'] return self.gen_client(token) def login_as(self, user): ''' gen test client from user ''' return self.gen_client(user.token) def setUp(self): ''' pre-work ''' self.init() self.client = self.login_as(self.user) if self.mock_now: self.now_patcher = mock.patch('django.utils.timezone.now') self.mock_now = self.now_patcher.start() self.mock_now.return_value = self.now def tearDown(self): if self.mock_now: self.now_patcher.stop() def init(self): ''' pre-work: create necessary objs ''' def assertEqualScoped(self, first, second, keys=None, msg=""): # pylint: disable=invalid-name ''' 断言两个对象的局部是否相等 目前仅限 dict 对象 ''' if keys is None: return self.assertEqual(first, second, msg) for key in keys: self.assertEqual(first[key], second[key], msg=f'[{key}]:' + msg) @staticmethod def extract(data, keys=None): ''' extract specified keys from dict ''' if keys is None: return data return {key: data.get(key) for key in keys}