@@ -57,6 +57,20 @@ def testGetUserKwargsIncorrectUsername(self):
5757 )
5858 self .assertEqual (user , None )
5959
60+ def testHasUserKwargsSuccess (self ):
61+ with connection () as c :
62+ exist = c .has_user (
63+ username = settings .LDAP_AUTH_TEST_USER_USERNAME ,
64+ )
65+ self .assertEqual (exist , True )
66+
67+ def testHasUserKwargsIncorrectUsername (self ):
68+ with connection () as c :
69+ exist = c .has_user (
70+ username = "bad" + settings .LDAP_AUTH_TEST_USER_USERNAME ,
71+ )
72+ self .assertEqual (exist , False )
73+
6074 # Authentication tests.
6175
6276 def testAuthenticateUserSuccess (self ):
@@ -247,3 +261,154 @@ def testImportFunc(self):
247261
248262 with self .settings (LDAP_AUTH_SYNC_USER_RELATIONS = 'django.contrib.auth.get_user_model' ):
249263 self .assertTrue (callable (import_func (settings .LDAP_AUTH_SYNC_USER_RELATIONS )))
264+
265+ def testCleanUsersDeactivate (self ):
266+ """
267+ ldap_clean_users management command test
268+ """
269+ from django .contrib .auth import get_user_model
270+ User = get_user_model ()
271+ _username = "nonldap{user}" .format (user = settings .LDAP_AUTH_TEST_USER_USERNAME )
272+ user = User .objects .create_user (
273+ _username ,
274+ "nonldap{mail}" .format (mail = settings .LDAP_AUTH_TEST_USER_EMAIL ),
275+ settings .LDAP_AUTH_TEST_USER_PASSWORD )
276+ user .save ()
277+ user_count_1 = User .objects .count ()
278+ self .assertEqual (User .objects .get (username = _username ).is_active , True )
279+ call_command ("ldap_clean_users" , verbosity = 0 )
280+ user_count_2 = User .objects .count ()
281+ self .assertEqual (user_count_1 , user_count_2 )
282+ self .assertEqual (User .objects .get (username = _username ).is_active , False )
283+
284+ """
285+ Test with lookup
286+ """
287+ # Reactivate user
288+ user = User .objects .get (username = _username )
289+ user .is_active = True
290+ user .save ()
291+ # Create second user
292+ _usernameLookup = "nonldaplookup{user}" .format (user = settings .LDAP_AUTH_TEST_USER_USERNAME )
293+ user = User .objects .create_user (
294+ _usernameLookup ,
295+ "nonldaplookup{mail}" .format (mail = settings .LDAP_AUTH_TEST_USER_EMAIL ),
296+ settings .LDAP_AUTH_TEST_USER_PASSWORD )
297+ user .save ()
298+ user_count_1 = User .objects .count ()
299+ self .assertEqual (User .objects .get (username = _usernameLookup ).is_active , True )
300+ # Clean second user
301+ call_command ("ldap_clean_users" , _usernameLookup , verbosity = 0 )
302+ user_count_2 = User .objects .count ()
303+ self .assertEqual (user_count_1 , user_count_2 )
304+ self .assertEqual (User .objects .get (username = _usernameLookup ).is_active , False )
305+ self .assertEqual (User .objects .get (username = _username ).is_active , True )
306+ # Reactivate second user
307+ user = User .objects .get (username = _usernameLookup )
308+ user .is_active = True
309+ user .save ()
310+ # Clean first user
311+ call_command ("ldap_clean_users" , _username , verbosity = 0 )
312+ self .assertEqual (User .objects .get (username = _username ).is_active , False )
313+ self .assertEqual (User .objects .get (username = _usernameLookup ).is_active , True )
314+ # Lookup a non existing user (raise a CommandError)
315+ with self .assertRaises (CommandError ):
316+ call_command ("ldap_clean_users" , 'doesnonexist' , verbosity = 0 )
317+
318+ """
319+ Test with superuser
320+ """
321+ # Reactivate first user and promote to superuser
322+ user = User .objects .get (username = _username )
323+ user .is_active = True
324+ user .is_superuser = True
325+ user .save ()
326+ # Reactivate second user
327+ user = User .objects .get (username = _usernameLookup )
328+ user .is_active = True
329+ user .save ()
330+ call_command ("ldap_clean_users" , superuser = False , verbosity = 0 )
331+ self .assertEqual (User .objects .get (username = _username ).is_active , True )
332+ self .assertEqual (User .objects .get (username = _usernameLookup ).is_active , False )
333+ call_command ("ldap_clean_users" , superuser = True , verbosity = 0 )
334+ self .assertEqual (User .objects .get (username = _username ).is_active , False )
335+
336+ """
337+ Test with staff user
338+ """
339+ # Reactivate first user and promote to staff
340+ user = User .objects .get (username = _username )
341+ user .is_active = True
342+ user .is_superuser = False
343+ user .is_staff = True
344+ user .save ()
345+ # Reactivate second user
346+ user = User .objects .get (username = _usernameLookup )
347+ user .is_active = True
348+ user .save ()
349+ call_command ("ldap_clean_users" , staff = False , verbosity = 0 )
350+ self .assertEqual (User .objects .get (username = _username ).is_active , True )
351+ self .assertEqual (User .objects .get (username = _usernameLookup ).is_active , False )
352+ call_command ("ldap_clean_users" , staff = True , verbosity = 0 )
353+ self .assertEqual (User .objects .get (username = _username ).is_active , False )
354+
355+ def testCleanUsersPurge (self ):
356+ """
357+ ldap_clean_users management command test with purge argument
358+ """
359+ from django .contrib .auth import get_user_model
360+ User = get_user_model ()
361+ user = User .objects .create_user (
362+ "nonldap{user}" .format (user = settings .LDAP_AUTH_TEST_USER_USERNAME ),
363+ "nonldap{mail}" .format (mail = settings .LDAP_AUTH_TEST_USER_EMAIL ),
364+ settings .LDAP_AUTH_TEST_USER_PASSWORD )
365+ user .save ()
366+ user_count_1 = User .objects .count ()
367+ call_command ("ldap_clean_users" , verbosity = 0 , purge = True )
368+ user_count_2 = User .objects .count ()
369+ self .assertGreater (user_count_1 , user_count_2 )
370+
371+ def testCleanUsersCommandOutput (self ):
372+ # Test without purge
373+ out = StringIO ()
374+ from django .contrib .auth import get_user_model
375+ User = get_user_model ()
376+ user = User .objects .create_user (
377+ "nonldap{user}" .format (user = settings .LDAP_AUTH_TEST_USER_USERNAME ),
378+ "nonldap{mail}" .format (mail = settings .LDAP_AUTH_TEST_USER_EMAIL ),
379+ settings .LDAP_AUTH_TEST_USER_PASSWORD )
380+ user .save ()
381+ call_command ("ldap_clean_users" , stdout = out , verbosity = 1 )
382+ rows = out .getvalue ().split ("\n " )[:- 1 ]
383+ self .assertEqual (len (rows ), 1 )
384+ for row in rows :
385+ self .assertRegex (row , r'^Deactivated ' )
386+ # Reset for next test
387+ user .delete ()
388+ out .truncate (0 )
389+ out .seek (0 )
390+ # Test with purge
391+ user = User .objects .create_user (
392+ "nonldap{user}" .format (user = settings .LDAP_AUTH_TEST_USER_USERNAME ),
393+ "nonldap{mail}" .format (mail = settings .LDAP_AUTH_TEST_USER_EMAIL ),
394+ settings .LDAP_AUTH_TEST_USER_PASSWORD )
395+ user .save ()
396+ call_command ("ldap_clean_users" , stdout = out , verbosity = 1 , purge = True )
397+ rows = out .getvalue ().split ("\n " )[:- 1 ]
398+ self .assertEqual (len (rows ), 1 )
399+ for row in rows :
400+ self .assertRegex (row , r'^Purged ' )
401+
402+ def testReCleanUsersDoesntRecreateUsers (self ):
403+ from django .contrib .auth import get_user_model
404+ User = get_user_model ()
405+ user = User .objects .create_user (
406+ "nonldap{user}" .format (user = settings .LDAP_AUTH_TEST_USER_USERNAME ),
407+ "nonldap{mail}" .format (mail = settings .LDAP_AUTH_TEST_USER_EMAIL ),
408+ settings .LDAP_AUTH_TEST_USER_PASSWORD )
409+ user .save ()
410+ call_command ("ldap_clean_users" , verbosity = 0 , purge = True )
411+ user_count_1 = User .objects .count ()
412+ call_command ("ldap_clean_users" , verbosity = 0 , purge = True )
413+ user_count_2 = User .objects .count ()
414+ self .assertEqual (user_count_1 , user_count_2 )
0 commit comments