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

ramackri pushed a commit to branch ranger-2.9
in repository https://gitbox.apache.org/repos/asf/ranger.git


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

commit 2b0dac083eb7d7c75773c55174bf82b6c01762d6
Author: KRISHNA CHAITANYA MUTTEVI 
<[email protected]>
AuthorDate: Thu Jul 9 15:55:27 2026 +0530

    RANGER-5623: Updated XUserMgr.java to solve UI consistency for put 
groupusers endpoint (#1056)
---
 .../main/java/org/apache/ranger/biz/XUserMgr.java  |  25 ++++
 .../java/org/apache/ranger/biz/TestXUserMgr.java   | 147 +++++++++++++++++----
 2 files changed, 147 insertions(+), 25 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 480042458..1b013b314 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
@@ -1016,7 +1016,32 @@ protected void updateXgroupUserForGroupUpdate(VXGroup 
vXGroup) {
 
        public VXGroupUser updateXGroupUser(VXGroupUser vXGroupUser) {
                checkAdminAccess();
+
                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 4f684f600..f6ab5b116 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
@@ -132,6 +132,7 @@
 import org.junit.FixMethodOrder;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
 import org.junit.rules.ExpectedException;
 import org.junit.runner.RunWith;
 import org.junit.runners.MethodSorters;
@@ -2345,15 +2346,48 @@ public void test54modifyUserActiveStatus() {
        @Test
        public void test55updateXGroupUser() {
                setup();
-               VXUser vxUser = vxUser();
-               vxUser.setUserSource(RangerCommonEnums.USER_EXTERNAL);
+
                VXGroupUser vxGroupUser = vxGroupUser();
-               Mockito.when(xGroupUserService.updateResource((VXGroupUser) 
Mockito.any())).thenReturn(vxGroupUser);
-               VXGroupUser dbvxUser = xUserMgr.updateXGroupUser(vxGroupUser);
-               Assert.assertNotNull(dbvxUser);
-               Assert.assertEquals(dbvxUser.getId(), vxGroupUser.getId());
-               Assert.assertEquals(dbvxUser.getName(), vxGroupUser.getName());
-               Mockito.verify(xGroupUserService).updateResource((VXGroupUser) 
Mockito.any());
+
+               // 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 result = xUserMgr.updateXGroupUser(vxGroupUser);
+
+               Assert.assertNotNull(result);
+               Assert.assertEquals(vxGroupUser.getId(), result.getId());
+               Assert.assertEquals(vxGroupUser.getName(), result.getName());
+
+               // addition of parent group id
+               Assert.assertEquals(Long.valueOf(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());
        }
 
        @Test
@@ -2763,24 +2797,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<XXGroupUser>();
-               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());
+
+               Assert.assertThrows(WebApplicationException.class, () -> {
+                       xUserMgr.updateXGroupUser(null);
+               });
        }
 
        @Test
@@ -4737,4 +4761,77 @@ public void test01CreateXUser_federated() {
                Assert.assertEquals(dbvxUser.getUserSource(), 
RangerCommonEnums.USER_FEDERATED);
                Mockito.verify(xUserService).readResourceWithOutLogin(userId);
        }
+
+       @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());
+
+               Assert.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());
+
+               Assert.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);
+               });
+       }
 }

Reply via email to