@@ -84,12 +84,24 @@ def test_set_attribute(self):
84
84
self .assertEqual (u .custom_attribute , 'new_value' )
85
85
86
86
87
- class DefaultSaml2BackendTests (TestCase ):
87
+ class Saml2BackendTests (TestCase ):
88
+ """ UnitTests on backend classes
89
+ """
90
+ backend_cls = Saml2Backend
88
91
89
92
def setUp (self ):
90
- self .backend = Saml2Backend ()
93
+ self .backend = self . backend_cls ()
91
94
self .user = TestUser .objects .create (username = 'john' )
92
- # self.test_user = TestUser.objects.create(username='john')
95
+
96
+ def test_is_authorized (self ):
97
+ self .assertTrue (self .backend .is_authorized ({}, {}))
98
+
99
+ def test_clean_attributes (self ):
100
+ attributes = {'random' : 'dummy' , 'value' : 123 }
101
+ self .assertEqual (self .backend .clean_attributes (attributes ), attributes )
102
+
103
+ def test_clean_user_main_attribute (self ):
104
+ self .assertEqual (self .backend .clean_user_main_attribute ('value' ), 'value' )
93
105
94
106
def test_update_user (self ):
95
107
attribute_mapping = {
@@ -260,6 +272,56 @@ def test_get_or_create_user_create(self):
260
272
)
261
273
262
274
275
+ class CustomizedBackend (Saml2Backend ):
276
+ """ Override the available methods with some customized implementation to test customization
277
+ """
278
+ def is_authorized (self , attributes , attribute_mapping ):
279
+ ''' Allow only staff users from the IDP '''
280
+ return attributes .get ('is_staff' , (None , ))[0 ] == 'true'
281
+
282
+ def clean_attributes (self , attributes : dict ):
283
+ ''' Keep only age attribute '''
284
+ return {
285
+ 'age' : attributes .get ('age' , ()),
286
+ }
287
+
288
+ def clean_user_main_attribute (self , main_attribute ):
289
+ ''' Replace all spaces an dashes by underscores '''
290
+ return main_attribute .replace ('-' , '_' ).replace (' ' , '_' )
291
+
292
+ def get_or_create_user (self , user_lookup_key , user_lookup_value , create_unknown_user , ** kwargs ):
293
+ return super ().get_or_create_user (user_lookup_key , user_lookup_value , create_unknown_user , ** kwargs )
294
+
295
+
296
+ class CustomizedSaml2BackendTests (Saml2BackendTests ):
297
+ backend_cls = CustomizedBackend
298
+
299
+ def test_is_authorized (self ):
300
+ attribute_mapping = {
301
+ 'uid' : ('username' , ),
302
+ 'mail' : ('email' , ),
303
+ 'cn' : ('first_name' , ),
304
+ 'sn' : ('last_name' , ),
305
+ }
306
+ attributes = {
307
+ 'uid' : ('john' , ),
308
+
309
+ 'cn' : ('John' , ),
310
+ 'sn' : ('Doe' , ),
311
+ }
312
+ self .assertFalse (self .backend .is_authorized (attributes , attribute_mapping ))
313
+ attributes ['is_staff' ] = ('true' , )
314
+ self .assertTrue (self .backend .is_authorized (attributes , attribute_mapping ))
315
+
316
+ def test_clean_attributes (self ):
317
+ attributes = {'random' : 'dummy' , 'value' : 123 , 'age' : '28' }
318
+ self .assertEqual (self .backend .clean_attributes (attributes ), {'age' : '28' })
319
+
320
+ def test_clean_user_main_attribute (self ):
321
+ self .assertEqual (self .backend .clean_user_main_attribute ('va--l__ u -e' ), 'va__l___u__e' )
322
+
323
+
324
+
263
325
class LowerCaseSaml2Backend (Saml2Backend ):
264
326
def clean_attributes (self , attributes ):
265
327
return dict ([k .lower (), v ] for k , v in attributes .items ())
0 commit comments