1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-07-08 12:44:03 +00:00
seahub/tests/api/test_serializers.py
WJH 532fa5ef8c
Improve login and create user (#5458)
* add create oauth/ldap/saml user in UserManager

* improve admin add/import users

* improve dingtalk/weixin/work_weixin login/create user

* improve saml login/create user

* improve oauth login/create user

* login ldap user in seahub

* improve invite user

* fix code

* fix github test action

* fix test

* fix saml login

* optimize code

* specify the version of python-ldap

* fix code

* improve code

* add get_old_user

* optimize oauth login code

* optimize code

* remove LDAP_USER_UNIQUE_ID

* remove test_primary_id

* improve authenticate user

* improve saml login

* optimize code
2023-06-19 13:06:15 +08:00

131 lines
4.5 KiB
Python

from mock import patch
from seaserv import ccnet_api
from seahub.test_utils import BaseTestCase
from seahub.api2.serializers import AuthTokenSerializer
from seahub.profile.models import Profile
class AuthTokenSerializerTest(BaseTestCase):
def setUp(self):
self.inactive_user = self.create_user('inactive@test.com', is_active=False)
Profile.objects.add_or_update(self.user.username,
login_id='user_login_id',
contact_email='contact@test.com')
ccnet_api.set_reference_id(self.user.username, 'another_email@test.com')
def assertSuccess(self, s):
assert s.is_valid() is True
assert s.errors == {}
def assertFailed(self, s):
assert s.is_valid() is False
assert 'Unable to login with provided credentials.' in s.errors['non_field_errors']
def test_validate(self):
d = {
'username': self.user.username,
'password': self.user_password,
'platform': 'linux',
'device_id': '701143c1238e6736b61c20e73de82fc95989c413',
'device_name': 'test',
}
assert AuthTokenSerializer(
data=d, context={'request': self.fake_request}).is_valid() is True
Profile.objects.add_or_update(username=self.user.username, login_id='aaa')
d1 = d.copy()
d1.update({'username': 'aaa'})
assert AuthTokenSerializer(
data=d, context={'request': self.fake_request}).is_valid() is True
assert AuthTokenSerializer(
data=d1, context={'request': self.fake_request}).is_valid() is True
Profile.objects.add_or_update(username=self.user.username,
contact_email='a+1@a.com')
d1 = d.copy()
d1.update({'username': 'a+1@a.com'})
assert AuthTokenSerializer(
data=d, context={'request': self.fake_request}).is_valid() is True
assert AuthTokenSerializer(
data=d1, context={'request': self.fake_request}).is_valid() is True
@patch('seahub.api2.serializers.has_two_factor_auth')
def test_two_factor_auth(self, mock_has_two_factor_auth):
mock_has_two_factor_auth.return_value = True
s = AuthTokenSerializer(data={
'username': self.user.username,
'password': self.user_password,
'platform': 'linux',
'device_id': '701143c1238e6736b61c20e73de82fc95989c413',
'device_name': 'test',
}, context={'request': self.fake_request})
assert s.is_valid() is True
def test_invalid_user(self):
d = {
'username': 'test_does_not_exist',
'password': '123',
}
s = AuthTokenSerializer(data=d, context={'request': self.fake_request})
self.assertFailed(s)
def test_inactive_user(self):
d = {
'username': self.inactive_user.username,
'password': 'secret',
}
s = AuthTokenSerializer(data=d, context={'request': self.fake_request})
assert s.is_valid() is False
assert 'User account is disabled.' in s.errors['non_field_errors']
def test_inactive_user_incorrect_password(self):
"""An invalid login doesn't leak the inactive status of a user."""
d = {
'username': self.inactive_user.username,
'password': 'incorrect'
}
s = AuthTokenSerializer(data=d, context={'request': self.fake_request})
self.assertFailed(s)
def test_login_failed(self):
d = {
'username': self.user.username,
'password': 'incorrect',
}
s = AuthTokenSerializer(data=d, context={'request': self.fake_request})
self.assertFailed(s)
def test_login_success(self):
d = {
'username': self.user.username,
'password': self.user_password,
}
s = AuthTokenSerializer(data=d, context={'request': self.fake_request})
self.assertSuccess(s)
def test_login_id(self):
d = {
'username': 'user_login_id',
'password': self.user_password,
}
s = AuthTokenSerializer(data=d, context={'request': self.fake_request})
self.assertSuccess(s)
def test_contact_email(self):
d = {
'username': 'contact@test.com',
'password': self.user_password,
}
s = AuthTokenSerializer(data=d, context={'request': self.fake_request})
self.assertSuccess(s)