Coverage for ivatar/ivataraccount/test_auth.py: 100%

36 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-10-20 05:10 +0000

1from unittest import mock 

2 

3from django.test import TestCase 

4from django.contrib.auth.models import User 

5from ivatar.ivataraccount.auth import FedoraOpenIdConnect 

6from ivatar.ivataraccount.models import ConfirmedEmail 

7from django.test import override_settings 

8 

9 

10@override_settings(SOCIAL_AUTH_FEDORA_OIDC_ENDPOINT="https://id.example.com/") 

11class AuthFedoraTestCase(TestCase): 

12 def _authenticate(self, response): 

13 backend = FedoraOpenIdConnect() 

14 pipeline = backend.strategy.get_pipeline(backend) 

15 return backend.pipeline(pipeline, response=response) 

16 

17 def test_new_user(self): 

18 """Check that a Fedora user gets a ConfirmedEmail automatically.""" 

19 user = self._authenticate( 

20 {"nickname": "testuser", "email": "test@example.com", "sub": "testuser-sub"} 

21 ) 

22 self.assertEqual(user.confirmedemail_set.count(), 1) 

23 self.assertEqual(user.confirmedemail_set.first().email, "test@example.com") 

24 

25 @mock.patch("ivatar.ivataraccount.auth.TRUST_EMAIL_FROM_SOCIAL_AUTH_BACKENDS", []) 

26 def test_new_user_untrusted_backend(self): 

27 """Check that ConfirmedEmails aren't automatically created for untrusted backends.""" 

28 user = self._authenticate( 

29 {"nickname": "testuser", "email": "test@example.com", "sub": "testuser-sub"} 

30 ) 

31 self.assertEqual(user.confirmedemail_set.count(), 0) 

32 

33 def test_existing_user(self): 

34 """Checks that existing users are found.""" 

35 user = User.objects.create_user( 

36 username="testuser", 

37 password="password", 

38 email="test@example.com", 

39 first_name="test", 

40 last_name="user", 

41 ) 

42 auth_user = self._authenticate( 

43 {"nickname": "testuser", "email": "test@example.com", "sub": "testuser-sub"} 

44 ) 

45 self.assertEqual(auth_user, user) 

46 # Only add ConfirmedEmails on account creation. 

47 self.assertEqual(auth_user.confirmedemail_set.count(), 0) 

48 

49 def test_existing_user_with_confirmed_email(self): 

50 """Check that the authenticating user is found using their ConfirmedEmail.""" 

51 user = User.objects.create_user( 

52 username="testuser1", 

53 password="password", 

54 email="first@example.com", 

55 first_name="test", 

56 last_name="user", 

57 ) 

58 ConfirmedEmail.objects.create_confirmed_email(user, "second@example.com", False) 

59 auth_user = self._authenticate( 

60 { 

61 "nickname": "testuser2", 

62 "email": "second@example.com", 

63 "sub": "testuser2-sub", 

64 } 

65 ) 

66 self.assertEqual(auth_user, user) 

67 

68 def test_existing_confirmed_email(self): 

69 """Check that ConfirmedEmail isn't created twice.""" 

70 user = User.objects.create_user( 

71 username="testuser", 

72 password="password", 

73 email="testuser@example.com", 

74 first_name="test", 

75 last_name="user", 

76 ) 

77 ConfirmedEmail.objects.create_confirmed_email(user, user.email, False) 

78 auth_user = self._authenticate( 

79 {"nickname": user.username, "email": user.email, "sub": "testuser-sub"} 

80 ) 

81 self.assertEqual(auth_user, user) 

82 self.assertEqual(auth_user.confirmedemail_set.count(), 1)