This is an automated email from the ASF dual-hosted git repository.

pradeepagrawal8184 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ranger.git


The following commit(s) were added to refs/heads/master by this push:
     new d980f9f58 RANGER-5623: Updated XUserMgr.java to solve UI consistency 
for put groupusers endpoint (#992)
d980f9f58 is described below

commit d980f9f580289870bb5135b756131d6584f64a5c
Author: KRISHNA CHAITANYA MUTTEVI 
<[email protected]>
AuthorDate: Mon Jul 6 15:42:03 2026 +0530

    RANGER-5623: Updated XUserMgr.java to solve UI consistency for put 
groupusers endpoint (#992)
    
    * RANGER-5623: Updated XUserMgr.java to solve UI consistency in groupusers
    
    * RANGER-5623: Updated the TextXUserMgr and resolved the checkstyle error
    
    * RANGER-5623: Added the validation check for the invalid vXGroupUser input
    
    * RANGER-5623: Addressed the review comments to optimise and add proper 
validation
---
 .../main/java/org/apache/ranger/biz/XUserMgr.java  |  23 ++++
 .../java/org/apache/ranger/biz/TestXUserMgr.java   | 142 +++++++++++++++++----
 2 files changed, 142 insertions(+), 23 deletions(-)

diff --git a/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java 
b/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java
index f61b88e65..edc18e133 100755
--- a/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java
@@ -1651,6 +1651,29 @@ public VXGroupUser updateXGroupUser(VXGroupUser 
vXGroupUser) {
 
         xaBizUtil.blockAuditorRoleUser();
 
+        if (vXGroupUser == null) {
+            throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, 
"Groupuser not found", true);
+        }
+
+        if (vXGroupUser.getId() != null && 
daoManager.getXXGroupUser().getById(vXGroupUser.getId()) == null) {
+            throw restErrorUtil.createRESTException("Group-User mapping not 
found with ID: " + vXGroupUser.getId(),
+                    MessageEnums.DATA_NOT_FOUND);
+        }
+
+        XXGroup xGroup = 
daoManager.getXXGroup().findByGroupName(vXGroupUser.getName());
+        if (xGroup == null) {
+            throw restErrorUtil.createRESTException("Group not found: " + 
vXGroupUser.getName(),
+                    MessageEnums.DATA_NOT_FOUND);
+        }
+
+        XXUser xUser = daoManager.getXXUser().getById(vXGroupUser.getUserId());
+        if (xUser == null) {
+            throw restErrorUtil.createRESTException("User not found with ID: " 
+ vXGroupUser.getUserId(),
+                    MessageEnums.DATA_NOT_FOUND);
+        }
+
+        vXGroupUser.setParentGroupId(xGroup.getId());
+
         return super.updateXGroupUser(vXGroupUser);
     }
 
diff --git 
a/security-admin/src/test/java/org/apache/ranger/biz/TestXUserMgr.java 
b/security-admin/src/test/java/org/apache/ranger/biz/TestXUserMgr.java
index b8d1f1f59..a316b440c 100644
--- a/security-admin/src/test/java/org/apache/ranger/biz/TestXUserMgr.java
+++ b/security-admin/src/test/java/org/apache/ranger/biz/TestXUserMgr.java
@@ -2050,14 +2050,47 @@ public void test54modifyUserActiveStatus() {
     @Test
     public void test55updateXGroupUser() {
         setup();
-        VXUser vxUser = vxUser();
-        vxUser.setUserSource(RangerCommonEnums.USER_EXTERNAL);
+
         VXGroupUser vxGroupUser = vxGroupUser();
+
+        // Mock GroupUser
+        XXGroupUserDao xxGroupUserDao = Mockito.mock(XXGroupUserDao.class);
+        XXGroupUser xxGroupUser = new XXGroupUser();
+
+        Mockito.when(daoManager.getXXGroupUser()).thenReturn(xxGroupUserDao);
+        
Mockito.when(xxGroupUserDao.getById(vxGroupUser.getId())).thenReturn(xxGroupUser);
+
+        // Mock Group
+        XXGroupDao xxGroupDao = Mockito.mock(XXGroupDao.class);
+        XXGroup xxGroup = new XXGroup();
+        xxGroup.setId(1L);
+
+        Mockito.when(daoManager.getXXGroup()).thenReturn(xxGroupDao);
+        
Mockito.when(xxGroupDao.findByGroupName(vxGroupUser.getName())).thenReturn(xxGroup);
+
+        // Mock User
+        XXUserDao xxUserDao = Mockito.mock(XXUserDao.class);
+        XXUser xxUser = new XXUser();
+
+        Mockito.when(daoManager.getXXUser()).thenReturn(xxUserDao);
+        
Mockito.when(xxUserDao.getById(vxGroupUser.getUserId())).thenReturn(xxUser);
+
+        // Mock update
         
Mockito.when(xGroupUserService.updateResource(Mockito.any())).thenReturn(vxGroupUser);
-        VXGroupUser dbvxUser = xUserMgr.updateXGroupUser(vxGroupUser);
-        Assertions.assertNotNull(dbvxUser);
-        Assertions.assertEquals(dbvxUser.getId(), vxGroupUser.getId());
-        Assertions.assertEquals(dbvxUser.getName(), vxGroupUser.getName());
+
+        VXGroupUser result = xUserMgr.updateXGroupUser(vxGroupUser);
+
+        Assertions.assertNotNull(result);
+        Assertions.assertEquals(vxGroupUser.getId(), result.getId());
+        Assertions.assertEquals(vxGroupUser.getName(), result.getName());
+
+        // addition of parent group id
+        Assertions.assertEquals(1L, result.getParentGroupId());
+
+        Mockito.verify(xxGroupUserDao).getById(vxGroupUser.getId());
+        Mockito.verify(xxGroupDao).findByGroupName(vxGroupUser.getName());
+        Mockito.verify(xxUserDao).getById(vxGroupUser.getUserId());
+
         Mockito.verify(xGroupUserService).updateResource(Mockito.any());
     }
 
@@ -2500,24 +2533,14 @@ public void test81checkAdminAccess() {
     }
 
     @Test
-    public void test82updateXgroupUserForGroupUpdate() {
+    public void test82updateXGroupUser_nullVXGroupUser() {
         setup();
-        XXGroupUserDao    xxGroupUserDao  = Mockito.mock(XXGroupUserDao.class);
-        VXGroup           vXGroup         = vxGroup();
-        List<XXGroupUser> xXGroupUserList = new ArrayList<>();
-        VXGroupUser       vxGroupUser     = vxGroupUser();
-        XXGroupUser       xXGroupUser     = new XXGroupUser();
-        xXGroupUser.setId(vxGroupUser.getId());
-        xXGroupUser.setName(vxGroupUser.getName());
-        xXGroupUser.setParentGroupId(vxGroupUser.getParentGroupId());
-        xXGroupUser.setUserId(vxGroupUser.getUserId());
-        xXGroupUserList.add(xXGroupUser);
-        Mockito.when(daoManager.getXXGroupUser()).thenReturn(xxGroupUserDao);
-        
Mockito.when(xxGroupUserDao.findByGroupId(vXGroup.getId())).thenReturn(xXGroupUserList);
-        
Mockito.when(xGroupUserService.populateViewBean(xXGroupUser)).thenReturn(vxGroupUser);
-        xUserMgr.updateXgroupUserForGroupUpdate(vXGroup);
-        Mockito.verify(daoManager).getXXGroupUser();
-        Mockito.verify(xxGroupUserDao).findByGroupId(vXGroup.getId());
+
+        
Mockito.when(restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST,
 "Groupuser not found", true)).thenThrow(new WebApplicationException());
+
+        Assertions.assertThrows(WebApplicationException.class, () -> {
+            xUserMgr.updateXGroupUser(null);
+        });
     }
 
     @Test
@@ -4482,6 +4505,79 @@ public void test01CreateXUser_federated() {
         });
     }
 
+    @Test
+    public void test133updateXGroupUser_groupUserMappingNotFound() {
+        setup();
+
+        VXGroupUser vxGroupUser = vxGroupUser();
+
+        XXGroupUserDao xxGroupUserDao = Mockito.mock(XXGroupUserDao.class);
+
+        Mockito.when(daoManager.getXXGroupUser()).thenReturn(xxGroupUserDao);
+        
Mockito.when(xxGroupUserDao.getById(vxGroupUser.getId())).thenReturn(null);
+
+        
Mockito.when(restErrorUtil.createRESTException(Mockito.contains("Group-User 
mapping not found"), Mockito.eq(MessageEnums.DATA_NOT_FOUND))).thenThrow(new 
WebApplicationException());
+
+        Assertions.assertThrows(WebApplicationException.class, () -> {
+            xUserMgr.updateXGroupUser(vxGroupUser);
+        });
+    }
+
+    @Test
+    public void test134updateXGroupUser_groupNotFound() {
+        setup();
+
+        VXGroupUser vxGroupUser = vxGroupUser();
+
+        XXGroupUserDao xxGroupUserDao = Mockito.mock(XXGroupUserDao.class);
+        XXGroupUser xxGroupUser = new XXGroupUser();
+
+        Mockito.when(daoManager.getXXGroupUser()).thenReturn(xxGroupUserDao);
+        
Mockito.when(xxGroupUserDao.getById(vxGroupUser.getId())).thenReturn(xxGroupUser);
+
+        XXGroupDao xxGroupDao = Mockito.mock(XXGroupDao.class);
+
+        Mockito.when(daoManager.getXXGroup()).thenReturn(xxGroupDao);
+        
Mockito.when(xxGroupDao.findByGroupName(vxGroupUser.getName())).thenReturn(null);
+
+        Mockito.when(restErrorUtil.createRESTException(Mockito.contains("Group 
not found"), Mockito.eq(MessageEnums.DATA_NOT_FOUND))).thenThrow(new 
WebApplicationException());
+
+        Assertions.assertThrows(WebApplicationException.class, () -> {
+            xUserMgr.updateXGroupUser(vxGroupUser);
+        });
+    }
+
+    @Test
+    public void test135updateXGroupUser_userNotFound() {
+        setup();
+
+        VXGroupUser vxGroupUser = vxGroupUser();
+
+        XXGroupUserDao xxGroupUserDao = Mockito.mock(XXGroupUserDao.class);
+        XXGroupUser xxGroupUser = new XXGroupUser();
+
+        Mockito.when(daoManager.getXXGroupUser()).thenReturn(xxGroupUserDao);
+        
Mockito.when(xxGroupUserDao.getById(vxGroupUser.getId())).thenReturn(xxGroupUser);
+
+        XXGroupDao xxGroupDao = Mockito.mock(XXGroupDao.class);
+        XXGroup xxGroup = new XXGroup();
+        xxGroup.setId(1L);
+
+        Mockito.when(daoManager.getXXGroup()).thenReturn(xxGroupDao);
+        
Mockito.when(xxGroupDao.findByGroupName(vxGroupUser.getName())).thenReturn(xxGroup);
+
+        XXUserDao xxUserDao = Mockito.mock(XXUserDao.class);
+
+        Mockito.when(daoManager.getXXUser()).thenReturn(xxUserDao);
+        
Mockito.when(xxUserDao.getById(vxGroupUser.getUserId())).thenReturn(null);
+
+        Mockito.when(restErrorUtil.createRESTException(Mockito.contains("User 
not found"), Mockito.eq(MessageEnums.DATA_NOT_FOUND))).thenThrow(new 
WebApplicationException());
+
+        Assertions.assertThrows(WebApplicationException.class, () -> {
+            xUserMgr.updateXGroupUser(vxGroupUser);
+        });
+    }
+
     private VXUser vxUser() {
         Collection<String> userRoleList = new ArrayList<>();
         userRoleList.add("ROLE_USER");

Reply via email to