Skip to content

Commit d3f4f3d

Browse files
committed
Merge remote-tracking branch 'origin/main' into AYS-501/user-role-update
2 parents 05083c8 + 0445c7e commit d3f4f3d

File tree

3 files changed

+147
-3
lines changed

3 files changed

+147
-3
lines changed

src/main/java/org/ays/auth/service/impl/AysRoleUpdateServiceImpl.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,15 @@ public void update(final String id,
6262
.filter(roleFromDatabase -> identity.getInstitutionId().equals(roleFromDatabase.getInstitution().getId()))
6363
.orElseThrow(() -> new AysRoleNotExistByIdException(id));
6464

65-
this.checkExistingRoleNameByWithoutId(id, updateRequest.getName());
65+
if (!role.getName().equals(updateRequest.getName())) {
66+
this.checkExistingRoleNameByWithoutId(id, updateRequest.getName());
67+
}
6668

6769
final List<AysPermission> permissions = this.checkExistingPermissionsAndGet(updateRequest.getPermissionIds());
6870

6971
role.setName(updateRequest.getName());
7072
role.setPermissions(permissions);
73+
role.setUpdatedUser(identity.getUserId());
7174

7275
roleSavePort.save(role);
7376
}

src/test/java/org/ays/auth/controller/AysRoleEndToEndTest.java

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -513,6 +513,62 @@ void givenValidRoleUpdateRequest_whenRoleUpdated_thenReturnSuccess() throws Exce
513513
));
514514
}
515515

516+
@Test
517+
void givenValidRoleUpdateRequest_whenPermissionsUpdatedAndNameUnchanged_thenReturnSuccess() throws Exception {
518+
519+
// Initialize
520+
List<AysPermission> permissions = permissionReadPort.findAll();
521+
AysRole role = roleSavePort.save(
522+
new AysRoleBuilder()
523+
.withValidValues()
524+
.withoutId()
525+
.withName("Admin Role")
526+
.withPermissions(permissions)
527+
.withInstitution(new InstitutionBuilder().withId(AysValidTestData.Admin.INSTITUTION_ID).build())
528+
.build()
529+
);
530+
531+
// Given
532+
String id = role.getId();
533+
AysPermission newPermission = permissions.get(0);
534+
List<AysPermission> newPermissions = List.of(newPermission);
535+
536+
Set<String> newPermissionIds = newPermissions.stream()
537+
.map(AysPermission::getId)
538+
.collect(Collectors.toSet());
539+
540+
AysRoleUpdateRequest updateRequest = new AysRoleUpdateRequestBuilder()
541+
.withName("Admin Role")
542+
.withPermissionIds(newPermissionIds)
543+
.build();
544+
545+
// Then
546+
String endpoint = BASE_PATH.concat("/role/").concat(id);
547+
MockHttpServletRequestBuilder mockHttpServletRequestBuilder = AysMockMvcRequestBuilders
548+
.put(endpoint, adminToken.getAccessToken(), updateRequest);
549+
550+
AysResponse<Void> mockResponse = AysResponseBuilder.SUCCESS;
551+
552+
aysMockMvc.perform(mockHttpServletRequestBuilder, mockResponse)
553+
.andExpect(AysMockResultMatchersBuilders.status()
554+
.isOk())
555+
.andExpect(AysMockResultMatchersBuilders.response()
556+
.doesNotExist());
557+
558+
// Verify
559+
Optional<AysRole> roleFromDatabase = roleReadPort.findById(id);
560+
561+
Assertions.assertTrue(roleFromDatabase.isPresent());
562+
Assertions.assertNotNull(roleFromDatabase.get().getId());
563+
Assertions.assertNotNull(roleFromDatabase.get().getInstitution());
564+
Assertions.assertEquals(updateRequest.getName(), roleFromDatabase.get().getName());
565+
Assertions.assertEquals(AysRoleStatus.ACTIVE, roleFromDatabase.get().getStatus());
566+
newPermissionIds.forEach(permissionId -> Assertions.assertTrue(
567+
roleFromDatabase.get().getPermissions().stream()
568+
.anyMatch(permission -> permission.getId().equals(permissionId))
569+
));
570+
}
571+
516572
@Test
517573
void givenValidIdAndRoleUpdateRequest_whenRequestHasSuperPermissionsAndUserIsNotSuperAdmin_thenReturnForbiddenError() throws Exception {
518574

src/test/java/org/ays/auth/service/impl/AysRoleUpdateServiceImplTest.java

Lines changed: 87 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import org.ays.auth.model.AysPermissionBuilder;
77
import org.ays.auth.model.AysRole;
88
import org.ays.auth.model.AysRoleBuilder;
9+
import org.ays.auth.model.enums.AysPermissionCategory;
910
import org.ays.auth.model.enums.AysRoleStatus;
1011
import org.ays.auth.model.request.AysRoleUpdateRequest;
1112
import org.ays.auth.model.request.AysRoleUpdateRequestBuilder;
@@ -34,6 +35,7 @@
3435
import java.util.List;
3536
import java.util.Optional;
3637
import java.util.UUID;
38+
import java.util.Set;
3739

3840
class AysRoleUpdateServiceImplTest extends AysUnitTest {
3941

@@ -112,7 +114,7 @@ void givenIdAndRoleUpdateRequest_whenValuesValid_thenUpdateRoleWithSuperPermissi
112114
Mockito.verify(identity, Mockito.times(1))
113115
.isSuperAdmin();
114116

115-
Mockito.verify(identity, Mockito.never())
117+
Mockito.verify(identity, Mockito.times(1))
116118
.getUserId();
117119

118120
Mockito.verify(roleSavePort, Mockito.times(1))
@@ -156,6 +158,9 @@ void givenIdAndRoleUpdateRequest_whenValuesValid_thenUpdateRole() {
156158
Mockito.when(identity.isSuperAdmin())
157159
.thenReturn(false);
158160

161+
Mockito.when(identity.getUserId())
162+
.thenReturn("mockUpdatedUser");
163+
159164
Mockito.when(roleSavePort.save(Mockito.any(AysRole.class)))
160165
.thenReturn(Mockito.mock(AysRole.class));
161166

@@ -178,7 +183,87 @@ void givenIdAndRoleUpdateRequest_whenValuesValid_thenUpdateRole() {
178183
Mockito.verify(identity, Mockito.times(1))
179184
.isSuperAdmin();
180185

181-
Mockito.verify(identity, Mockito.never())
186+
Mockito.verify(identity, Mockito.times(1))
187+
.getUserId();
188+
189+
Mockito.verify(roleSavePort, Mockito.times(1))
190+
.save(Mockito.any(AysRole.class));
191+
}
192+
193+
@Test
194+
void givenIdAndRoleUpdateRequest_whenPermissionsUpdatedAndNameUnchanged_thenUpdateRole() {
195+
// Given
196+
String mockId = AysRandomUtil.generateUUID();
197+
AysRoleUpdateRequest mockUpdateRequest = new AysRoleUpdateRequestBuilder()
198+
.withName("ExistingName")
199+
.withPermissionIds(Set.of(UUID.randomUUID().toString()))
200+
.build();
201+
202+
AysRole mockRole = new AysRoleBuilder()
203+
.withName("ExistingName")
204+
.withPermissions(List.of(
205+
new AysPermissionBuilder().withValidValues()
206+
.withName("institution:page")
207+
.withCategory(AysPermissionCategory.PAGE)
208+
.build()
209+
))
210+
.withId(mockId)
211+
.build();
212+
213+
// When
214+
Mockito.when(roleReadPort.findById(Mockito.anyString()))
215+
.thenReturn(Optional.of(mockRole));
216+
217+
Mockito.when(identity.getInstitutionId())
218+
.thenReturn(mockRole.getInstitution().getId());
219+
220+
Mockito.when(roleReadPort.findByName(Mockito.anyString())).
221+
thenReturn(Optional.of(mockRole));
222+
223+
224+
List<AysPermission> mockPermissions = new ArrayList<>();
225+
mockUpdateRequest.getPermissionIds().forEach(permissionId -> {
226+
AysPermission mockPermission = new AysPermissionBuilder()
227+
.withValidValues()
228+
.withId(permissionId)
229+
.withIsSuper(false)
230+
.build();
231+
mockPermissions.add(mockPermission);
232+
});
233+
Mockito.when(permissionReadPort.findAllByIds(Mockito.anySet()))
234+
.thenReturn(mockPermissions);
235+
236+
Mockito.when(identity.isSuperAdmin())
237+
.thenReturn(false);
238+
239+
Mockito.when(identity.getUserId())
240+
.thenReturn("mockUserId");
241+
242+
Mockito.when(roleSavePort.save(Mockito.any(AysRole.class)))
243+
.thenReturn(Mockito.mock(AysRole.class));
244+
245+
// Then
246+
roleUpdateService.update(mockId, mockUpdateRequest);
247+
248+
// Verify
249+
Mockito.verify(roleReadPort, Mockito.times(1))
250+
.findById(Mockito.anyString());
251+
252+
Mockito.verify(identity, Mockito.times(1))
253+
.getInstitutionId();
254+
255+
Mockito.verify(roleReadPort, Mockito.never())
256+
.findByName(Mockito.anyString());
257+
258+
259+
Mockito.verify(permissionReadPort, Mockito.times(1))
260+
.findAllByIds(Mockito.anySet());
261+
262+
Mockito.verify(identity, Mockito.times(1))
263+
.isSuperAdmin();
264+
265+
266+
Mockito.verify(identity, Mockito.times(1))
182267
.getUserId();
183268

184269
Mockito.verify(roleSavePort, Mockito.times(1))

0 commit comments

Comments
 (0)