@@ -790,8 +790,6 @@ void createWithLegacyToken() throws Exception {
790790 @ Test
791791 @ SuppressWarnings ("unchecked" )
792792 void updateDisplayNameScimProvivisiong () throws Exception {
793- //Because the user is changed and provisionings are queried
794- stubForManageProvisioning (List .of ("4" ));
795793 AccessCookieFilter accessCookieFilter = openIDConnectFlow ("/api/v1/users/login" , SUPER_SUB );
796794
797795 super .stubForManagerProvidersByIdIn (EntityType .SAML20_SP , List .of ("4" ));
@@ -828,14 +826,56 @@ void updateDisplayNameScimProvivisiong() throws Exception {
828826 //GroupRequest can not be deserialized from String due to missing constructors and setters
829827 Map <String , Object > groupRequest = objectMapper .readValue (serveEvent .getRequest ().getBodyAsString (), new TypeReference <>() {
830828 }) ;
831- System .out .println (groupRequest );
832829 List <Map <String , String >> operations = (List <Map <String , String >>) groupRequest .get ("Operations" );
833830 Map <String , String > operation = operations .getFirst ();
834831 assertEquals ("replace" , operation .get ("op" ));
835832 assertEquals ("displayName" , operation .get ("path" ));
836833 assertEquals ("changed" , operation .get ("value" ));
837834 }
838835
836+ @ Test
837+ @ SuppressWarnings ("unchecked" )
838+ void updateDisplayNameScimProvivisiongPut () throws Exception {
839+ AccessCookieFilter accessCookieFilter = openIDConnectFlow ("/api/v1/users/login" , SUPER_SUB );
840+
841+ super .stubForManagerProvidersByIdIn (EntityType .SAML20_SP , List .of ("1" ));
842+ super .stubForManageProvisioning (List .of ("1" ));
843+
844+ Role roleDB = roleRepository .search ("wiki" , 1 ).get (0 );
845+ roleDB .setName ("changed" );
846+
847+ //Ensure update provisioning is done
848+ remoteProvisionedGroupRepository .save (new RemoteProvisionedGroup (roleDB , UUID .randomUUID ().toString (), "7" ));
849+ //Prevent new user POST provisionings
850+ List <UserRole > userRoles = userRoleRepository .findByRole (roleDB );
851+ userRoles .forEach (userRole -> {
852+ remoteProvisionedUserRepository .save (new RemoteProvisionedUser (userRole .getUser (), UUID .randomUUID ().toString (), "7" ));
853+ });
854+
855+ //There will be a PUT request, with the full member content and the changed displayName
856+ super .stubForUpdateScimRole ();
857+ Role updated = given ()
858+ .when ()
859+ .filter (accessCookieFilter .cookieFilter ())
860+ .accept (ContentType .JSON )
861+ .header (accessCookieFilter .csrfToken ().getHeaderName (), accessCookieFilter .csrfToken ().getToken ())
862+ .contentType (ContentType .JSON )
863+ .body (roleDB )
864+ .put ("/api/v1/roles" )
865+ .as (Role .class );
866+ assertEquals ("changed" , updated .getName ());
867+
868+ List <ServeEvent > serveEvents = getAllServeEvents ();
869+ ServeEvent serveEvent = serveEvents .stream ()
870+ .filter (event -> event .getRequest ().getUrl ().startsWith ("/api/scim/v2/Groups" ))
871+ .findFirst ().orElseThrow (() -> new NotFoundException ("No Group patch request found" ));
872+ //GroupRequest can not be deserialized from String due to missing constructors and setters
873+ Map <String , Object > groupRequest = objectMapper .readValue (serveEvent .getRequest ().getBodyAsString (), new TypeReference <>() {
874+ }) ;
875+ assertEquals ("changed" , groupRequest .get ("displayName" ));
876+ assertEquals (userRoles .size (), ((List <Map <String , String >>) groupRequest .get ("members" )).size ());
877+ }
878+
839879 private Role roleByName (String name , List <Role > roles ) {
840880 return roles .stream ().filter (role -> role .getName ().equalsIgnoreCase (name )).findFirst ().orElseThrow (IllegalArgumentException ::new );
841881 }
0 commit comments