Skip to content

Commit 6cc9c22

Browse files
committed
add testing
1 parent e0b50fe commit 6cc9c22

File tree

2 files changed

+74
-11
lines changed

2 files changed

+74
-11
lines changed

djangosaml2/backends.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ def get_saml_user_model():
4545

4646

4747
def get_django_user_lookup_attribute(userModel) -> str:
48+
""" Returns the attribute on which to match the identifier with for the user lookup
49+
"""
4850
if hasattr(settings, 'SAML_DJANGO_USER_MAIN_ATTRIBUTE'):
4951
return settings.SAML_DJANGO_USER_MAIN_ATTRIBUTE
5052
return getattr(userModel, 'USERNAME_FIELD', 'username')
@@ -128,10 +130,8 @@ def get_or_create_user(self, user_lookup_key, user_lookup_value, create_unknown_
128130
try:
129131
user = UserModel.objects.get(**user_query_args)
130132
except MultipleObjectsReturned:
131-
logger.error("Multiple users match, lookup: %s", user_query_args)
133+
logger.error("Multiple users match, model: %s, lookup: %s", str(UserModel._meta), user_query_args)
132134
except UserModel.DoesNotExist:
133-
logger.error('The user does not exist, lookup: %s', user_query_args)
134-
135135
# Create new one if desired by settings
136136
if create_unknown_user:
137137
try:
@@ -141,6 +141,8 @@ def get_or_create_user(self, user_lookup_key, user_lookup_value, create_unknown_
141141

142142
if created:
143143
logger.debug('New user created: %s', user)
144+
else:
145+
logger.error('The user does not exist, model: %s, lookup: %s', str(UserModel._meta), user_query_args)
144146

145147
return user, created
146148

tests/testprofiles/tests.py

Lines changed: 69 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from django.contrib.auth import get_user_model
2020
from django.contrib.auth.models import User as DjangoUserModel
2121
from django.test import TestCase, override_settings
22+
from .models import TestUser
2223
from djangosaml2.backends import (Saml2Backend,
2324
get_django_user_lookup_attribute,
2425
get_saml_user_model)
@@ -158,17 +159,77 @@ def test_django_user_main_attribute(self):
158159
with override_settings(SAML_DJANGO_USER_MAIN_ATTRIBUTE='foo'):
159160
self.assertEqual(get_django_user_lookup_attribute(get_saml_user_model()), 'foo')
160161

161-
def test_django_user_main_attribute_lookup(self):
162+
def test_get_or_create_user_existing(self):
162163
backend = Saml2Backend()
163164

164-
# self.assertEqual(backend.get_django_user_main_attribute_lookup(), '')
165+
TestUser.objects.create(username='john')
165166

166-
# TODO: test with acual user so he can be matched
167-
# with override_settings(
168-
# SAML_DJANGO_USER_MAIN_ATTRIBUTE_LOOKUP='__iexact'):
169-
# self.assertEqual(
170-
# backend.get_django_user_main_attribute_lookup(),
171-
# '__iexact')
167+
with override_settings(SAML_USER_MODEL='testprofiles.TestUser'):
168+
john, created = backend.get_or_create_user(
169+
get_django_user_lookup_attribute(get_saml_user_model()),
170+
'john',
171+
False,
172+
)
173+
174+
self.assertTrue(isinstance(john, TestUser))
175+
self.assertFalse(created)
176+
177+
def test_get_or_create_user_duplicates(self):
178+
backend = Saml2Backend()
179+
180+
TestUser.objects.create(username='john', age=1)
181+
TestUser.objects.create(username='paul', age=1)
182+
183+
with self.assertLogs('djangosaml2', level='DEBUG') as logs:
184+
with override_settings(SAML_USER_MODEL='testprofiles.TestUser'):
185+
john, created = backend.get_or_create_user(
186+
'age',
187+
1,
188+
False,
189+
)
190+
191+
self.assertTrue(john is None)
192+
self.assertFalse(created)
193+
self.assertIn(
194+
"ERROR:djangosaml2:Multiple users match, model: testprofiles.testuser, lookup: {'age': 1}",
195+
logs.output,
196+
)
197+
198+
def test_get_or_create_user_no_create(self):
199+
backend = Saml2Backend()
200+
201+
with self.assertLogs('djangosaml2', level='DEBUG') as logs:
202+
with override_settings(SAML_USER_MODEL='testprofiles.TestUser'):
203+
john, created = backend.get_or_create_user(
204+
get_django_user_lookup_attribute(get_saml_user_model()),
205+
'john',
206+
False,
207+
)
208+
209+
self.assertTrue(john is None)
210+
self.assertFalse(created)
211+
self.assertIn(
212+
"ERROR:djangosaml2:The user does not exist, model: testprofiles.testuser, lookup: {'username': 'john'}",
213+
logs.output,
214+
)
215+
216+
def test_get_or_create_user_create(self):
217+
backend = Saml2Backend()
218+
219+
with self.assertLogs('djangosaml2', level='DEBUG') as logs:
220+
with override_settings(SAML_USER_MODEL='testprofiles.TestUser'):
221+
john, created = backend.get_or_create_user(
222+
get_django_user_lookup_attribute(get_saml_user_model()),
223+
'john',
224+
True,
225+
)
226+
227+
self.assertTrue(isinstance(john, TestUser))
228+
self.assertTrue(created)
229+
self.assertIn(
230+
f"DEBUG:djangosaml2:New user created: {john}",
231+
logs.output,
232+
)
172233

173234

174235
class LowerCaseSaml2Backend(Saml2Backend):

0 commit comments

Comments
 (0)