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
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-20 05:10 +0000
1from unittest import mock
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
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)
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")
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)
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)
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)
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)