Skip to content

Commit

Permalink
refact: [admin/users] modifie la section utilisateur de l’espace admi…
Browse files Browse the repository at this point in the history
…nistration

* restructuration du module adminstration en fragments / widgets
  • Loading branch information
matthieuaudemard committed Apr 30, 2023
1 parent 75efc18 commit f6011a6
Show file tree
Hide file tree
Showing 10 changed files with 140 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.dynonuggets.refonteimplicaction.core.error.ImplicactionException;
import com.dynonuggets.refonteimplicaction.core.service.RoleService;
import com.dynonuggets.refonteimplicaction.core.service.UserService;
import com.dynonuggets.refonteimplicaction.core.utils.UserTestUtils;
import com.dynonuggets.refonteimplicaction.notification.service.NotificationService;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
Expand Down Expand Up @@ -37,7 +38,7 @@

import static com.dynonuggets.refonteimplicaction.auth.error.AuthErrorResult.*;
import static com.dynonuggets.refonteimplicaction.core.error.UserErrorResult.USERNAME_NOT_FOUND;
import static com.dynonuggets.refonteimplicaction.core.utils.UserTestUtils.generateRandomUser;
import static com.dynonuggets.refonteimplicaction.core.utils.UserTestUtils.generateRandomUserModel;
import static com.dynonuggets.refonteimplicaction.utils.AssertionUtils.assertImplicactionException;
import static java.lang.String.format;
import static java.time.Instant.now;
Expand Down Expand Up @@ -210,7 +211,7 @@ class VerifyAccountTest {
@DisplayName("doit activer l'utilisateur correspondant à la clé d'activation transmise s'il n'est pas déjà activé")
void should_activate_corresponding_user() {
// given
final UserModel user = generateRandomUser(Set.of(RoleEnum.ROLE_USER), false);
final UserModel user = generateRandomUserModel(Set.of(RoleEnum.ROLE_USER), false);
given(userRepository.findByActivationKey(any())).willReturn(of(user));

// when
Expand Down Expand Up @@ -267,7 +268,7 @@ class LoginTest {
@DisplayName("doit identifier l'utilisateur quand il existe")
void should_log_user_when_exists() {
// given
final UserModel user = generateRandomUser();
final UserModel user = UserTestUtils.generateRandomUserModel();
final String username = user.getUsername();
final LoginRequest loginRequest = LoginRequest.builder().username(username).password("password").build();
final String jwtToken = "jwt-token";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
import static com.dynonuggets.refonteimplicaction.community.group.error.GroupErrorResult.USER_ALREADY_SUBSCRIBED_TO_GROUP;
import static com.dynonuggets.refonteimplicaction.community.group.utils.GroupTestUtils.generateRandomGroup;
import static com.dynonuggets.refonteimplicaction.core.domain.model.properties.enums.RoleEnum.ROLE_PREMIUM;
import static com.dynonuggets.refonteimplicaction.core.utils.UserTestUtils.generateRandomUser;
import static com.dynonuggets.refonteimplicaction.core.utils.UserTestUtils.generateRandomUserModel;
import static com.dynonuggets.refonteimplicaction.utils.AssertionUtils.assertImplicactionException;
import static java.time.Instant.now;
import static java.util.List.of;
Expand Down Expand Up @@ -78,7 +78,7 @@ void should_create_group_when_image_is_submitted() {
// given
final MockMultipartFile mockedImage = new MockMultipartFile("user-file", "test.jpg", "image/jpeg", "test data".getBytes());
final GroupCreationRequest groupCreationRequest = GroupCreationRequest.builder().name("coucou subreddit").description("Elle est super bien ma description").build();
final UserModel currentUser = generateRandomUser(Set.of(ROLE_PREMIUM), true);
final UserModel currentUser = generateRandomUserModel(Set.of(ROLE_PREMIUM), true);
final String imageUrl = "http://localhost/imapge.png";
final String username = currentUser.getUsername();
final ProfileModel profile = ProfileModel.builder().user(currentUser).build();
Expand Down Expand Up @@ -107,7 +107,7 @@ void should_create_group_when_image_is_submitted() {
void should_create_group_when_no_image_is_submitted() {
// given
final GroupCreationRequest groupCreationRequest = GroupCreationRequest.builder().name("coucou subreddit").description("Elle est super bien ma description").build();
final UserModel currentUser = generateRandomUser(Set.of(ROLE_PREMIUM), true);
final UserModel currentUser = generateRandomUserModel(Set.of(ROLE_PREMIUM), true);
final String username = currentUser.getUsername();
final ProfileModel profile = ProfileModel.builder().user(currentUser).build();
final GroupModel expectedGroup = GroupModel.builder().id(12L).name(groupCreationRequest.getName()).description(groupCreationRequest.getDescription()).creator(profile).createdAt(now()).enabled(false).build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import com.dynonuggets.refonteimplicaction.core.error.ImplicactionException;
import com.dynonuggets.refonteimplicaction.core.error.TechnicalException;
import com.dynonuggets.refonteimplicaction.core.service.UserService;
import com.dynonuggets.refonteimplicaction.core.utils.UserTestUtils;
import com.dynonuggets.refonteimplicaction.filemanagement.service.CloudService;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
Expand All @@ -37,7 +38,6 @@
import static com.dynonuggets.refonteimplicaction.community.profile.utils.ProfileTestUtils.*;
import static com.dynonuggets.refonteimplicaction.core.error.CoreErrorResult.OPERATION_NOT_PERMITTED;
import static com.dynonuggets.refonteimplicaction.core.error.UserErrorResult.USERNAME_NOT_FOUND;
import static com.dynonuggets.refonteimplicaction.core.utils.UserTestUtils.generateRandomUser;
import static com.dynonuggets.refonteimplicaction.utils.AssertionUtils.assertImplicactionException;
import static java.lang.String.format;
import static java.util.List.of;
Expand Down Expand Up @@ -75,7 +75,7 @@ class CreateProfileTests {
@DisplayName("doit créer un profil utilisateur si l'utilisateur existe et que son profil n'existe pas encore")
void should_create_profile_if_user_exists_and_profile_is_not_already_created() {
// given
final UserModel userModel = generateRandomUser();
final UserModel userModel = UserTestUtils.generateRandomUserModel();
final String username = userModel.getUsername();
given(userService.getUserByUsernameIfExists(username)).willReturn(userModel);
given(profileRepository.findByUser_Username(username)).willReturn(Optional.empty());
Expand Down Expand Up @@ -109,7 +109,7 @@ void should_throw_exception_if_user_not_exists() {
@DisplayName("doit lancer une exception si le profil existe déjà")
void should_throw_exception_if_profile_already_exists() {
// given
final UserModel userModel = generateRandomUser();
final UserModel userModel = UserTestUtils.generateRandomUserModel();
final String username = userModel.getUsername();
given(userService.getUserByUsernameIfExists(username)).willReturn(userModel);
given(profileRepository.findByUser_Username(username)).willReturn(Optional.of(ProfileModel.builder().build()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
import com.dynonuggets.refonteimplicaction.community.profile.dto.ProfileUpdateRequest;
import com.dynonuggets.refonteimplicaction.community.training.domain.model.TrainingModel;
import com.dynonuggets.refonteimplicaction.community.workexperience.domain.model.WorkExperienceModel;
import com.dynonuggets.refonteimplicaction.core.utils.UserTestUtils;
import lombok.NoArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.test.web.servlet.ResultActions;

import java.util.List;

import static com.dynonuggets.refonteimplicaction.core.utils.AppUtils.callIfNotNull;
import static com.dynonuggets.refonteimplicaction.core.utils.UserTestUtils.generateRandomUser;
import static com.dynonuggets.refonteimplicaction.utils.TestUtils.generateRandomLocalDate;
import static com.dynonuggets.refonteimplicaction.utils.TestUtils.generateRandomNumber;
import static java.lang.String.format;
Expand All @@ -31,7 +31,7 @@ public class ProfileTestUtils {
public static ProfileModel generateRandomProfile() {
return ProfileModel.builder()
.id((long) generateRandomNumber())
.user(generateRandomUser())
.user(UserTestUtils.generateRandomUserModel())
.hobbies(randomAlphabetic(100))
.purpose(randomAlphabetic(100))
.presentation(randomAlphabetic(100))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ class UserControllerTest extends ControllerIntegrationTestBase {
@BeforeEach
void setUp() {
roles.add(ROLE_USER);
mockedUser = generateRandomUser();
mockedUser = generateRandomUserModel();
mockedUserDtos = of(
generateRandomUserDto(),
generateRandomUserDto(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
import java.util.Set;

import static com.dynonuggets.refonteimplicaction.core.domain.model.properties.enums.RoleEnum.ROLE_USER;
import static com.dynonuggets.refonteimplicaction.core.utils.UserTestUtils.generateRandomUser;
import static com.dynonuggets.refonteimplicaction.core.utils.UserTestUtils.generateRandomUserModel;
import static com.dynonuggets.refonteimplicaction.core.utils.UserTestUtils.generateRandomUserDto;
import static java.util.stream.Collectors.toList;
import static org.assertj.core.api.Assertions.assertThat;
Expand All @@ -32,7 +32,7 @@ class UserMapperTest {

@BeforeEach
void setUp() {
mockedUser = generateRandomUser(Set.of(ROLE_USER), true);
mockedUser = generateRandomUserModel(Set.of(ROLE_USER), true);
mockedUserDto = generateRandomUserDto(Set.of(ROLE_USER), true);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import java.util.Set;

import static com.dynonuggets.refonteimplicaction.core.domain.model.properties.enums.RoleEnum.ROLE_USER;
import static com.dynonuggets.refonteimplicaction.core.utils.UserTestUtils.generateRandomUser;
import static com.dynonuggets.refonteimplicaction.core.utils.UserTestUtils.generateRandomUserModel;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.TestInstance.Lifecycle;

Expand All @@ -27,11 +27,11 @@ class UserRepositoryTest extends AbstractContainerBaseTest {
void setup() {
dbContent = userRepository.saveAll(
List.of(
generateRandomUser(Set.of(ROLE_USER), true),
generateRandomUser(Set.of(ROLE_USER), false),
generateRandomUser(Set.of(ROLE_USER), true),
generateRandomUser(Set.of(ROLE_USER), false),
generateRandomUser(Set.of(ROLE_USER), true)
generateRandomUserModel(Set.of(ROLE_USER), true),
generateRandomUserModel(Set.of(ROLE_USER), false),
generateRandomUserModel(Set.of(ROLE_USER), true),
generateRandomUserModel(Set.of(ROLE_USER), false),
generateRandomUserModel(Set.of(ROLE_USER), true)
)
);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package com.dynonuggets.refonteimplicaction.core.service;

import com.dynonuggets.refonteimplicaction.core.domain.model.RoleModel;
import com.dynonuggets.refonteimplicaction.core.domain.model.properties.enums.RoleEnum;
import com.dynonuggets.refonteimplicaction.core.domain.repository.RoleRepository;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

import java.util.Optional;

import static com.dynonuggets.refonteimplicaction.core.domain.model.properties.enums.RoleEnum.ROLE_PREMIUM;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.BDDMockito.given;
import static org.mockito.BDDMockito.times;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;


@ExtendWith(MockitoExtension.class)
class RoleServiceTest {

@Mock
RoleRepository roleRepository;
@InjectMocks
RoleService roleService;

@Captor
ArgumentCaptor<RoleModel> captor;

@Nested
@DisplayName("# getRoleByName")
class GetRoleByNameTests {
@Test
@DisplayName("doit retourner un rôle quand le rôle existe")
void should_return_role_when_exists() {
// given
final RoleEnum rolePremium = ROLE_PREMIUM;
final RoleModel expectedRole = RoleModel.builder().name(rolePremium).build();
given(roleRepository.findByName(rolePremium)).willReturn(Optional.of(expectedRole));

// when
final RoleModel actualRole = roleService.getRoleByName(rolePremium);

// then
assertThat(actualRole).isEqualTo(expectedRole);
verify(roleRepository, times(1)).findByName(rolePremium);
verify(roleRepository, never()).save(any());
}


@Test
@DisplayName("doit créer le rôle et le retourner quand le rôle n'existe pas")
void should_create_role_when_not_exists() {
// given
final RoleEnum rolePremium = ROLE_PREMIUM;
final RoleModel expectedRole = RoleModel.builder().name(rolePremium).build();
given(roleRepository.findByName(rolePremium)).willReturn(Optional.empty());
given(roleRepository.save(expectedRole)).willReturn(expectedRole);

// when
final RoleModel actualRole = roleService.getRoleByName(rolePremium);

// then
verify(roleRepository, times(1)).findByName(rolePremium);
verify(roleRepository, times(1)).save(captor.capture());
assertThat(actualRole).isEqualTo(expectedRole);
assertThat(captor.getValue()).isEqualTo(expectedRole);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@

import com.dynonuggets.refonteimplicaction.core.domain.model.RoleModel;
import com.dynonuggets.refonteimplicaction.core.domain.model.UserModel;
import com.dynonuggets.refonteimplicaction.core.domain.model.properties.enums.RoleEnum;
import com.dynonuggets.refonteimplicaction.core.domain.repository.UserRepository;
import com.dynonuggets.refonteimplicaction.core.dto.UserDto;
import com.dynonuggets.refonteimplicaction.core.error.EntityNotFoundException;
import com.dynonuggets.refonteimplicaction.core.error.ImplicactionException;
import com.dynonuggets.refonteimplicaction.core.event.UserEnabledEvent;
import com.dynonuggets.refonteimplicaction.core.mapper.UserMapper;
import com.dynonuggets.refonteimplicaction.core.utils.UserTestUtils;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
Expand All @@ -26,14 +28,16 @@
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;

import static com.dynonuggets.refonteimplicaction.core.domain.model.properties.enums.RoleEnum.*;
import static com.dynonuggets.refonteimplicaction.core.error.UserErrorResult.USERNAME_NOT_FOUND;
import static com.dynonuggets.refonteimplicaction.core.error.UserErrorResult.USER_ID_NOT_FOUND;
import static com.dynonuggets.refonteimplicaction.core.utils.UserTestUtils.generateRandomUser;
import static com.dynonuggets.refonteimplicaction.core.utils.UserTestUtils.generateRandomUserDto;
import static com.dynonuggets.refonteimplicaction.core.utils.UserTestUtils.generateRandomUserModel;
import static com.dynonuggets.refonteimplicaction.utils.AssertionUtils.assertImplicactionException;
import static java.util.Optional.empty;
import static java.util.Optional.of;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.any;
Expand Down Expand Up @@ -64,12 +68,12 @@ class UserServiceTest {
@BeforeEach
void setMockOutput() {
mockedUsers = List.of(
generateRandomUser(Set.of(ROLE_USER), true),
generateRandomUser(Set.of(ROLE_USER, ROLE_PREMIUM), true),
generateRandomUser(Set.of(ROLE_ADMIN), true),
generateRandomUser(Set.of(ROLE_USER, ROLE_ADMIN), true)
generateRandomUserModel(Set.of(ROLE_USER), true),
generateRandomUserModel(Set.of(ROLE_USER, ROLE_PREMIUM), true),
generateRandomUserModel(Set.of(ROLE_ADMIN), true),
generateRandomUserModel(Set.of(ROLE_USER, ROLE_ADMIN), true)
);
mockedUser = generateRandomUser();
mockedUser = UserTestUtils.generateRandomUserModel();
mockedUserDto = generateRandomUserDto();
}

Expand Down Expand Up @@ -184,7 +188,7 @@ class EnableUserTests {
@DisplayName("doit activer l'utilisateur et un évènement doit être publié")
void should_enable_user_and_send_envent() {
// given
final UserModel expectedUser = generateRandomUser(Set.of(ROLE_USER), false);
final UserModel expectedUser = generateRandomUserModel(Set.of(ROLE_USER), false);
final String username = expectedUser.getUsername();
final RoleModel roleUser = RoleModel.builder().name(ROLE_USER).build();
given(userRepository.findByUsername(username)).willReturn(Optional.of(expectedUser));
Expand All @@ -206,7 +210,7 @@ void should_enable_user_and_send_envent() {
@DisplayName("doit lancer une exception quand l'utilisateur n'existe pas et aucun évènement ne doit être publié")
void should_throw_exception_and_no_event_should_be_published() {
// given
final UserModel expectedUser = generateRandomUser(Set.of(ROLE_USER), false);
final UserModel expectedUser = generateRandomUserModel(Set.of(ROLE_USER), false);
final String username = expectedUser.getUsername();
given(userRepository.findByUsername(username)).willReturn(Optional.empty());

Expand All @@ -218,4 +222,30 @@ void should_throw_exception_and_no_event_should_be_published() {
verifyNoInteractions(publisher);
}
}

@Nested
@DisplayName("# updateUserRoles")
class UpdateUserRolesTests {
@Test
@DisplayName("doit mettre à jour les rôles de l'utilisateur quand l'utilisateur existe")
void should_update_user_roles_when_user_exists() {
// given
final Set<RoleEnum> roleEnums = Set.of(ROLE_USER, ROLE_PREMIUM);
final Set<RoleModel> roles = roleEnums.stream().map(name -> RoleModel.builder().name(name).build()).collect(Collectors.toSet());
final UserModel expectedUser = UserTestUtils.generateRandomUserModel(Set.of(ROLE_USER), true);
given(userRepository.findByUsername(expectedUser.getUsername())).willReturn(of(expectedUser));
given(userRepository.save(expectedUser)).willReturn(expectedUser);
roles.forEach(role -> given(roleService.getRoleByName(role.getName())).willReturn(role));

// when
userService.updateUserRoles(expectedUser.getUsername(), roleEnums);

// then
verify(userMapper, times(1)).toDto(expectedUser);
verify(userRepository, times(1)).save(argumentCaptor.capture());
final UserModel actualUser = argumentCaptor.getValue();
assertThat(actualUser.getUsername()).isEqualTo(expectedUser.getUsername());
assertThat(actualUser.getRoles()).containsAll(roles);
}
}
}
Loading

0 comments on commit f6011a6

Please sign in to comment.