Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -66,15 +66,22 @@ public void update(final String id,
.lineNumber(updateRequest.getPhoneNumber().getLineNumber())
.build();

this.validatePhoneNumber(user, phoneNumber);
this.validateEmailAddress(user, updateRequest.getEmailAddress());
if (!user.getPhoneNumber().equals(phoneNumber)) {
this.validatePhoneNumber(user, phoneNumber);
user.setPhoneNumber(phoneNumber);
}

if (!user.getEmailAddress().equals(updateRequest.getEmailAddress())) {
this.validateEmailAddress(user, updateRequest.getEmailAddress());
user.setEmailAddress(updateRequest.getEmailAddress());
}

this.validateRolesAndSet(user, updateRequest.getRoleIds());

user.setFirstName(updateRequest.getFirstName());
user.setLastName(updateRequest.getLastName());
user.setEmailAddress(updateRequest.getEmailAddress());
user.setCity(updateRequest.getCity());
user.setPhoneNumber(phoneNumber);
user.setUpdatedUser(identity.getUserId());

userSavePort.save(user);
}
Expand Down
74 changes: 74 additions & 0 deletions src/test/java/org/ays/auth/controller/AysUserEndToEndTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
import org.ays.auth.port.AysRoleReadPort;
import org.ays.auth.port.AysUserReadPort;
import org.ays.auth.port.AysUserSavePort;
import org.ays.common.model.AysPhoneNumberBuilder;
import org.ays.common.model.request.AysPhoneNumberRequestBuilder;
import org.ays.common.model.response.AysPageResponse;
import org.ays.common.model.response.AysResponse;
import org.ays.common.model.response.AysResponseBuilder;
Expand Down Expand Up @@ -373,6 +375,78 @@ void givenValidIdAndUserUpdateRequest_whenUserUpdated_thenReturnSuccess() throws
Assertions.assertNotNull(userFromDatabase.get().getUpdatedAt());
}

@Test
void givenValidIdAndUserUpdateRequest_whenRolesUpdatedOnly_thenReturnSuccess() throws Exception {

// Initialize
Institution institution = new InstitutionBuilder()
.withId(AysValidTestData.Admin.INSTITUTION_ID)
.build();

List<AysRole> roles = roleReadPort.findAllActivesByInstitutionId(institution.getId());

AysUser user = userSavePort.save(
new AysUserBuilder()
.withValidValues()
.withFirstName("Test")
.withLastName("Dene")
.withEmailAddress("Test.deneme@afetyonetimsistemi.org")
.withCity("İzmir")
.withPhoneNumber(new AysPhoneNumberBuilder().withValidValues().build())
.withoutId()
.withRoles(roles)
.withInstitution(institution)
.build()
);

// Given
String id = user.getId();
AysRole newRole = roles.get(0);
List<AysRole> newRoles = List.of(newRole);

Set<String> newRoleIds = newRoles.stream()
.map(AysRole::getId)
.limit(1)
.collect(Collectors.toSet());

AysUserUpdateRequest updateRequest = new AysUserUpdateRequestBuilder()
.withValidValues()
.withFirstName("Test")
.withLastName("Dene")
.withEmailAddress("Test.deneme@afetyonetimsistemi.org")
.withCity("İzmir")
.withPhoneNumber(new AysPhoneNumberRequestBuilder().withValidValues().build())
.withRoleIds(newRoleIds)
.build();

// Then
String endpoint = BASE_PATH.concat("/user/").concat(id);
MockHttpServletRequestBuilder mockHttpServletRequestBuilder = AysMockMvcRequestBuilders
.put(endpoint, adminToken.getAccessToken(), updateRequest);

AysResponse<Void> mockResponse = AysResponseBuilder.SUCCESS;

aysMockMvc.perform(mockHttpServletRequestBuilder, mockResponse)
.andExpect(AysMockResultMatchersBuilders.status()
.isOk())
.andExpect(AysMockResultMatchersBuilders.response()
.doesNotExist());

// Verify
Optional<AysUser> userFromDatabase = userReadPort.findById(id);

Assertions.assertTrue(userFromDatabase.isPresent());
Assertions.assertNotNull(userFromDatabase.get().getId());
Assertions.assertNotNull(userFromDatabase.get().getInstitution());
newRoleIds.forEach(roleId -> Assertions.assertTrue(
userFromDatabase.get().getRoles().stream()
.anyMatch(role -> role.getId().equals(roleId))
)
);
Assertions.assertNotNull(userFromDatabase.get().getUpdatedUser());
Assertions.assertNotNull(userFromDatabase.get().getUpdatedAt());
}


@Test
void givenValidId_whenActivateUser_thenReturnSuccess() throws Exception {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,78 @@ void givenValidIdAndValidUpdateRequest_whenAllFieldsChanged_thenUpdateUser() {
.save(Mockito.any(AysUser.class));
}

@Test
void givenValidIdAndValidUpdateRequest_whenRolesUpdatedOnly_thenUpdateUser() {

// Given
String mockId = "3c57d56b-4a97-4f70-86a9-b4c9235cbe13";

Set<String> mockRoleIds = Set.of(
"00a07704-8d7c-4048-b001-9fb69b22bfe8",
"7913e093-ae70-4029-ad8d-efbb21d79f26"
);
AysUserUpdateRequest mockUpdateRequest = new AysUserUpdateRequestBuilder()
.withValidValues()
.withRoleIds(mockRoleIds)
.build();

// When
Institution mockInstitution = new InstitutionBuilder()
.withValidValues()
.build();
Mockito.when(identity.getInstitutionId())
.thenReturn(mockInstitution.getId());

AysUser mockUser = new AysUserBuilder()
.withValidValues()
.withId(mockId)
.withFirstName(mockUpdateRequest.getFirstName())
.withLastName(mockUpdateRequest.getLastName())
.withEmailAddress(mockUpdateRequest.getEmailAddress())
.withPhoneNumber(AysPhoneNumber.builder().build())
.withCity(mockUpdateRequest.getCity())
.withRoles(List.of(
new AysRoleBuilder()
.withValidValues()
.build()
))
.withInstitution(mockInstitution)
.build();
Mockito.when(userReadPort.findById(Mockito.anyString()))
.thenReturn(Optional.of(mockUser));

List<AysRole> mockRoles = new ArrayList<>();
mockUpdateRequest.getRoleIds().forEach(roleId -> {
AysRole mockRole = new AysRoleBuilder()
.withValidValues()
.withId(roleId)
.withInstitution(mockInstitution)
.build();
mockRoles.add(mockRole);
});
Mockito.when(roleReadPort.findAllByIds(Mockito.anySet()))
.thenReturn(mockRoles);

Mockito.when(userSavePort.save(Mockito.any(AysUser.class)))
.thenReturn(Mockito.mock(AysUser.class));

// Then
userUpdateService.update(mockId, mockUpdateRequest);

// Verify
Mockito.verify(userReadPort, Mockito.times(1))
.findById(Mockito.anyString());

Mockito.verify(identity, Mockito.times(mockRoles.size() + 1))
.getInstitutionId();

Mockito.verify(roleReadPort, Mockito.times(1))
.findAllByIds(Mockito.anySet());

Mockito.verify(userSavePort, Mockito.times(1))
.save(Mockito.any(AysUser.class));
}

@Test
void givenValidIdAndValidUpdateRequest_whenPhoneNumberChanged_thenUpdateUser() {

Expand Down Expand Up @@ -566,7 +638,7 @@ void givenValidId_whenUserIsPassive_thenActivateUser() {
}

@Test
void givenValidId_whenUserNotFound_thenThrowAysUserNotExistByIdException(){
void givenValidId_whenUserNotFound_thenThrowAysUserNotExistByIdException() {

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

@Test
void givenValidId_whenUserIsNotPassive_thenThrowAysUserIsNotPassiveException(){
void givenValidId_whenUserIsNotPassive_thenThrowAysUserIsNotPassiveException() {

// Given
String mockId = "bf7cc8d4-eab7-487d-8564-19be0f439b4a";
Expand Down Expand Up @@ -863,7 +935,7 @@ void givenValidId_whenUserIsActive_thenPassivateUser() {
}

@Test
void givenValidUserId_whenUserNotFound_thenThrowAysUserNotExistByIdException(){
void givenValidUserId_whenUserNotFound_thenThrowAysUserNotExistByIdException() {

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

@Test
void givenValidId_whenUserIsNotActive_thenThrowAysUserNotActiveException(){
void givenValidId_whenUserIsNotActive_thenThrowAysUserNotActiveException() {

// Given
String mockId = "bf7cc8d4-eab7-487d-8564-19be0f439b4a";
Expand Down
Loading