@@ -380,6 +380,48 @@ def test_put_user(self):
380380 assert scim_user .
username == "[email protected] " 381381 assert scim_user .active is True
382382
383+ def test_put_reactivate_user (self ):
384+ user = User .objects .create_user (
385+ 386+ password = None ,
387+ first_name = "Put" ,
388+ last_name = "Reactivate" ,
389+ is_email_verified = True ,
390+ )
391+ # Create then remove membership to simulate deactivated user
392+ OrganizationMembership .objects .create (
393+ user = user , organization = self .organization , level = OrganizationMembership .Level .MEMBER
394+ )
395+ SCIMProvisionedUser .objects .create (
396+ user = user ,
397+ organization_domain = self .domain ,
398+ 399+ identity_provider = SCIMProvisionedUser .IdentityProvider .OTHER ,
400+ active = True ,
401+ )
402+ # Deactivate
403+ OrganizationMembership .objects .filter (user = user , organization = self .organization ).delete ()
404+ SCIMProvisionedUser .objects .filter (user = user , organization_domain = self .domain ).update (active = False )
405+ assert not OrganizationMembership .objects .filter (user = user , organization = self .organization ).exists ()
406+
407+ put_data = {
408+ "schemas" : ["urn:ietf:params:scim:schemas:core:2.0:User" ],
409+ 410+ "name" : {"givenName" : "Put" , "familyName" : "Reactivate" },
411+ "emails" : [{
"value" :
"[email protected] " ,
"primary" :
True }],
412+ "active" : True ,
413+ }
414+
415+ response = self .client .put (
416+ f"/scim/v2/{ self .domain .id } /Users/{ user .id } " , data = put_data , content_type = "application/scim+json"
417+ )
418+
419+ assert response .status_code == status .HTTP_200_OK
420+ assert response .json ()["active" ] is True
421+ assert OrganizationMembership .objects .filter (user = user , organization = self .organization ).exists ()
422+ scim_user = SCIMProvisionedUser .objects .get (user = user , organization_domain = self .domain )
423+ assert scim_user .active is True
424+
383425 def test_put_user_not_found (self ):
384426 put_data = {
385427 "schemas" : ["urn:ietf:params:scim:schemas:core:2.0:User" ],
@@ -644,6 +686,41 @@ def test_patch_add_active_user_with_simple_path(self):
644686 assert response .status_code == status .HTTP_200_OK
645687 assert OrganizationMembership .objects .filter (user = user , organization = self .organization ).exists ()
646688
689+ def test_patch_replace_reactivate_user (self ):
690+ user = User .objects .create_user (
691+ email = "[email protected] " ,
password = None ,
first_name = "Test" ,
is_email_verified = True 692+ )
693+ # Create then remove membership to simulate deactivated user
694+ OrganizationMembership .objects .create (
695+ user = user , organization = self .organization , level = OrganizationMembership .Level .MEMBER
696+ )
697+ SCIMProvisionedUser .objects .create (
698+ user = user ,
699+ organization_domain = self .domain ,
700+ 701+ identity_provider = SCIMProvisionedUser .IdentityProvider .OTHER ,
702+ active = True ,
703+ )
704+ # Deactivate
705+ OrganizationMembership .objects .filter (user = user , organization = self .organization ).delete ()
706+ SCIMProvisionedUser .objects .filter (user = user , organization_domain = self .domain ).update (active = False )
707+ assert not OrganizationMembership .objects .filter (user = user , organization = self .organization ).exists ()
708+
709+ patch_data = {
710+ "schemas" : ["urn:ietf:params:scim:api:messages:2.0:PatchOp" ],
711+ "Operations" : [{"op" : "replace" , "path" : "active" , "value" : True }],
712+ }
713+
714+ response = self .client .patch (
715+ f"/scim/v2/{ self .domain .id } /Users/{ user .id } " , data = patch_data , content_type = "application/scim+json"
716+ )
717+
718+ assert response .status_code == status .HTTP_200_OK
719+ assert response .json ()["active" ] is True
720+ assert OrganizationMembership .objects .filter (user = user , organization = self .organization ).exists ()
721+ scim_user = SCIMProvisionedUser .objects .get (user = user , organization_domain = self .domain )
722+ assert scim_user .active is True
723+
647724 def test_patch_add_user_given_name_with_dotted_path (self ):
648725 user = User .objects .create_user (
649726 email = "[email protected] " ,
password = None ,
first_name = "" ,
last_name = "Existing" ,
is_email_verified = True
0 commit comments