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
« prev ^ index » next coverage.py v7.8.0, created at 2025-05-12 23:12 +0000
1# -*- coding: utf-8 -*-
2from unittest import mock
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
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)
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")
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)
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)
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)
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)