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

36 statements  

« prev     ^ index     » next       coverage.py v7.8.0, created at 2025-05-12 23:12 +0000

1# -*- coding: utf-8 -*- 

2from unittest import mock 

3 

4from django.test import TestCase 

5from django.contrib.auth.models import User 

6from ivatar.ivataraccount.auth import FedoraOpenIdConnect 

7from ivatar.ivataraccount.models import ConfirmedEmail 

8from django.test import override_settings 

9 

10 

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

12class AuthFedoraTestCase(TestCase): 

13 def _authenticate(self, response): 

14 backend = FedoraOpenIdConnect() 

15 pipeline = backend.strategy.get_pipeline(backend) 

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

17 

18 def test_new_user(self): 

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

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

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

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

23 

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

25 def test_new_user_untrusted_backend(self): 

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

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

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

29 

30 def test_existing_user(self): 

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

32 user = User.objects.create_user( 

33 username="testuser", 

34 password="password", 

35 email="test@example.com", 

36 first_name="test", 

37 last_name="user", 

38 ) 

39 auth_user = self._authenticate( 

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

41 ) 

42 self.assertEqual(auth_user, user) 

43 # Only add ConfirmedEmails on account creation. 

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

45 

46 def test_existing_user_with_confirmed_email(self): 

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

48 user = User.objects.create_user( 

49 username="testuser1", 

50 password="password", 

51 email="first@example.com", 

52 first_name="test", 

53 last_name="user", 

54 ) 

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

56 auth_user = self._authenticate( 

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

58 ) 

59 self.assertEqual(auth_user, user) 

60 

61 def test_existing_confirmed_email(self): 

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

63 user = User.objects.create_user( 

64 username="testuser", 

65 password="password", 

66 email="testuser@example.com", 

67 first_name="test", 

68 last_name="user", 

69 ) 

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

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

72 self.assertEqual(auth_user, user) 

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