Skip to content

Commit a8f09a2

Browse files
authored
AYS-501 | Fixed the time and user were not being updated in the User update (#388)
1 parent 5b2bc1a commit a8f09a2

File tree

3 files changed

+170
-13
lines changed

3 files changed

+170
-13
lines changed

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

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,13 @@ public void update(final String id,
5454
final AysUserUpdateRequest updateRequest) {
5555

5656
final AysUser user = userReadPort.findById(id)
57-
.filter(userFromDatabase -> identity.getInstitutionId().equals(userFromDatabase.getInstitution().getId()))
5857
.orElseThrow(() -> new AysUserNotExistByIdException(id));
5958

59+
String institutionId = identity.getInstitutionId();
60+
if (!institutionId.equals(user.getInstitution().getId())) {
61+
throw new AysUserNotExistByIdException(id);
62+
}
63+
6064
if (!(user.isActive() || user.isPassive())) {
6165
throw new AysUserIsNotActiveOrPassiveException(id);
6266
}
@@ -66,15 +70,22 @@ public void update(final String id,
6670
.lineNumber(updateRequest.getPhoneNumber().getLineNumber())
6771
.build();
6872

69-
this.validatePhoneNumber(user, phoneNumber);
70-
this.validateEmailAddress(user, updateRequest.getEmailAddress());
71-
this.validateRolesAndSet(user, updateRequest.getRoleIds());
73+
if (!user.getPhoneNumber().equals(phoneNumber)) {
74+
this.validatePhoneNumber(user, phoneNumber);
75+
user.setPhoneNumber(phoneNumber);
76+
}
77+
78+
if (!user.getEmailAddress().equals(updateRequest.getEmailAddress())) {
79+
this.validateEmailAddress(user, updateRequest.getEmailAddress());
80+
user.setEmailAddress(updateRequest.getEmailAddress());
81+
}
82+
83+
this.validateRolesAndSet(user, updateRequest.getRoleIds(), institutionId);
7284

7385
user.setFirstName(updateRequest.getFirstName());
7486
user.setLastName(updateRequest.getLastName());
75-
user.setEmailAddress(updateRequest.getEmailAddress());
7687
user.setCity(updateRequest.getCity());
77-
user.setPhoneNumber(phoneNumber);
88+
user.setUpdatedUser(identity.getUserId());
7889

7990
userSavePort.save(user);
8091
}
@@ -207,7 +218,7 @@ private void validateEmailAddress(AysUser user, String emailAddress) {
207218
* @param roleIds The set of role IDs to be checked and retrieved.
208219
* @throws AysRolesNotExistException if any of the provided role IDs do not exist.
209220
*/
210-
private void validateRolesAndSet(final AysUser user, final Set<String> roleIds) {
221+
private void validateRolesAndSet(final AysUser user, final Set<String> roleIds, final String institutionId) {
211222

212223
boolean isRoleNotChanged = user.getRoles().stream()
213224
.allMatch(role -> roleIds.contains(role.getId()));
@@ -217,7 +228,7 @@ private void validateRolesAndSet(final AysUser user, final Set<String> roleIds)
217228

218229
final List<AysRole> roles = roleReadPort.findAllByIds(roleIds).stream()
219230
.filter(AysRole::isActive)
220-
.filter(role -> identity.getInstitutionId().equals(role.getInstitution().getId()))
231+
.filter(role -> institutionId.equals(role.getInstitution().getId()))
221232
.toList();
222233

223234
if (roles.size() == roleIds.size()) {

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

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
import org.ays.auth.port.AysRoleReadPort;
1818
import org.ays.auth.port.AysUserReadPort;
1919
import org.ays.auth.port.AysUserSavePort;
20+
import org.ays.common.model.AysPhoneNumberBuilder;
21+
import org.ays.common.model.request.AysPhoneNumberRequestBuilder;
2022
import org.ays.common.model.response.AysPageResponse;
2123
import org.ays.common.model.response.AysResponse;
2224
import org.ays.common.model.response.AysResponseBuilder;
@@ -373,6 +375,78 @@ void givenValidIdAndUserUpdateRequest_whenUserUpdated_thenReturnSuccess() throws
373375
Assertions.assertNotNull(userFromDatabase.get().getUpdatedAt());
374376
}
375377

378+
@Test
379+
void givenValidIdAndUserUpdateRequest_whenRolesUpdatedOnly_thenReturnSuccess() throws Exception {
380+
381+
// Initialize
382+
Institution institution = new InstitutionBuilder()
383+
.withId(AysValidTestData.Admin.INSTITUTION_ID)
384+
.build();
385+
386+
List<AysRole> roles = roleReadPort.findAllActivesByInstitutionId(institution.getId());
387+
388+
AysUser user = userSavePort.save(
389+
new AysUserBuilder()
390+
.withValidValues()
391+
.withFirstName("Test")
392+
.withLastName("Dene")
393+
.withEmailAddress("Test.deneme@afetyonetimsistemi.org")
394+
.withCity("İzmir")
395+
.withPhoneNumber(new AysPhoneNumberBuilder().withValidValues().build())
396+
.withoutId()
397+
.withRoles(roles)
398+
.withInstitution(institution)
399+
.build()
400+
);
401+
402+
// Given
403+
String id = user.getId();
404+
AysRole newRole = roles.get(0);
405+
List<AysRole> newRoles = List.of(newRole);
406+
407+
Set<String> newRoleIds = newRoles.stream()
408+
.map(AysRole::getId)
409+
.limit(1)
410+
.collect(Collectors.toSet());
411+
412+
AysUserUpdateRequest updateRequest = new AysUserUpdateRequestBuilder()
413+
.withValidValues()
414+
.withFirstName("Test")
415+
.withLastName("Dene")
416+
.withEmailAddress("Test.deneme@afetyonetimsistemi.org")
417+
.withCity("İzmir")
418+
.withPhoneNumber(new AysPhoneNumberRequestBuilder().withValidValues().build())
419+
.withRoleIds(newRoleIds)
420+
.build();
421+
422+
// Then
423+
String endpoint = BASE_PATH.concat("/user/").concat(id);
424+
MockHttpServletRequestBuilder mockHttpServletRequestBuilder = AysMockMvcRequestBuilders
425+
.put(endpoint, adminToken.getAccessToken(), updateRequest);
426+
427+
AysResponse<Void> mockResponse = AysResponseBuilder.SUCCESS;
428+
429+
aysMockMvc.perform(mockHttpServletRequestBuilder, mockResponse)
430+
.andExpect(AysMockResultMatchersBuilders.status()
431+
.isOk())
432+
.andExpect(AysMockResultMatchersBuilders.response()
433+
.doesNotExist());
434+
435+
// Verify
436+
Optional<AysUser> userFromDatabase = userReadPort.findById(id);
437+
438+
Assertions.assertTrue(userFromDatabase.isPresent());
439+
Assertions.assertNotNull(userFromDatabase.get().getId());
440+
Assertions.assertNotNull(userFromDatabase.get().getInstitution());
441+
newRoleIds.forEach(roleId -> Assertions.assertTrue(
442+
userFromDatabase.get().getRoles().stream()
443+
.anyMatch(role -> role.getId().equals(roleId))
444+
)
445+
);
446+
Assertions.assertNotNull(userFromDatabase.get().getUpdatedUser());
447+
Assertions.assertNotNull(userFromDatabase.get().getUpdatedAt());
448+
}
449+
376450

377451
@Test
378452
void givenValidId_whenActivateUser_thenReturnSuccess() throws Exception {

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

Lines changed: 77 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ void givenValidIdAndValidUpdateRequest_whenAllFieldsChanged_thenUpdateUser() {
112112
Mockito.verify(userReadPort, Mockito.times(1))
113113
.findById(Mockito.anyString());
114114

115-
Mockito.verify(identity, Mockito.times(mockRoles.size() + 1))
115+
Mockito.verify(identity, Mockito.times(1))
116116
.getInstitutionId();
117117

118118
Mockito.verify(userReadPort, Mockito.times(1))
@@ -128,6 +128,78 @@ void givenValidIdAndValidUpdateRequest_whenAllFieldsChanged_thenUpdateUser() {
128128
.save(Mockito.any(AysUser.class));
129129
}
130130

131+
@Test
132+
void givenValidIdAndValidUpdateRequest_whenRolesUpdatedOnly_thenUpdateUser() {
133+
134+
// Given
135+
String mockId = "3c57d56b-4a97-4f70-86a9-b4c9235cbe13";
136+
137+
Set<String> mockRoleIds = Set.of(
138+
"00a07704-8d7c-4048-b001-9fb69b22bfe8",
139+
"7913e093-ae70-4029-ad8d-efbb21d79f26"
140+
);
141+
AysUserUpdateRequest mockUpdateRequest = new AysUserUpdateRequestBuilder()
142+
.withValidValues()
143+
.withRoleIds(mockRoleIds)
144+
.build();
145+
146+
// When
147+
Institution mockInstitution = new InstitutionBuilder()
148+
.withValidValues()
149+
.build();
150+
Mockito.when(identity.getInstitutionId())
151+
.thenReturn(mockInstitution.getId());
152+
153+
AysUser mockUser = new AysUserBuilder()
154+
.withValidValues()
155+
.withId(mockId)
156+
.withFirstName(mockUpdateRequest.getFirstName())
157+
.withLastName(mockUpdateRequest.getLastName())
158+
.withEmailAddress(mockUpdateRequest.getEmailAddress())
159+
.withPhoneNumber(AysPhoneNumber.builder().build())
160+
.withCity(mockUpdateRequest.getCity())
161+
.withRoles(List.of(
162+
new AysRoleBuilder()
163+
.withValidValues()
164+
.build()
165+
))
166+
.withInstitution(mockInstitution)
167+
.build();
168+
Mockito.when(userReadPort.findById(Mockito.anyString()))
169+
.thenReturn(Optional.of(mockUser));
170+
171+
List<AysRole> mockRoles = new ArrayList<>();
172+
mockUpdateRequest.getRoleIds().forEach(roleId -> {
173+
AysRole mockRole = new AysRoleBuilder()
174+
.withValidValues()
175+
.withId(roleId)
176+
.withInstitution(mockInstitution)
177+
.build();
178+
mockRoles.add(mockRole);
179+
});
180+
Mockito.when(roleReadPort.findAllByIds(Mockito.anySet()))
181+
.thenReturn(mockRoles);
182+
183+
Mockito.when(userSavePort.save(Mockito.any(AysUser.class)))
184+
.thenReturn(Mockito.mock(AysUser.class));
185+
186+
// Then
187+
userUpdateService.update(mockId, mockUpdateRequest);
188+
189+
// Verify
190+
Mockito.verify(userReadPort, Mockito.times(1))
191+
.findById(Mockito.anyString());
192+
193+
Mockito.verify(identity, Mockito.times(1))
194+
.getInstitutionId();
195+
196+
Mockito.verify(roleReadPort, Mockito.times(1))
197+
.findAllByIds(Mockito.anySet());
198+
199+
Mockito.verify(userSavePort, Mockito.times(1))
200+
.save(Mockito.any(AysUser.class));
201+
}
202+
131203
@Test
132204
void givenValidIdAndValidUpdateRequest_whenPhoneNumberChanged_thenUpdateUser() {
133205

@@ -566,7 +638,7 @@ void givenValidId_whenUserIsPassive_thenActivateUser() {
566638
}
567639

568640
@Test
569-
void givenValidId_whenUserNotFound_thenThrowAysUserNotExistByIdException(){
641+
void givenValidId_whenUserNotFound_thenThrowAysUserNotExistByIdException() {
570642

571643
// Given
572644
String mockId = "9f1eb072-7830-4c43-9a32-d77b62ccddd3";
@@ -593,7 +665,7 @@ void givenValidId_whenUserNotFound_thenThrowAysUserNotExistByIdException(){
593665
}
594666

595667
@Test
596-
void givenValidId_whenUserIsNotPassive_thenThrowAysUserIsNotPassiveException(){
668+
void givenValidId_whenUserIsNotPassive_thenThrowAysUserIsNotPassiveException() {
597669

598670
// Given
599671
String mockId = "bf7cc8d4-eab7-487d-8564-19be0f439b4a";
@@ -863,7 +935,7 @@ void givenValidId_whenUserIsActive_thenPassivateUser() {
863935
}
864936

865937
@Test
866-
void givenValidUserId_whenUserNotFound_thenThrowAysUserNotExistByIdException(){
938+
void givenValidUserId_whenUserNotFound_thenThrowAysUserNotExistByIdException() {
867939

868940
// Given
869941
String mockId = "9f1eb072-7830-4c43-9a32-d77b62ccddd3";
@@ -890,7 +962,7 @@ void givenValidUserId_whenUserNotFound_thenThrowAysUserNotExistByIdException(){
890962
}
891963

892964
@Test
893-
void givenValidId_whenUserIsNotActive_thenThrowAysUserNotActiveException(){
965+
void givenValidId_whenUserIsNotActive_thenThrowAysUserNotActiveException() {
894966

895967
// Given
896968
String mockId = "bf7cc8d4-eab7-487d-8564-19be0f439b4a";

0 commit comments

Comments
 (0)