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