You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.9 KiB
Python
48 lines
1.9 KiB
Python
from django.test import TestCase
|
|
from django.contrib.auth.models import User
|
|
from django.conf import settings
|
|
from unittest.mock import Mock
|
|
from logindata.oauth import CustomOAuth2Validator
|
|
from members.models import Member, MALE
|
|
|
|
|
|
class CustomOAuth2ValidatorTestCase(TestCase):
|
|
def setUp(self):
|
|
self.validator = CustomOAuth2Validator()
|
|
|
|
# Create user with member
|
|
self.user_with_member = User.objects.create_user(username="alice", password="test123")
|
|
self.member = Member.objects.create(
|
|
prename="Alice", lastname="Smith", birth_date="1990-01-01",
|
|
email=settings.TEST_MAIL, gender=MALE, user=self.user_with_member
|
|
)
|
|
|
|
# Create user without member
|
|
self.user_without_member = User.objects.create_user(username="bob", password="test123")
|
|
|
|
def test_get_additional_claims_with_member(self):
|
|
"""Test get_additional_claims when user has a member"""
|
|
request = Mock()
|
|
request.user = self.user_with_member
|
|
|
|
result = self.validator.get_additional_claims(request)
|
|
|
|
self.assertEqual(result['email'], settings.TEST_MAIL)
|
|
self.assertEqual(result['preferred_username'], 'alice')
|
|
|
|
def test_get_additional_claims_without_member(self):
|
|
"""Test get_additional_claims when user has no member"""
|
|
# ensure branch coverage, not possible under standard scenarios
|
|
request = Mock()
|
|
request.user = Mock()
|
|
request.user.member = None
|
|
self.assertEqual(len(self.validator.get_additional_claims(request)), 1)
|
|
|
|
request = Mock()
|
|
request.user = self.user_without_member
|
|
|
|
# The method will raise RelatedObjectDoesNotExist, which means the code
|
|
# should use hasattr or try/except. For now, test that it raises.
|
|
with self.assertRaises(User.member.RelatedObjectDoesNotExist):
|
|
self.validator.get_additional_claims(request)
|