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)