content: package com.adyen.demo.store.service.mapper;
  
  import static org.assertj.core.api.Assertions.assertThat;
  
  import com.adyen.demo.store.domain.User;
  import com.adyen.demo.store.service.dto.AdminUserDTO;
  import com.adyen.demo.store.service.dto.UserDTO;
  import java.util.ArrayList;
  import java.util.HashSet;
  import java.util.List;
  import java.util.Set;
  import org.apache.commons.lang3.RandomStringUtils;
  import org.junit.jupiter.api.BeforeEach;
  import org.junit.jupiter.api.Test;
  
  /**
   * Unit tests for {@link UserMapper}.
   */
  class UserMapperTest {
  
      private static final String DEFAULT_LOGIN = "johndoe";
      private static final Long DEFAULT_ID = 1L;
  
      private UserMapper userMapper;
      private User user;
      private AdminUserDTO userDto;
  
      @BeforeEach
      public void init() {
          userMapper = new UserMapper();
          user = new User();
          user.setLogin(DEFAULT_LOGIN);
          user.setPassword(RandomStringUtils.random(60));
          user.setActivated(true);
          user.setEmail("johndoe@localhost");
          user.setFirstName("john");
          user.setLastName("doe");
          user.setImageUrl("image_url");
          user.setLangKey("en");
  
          userDto = new AdminUserDTO(user);
      }
  
      @Test
      void usersToUserDTOsShouldMapOnlyNonNullUsers() {
          List<User> users = new ArrayList<>();
          users.add(user);
          users.add(null);
  
          List<UserDTO> userDTOS = userMapper.usersToUserDTOs(users);
  
          assertThat(userDTOS).isNotEmpty().size().isEqualTo(1);
      }
  
      @Test
      void userDTOsToUsersShouldMapOnlyNonNullUsers() {
          List<AdminUserDTO> usersDto = new ArrayList<>();
          usersDto.add(userDto);
          usersDto.add(null);
  
          List<User> users = userMapper.userDTOsToUsers(usersDto);
  
          assertThat(users).isNotEmpty().size().isEqualTo(1);
      }
  
      @Test
      void userDTOsToUsersWithAuthoritiesStringShouldMapToUsersWithAuthoritiesDomain() {
          Set<String> authoritiesAsString = new HashSet<>();
          authoritiesAsString.add("ADMIN");
          userDto.setAuthorities(authoritiesAsString);
  
          List<AdminUserDTO> usersDto = new ArrayList<>();
          usersDto.add(userDto);
  
          List<User> users = userMapper.userDTOsToUsers(usersDto);
  
          assertThat(users).isNotEmpty().size().isEqualTo(1);
          assertThat(users.get(0).getAuthorities()).isNotNull();
          assertThat(users.get(0).getAuthorities()).isNotEmpty();
          assertThat(users.get(0).getAuthorities().iterator().next().getName()).isEqualTo("ADMIN");
      }
  
      @Test
      void userDTOsToUsersMapWithNullAuthoritiesStringShouldReturnUserWithEmptyAuthorities() {
          userDto.setAuthorities(null);
  
          List<AdminUserDTO> usersDto = new ArrayList<>();
          usersDto.add(userDto);
  
          List<User> users = userMapper.userDTOsToUsers(usersDto);
  
          assertThat(users).isNotEmpty().size().isEqualTo(1);
          assertThat(users.get(0).getAuthorities()).isNotNull();
          assertThat(users.get(0).getAuthorities()).isEmpty();
      }
  
      @Test
      void userDTOToUserMapWithAuthoritiesStringShouldReturnUserWithAuthorities() {
          Set<String> authoritiesAsString = new HashSet<>();
          authoritiesAsString.add("ADMIN");
          userDto.setAuthorities(authoritiesAsString);
  
          User user = userMapper.userDTOToUser(userDto);
  
          assertThat(user).isNotNull();
          assertThat(user.getAuthorities()).isNotNull();
          assertThat(user.getAuthorities()).isNotEmpty();
          assertThat(user.getAuthorities().iterator().next().getName()).isEqualTo("ADMIN");
      }
  
      @Test
      void userDTOToUserMapWithNullAuthoritiesStringShouldReturnUserWithEmptyAuthorities() {
          userDto.setAuthorities(null);
  
          User user = userMapper.userDTOToUser(userDto);
  
          assertThat(user).isNotNull();
          assertThat(user.getAuthorities()).isNotNull();
          assertThat(user.getAuthorities()).isEmpty();
      }
  
      @Test
      void userDTOToUserMapWithNullUserShouldReturnNull() {
          assertThat(userMapper.userDTOToUser(null)).isNull();
      }
  
      @Test
      void testUserFromId() {
          assertThat(userMapper.userFromId(DEFAULT_ID).getId()).isEqualTo(DEFAULT_ID);
          assertThat(userMapper.userFromId(null)).isNull();
      }
  }
  