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

36 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2025-10-24 23:06 +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({"nickname": "testuser", "email": "test@example.com"}) 

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

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

22 

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

24 def test_new_user_untrusted_backend(self): 

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

26 user = self._authenticate({"nickname": "testuser", "email": "test@example.com"}) 

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

28 

29 def test_existing_user(self): 

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

31 user = User.objects.create_user( 

32 username="testuser", 

33 password="password", 

34 email="test@example.com", 

35 first_name="test", 

36 last_name="user", 

37 ) 

38 auth_user = self._authenticate( 

39 {"nickname": "testuser", "email": "test@example.com"} 

40 ) 

41 self.assertEqual(auth_user, user) 

42 # Only add ConfirmedEmails on account creation. 

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

44 

45 def test_existing_user_with_confirmed_email(self): 

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

47 user = User.objects.create_user( 

48 username="testuser1", 

49 password="password", 

50 email="first@example.com", 

51 first_name="test", 

52 last_name="user", 

53 ) 

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

55 auth_user = self._authenticate( 

56 {"nickname": "testuser2", "email": "second@example.com"} 

57 ) 

58 self.assertEqual(auth_user, user) 

59 

60 def test_existing_confirmed_email(self): 

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

62 user = User.objects.create_user( 

63 username="testuser", 

64 password="password", 

65 email="testuser@example.com", 

66 first_name="test", 

67 last_name="user", 

68 ) 

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

70 auth_user = self._authenticate({"nickname": user.username, "email": user.email}) 

71 self.assertEqual(auth_user, user) 

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