|
4 | 4 | import com.xpeho.spring_boot_java_random_user.data.models.database.User; |
5 | 5 | import com.xpeho.spring_boot_java_random_user.data.sources.database.UserRepository; |
6 | 6 | import com.xpeho.spring_boot_java_random_user.domain.entities.UserEntity; |
| 7 | +import com.xpeho.spring_boot_java_random_user.domain.entities.UserFilter; |
| 8 | +import com.xpeho.spring_boot_java_random_user.domain.enums.Gender; |
7 | 9 | import org.junit.jupiter.api.BeforeEach; |
8 | 10 | import org.junit.jupiter.api.DisplayName; |
9 | 11 | import org.junit.jupiter.api.Test; |
10 | 12 |
|
| 13 | +import java.util.Collections; |
| 14 | +import java.util.List; |
11 | 15 | import java.util.Optional; |
12 | 16 |
|
13 | 17 | import static org.junit.jupiter.api.Assertions.assertEquals; |
@@ -84,4 +88,63 @@ void shouldSaveMappedUserAndReturnMappedDomainEntity() { |
84 | 88 | verify(userRepository).save(daoToSave); |
85 | 89 | verify(userConverter).toDomain(savedDao); |
86 | 90 | } |
| 91 | + |
| 92 | + @Test |
| 93 | + @DisplayName("Should convert gender enum to lowercase and call repository with filter values") |
| 94 | + void shouldFilterUsersWithGender() { |
| 95 | + UserFilter filter = new UserFilter(Gender.MALE, "John", null, null, null, null, null); |
| 96 | + |
| 97 | + User dao = new User(); |
| 98 | + dao.setId(1L); |
| 99 | + dao.setFirstname("John"); |
| 100 | + |
| 101 | + UserEntity expected = new UserEntity(1L, "male", "John", "Doe", "Mr", "john@doe.com", "1234", "pic.jpg", "FR"); |
| 102 | + |
| 103 | + when(userRepository.findByFilters("male", "John", null, null, null, null, null)) |
| 104 | + .thenReturn(List.of(dao)); |
| 105 | + when(userConverter.toDomain(dao)).thenReturn(expected); |
| 106 | + |
| 107 | + List<UserEntity> result = userService.filterUsers(filter); |
| 108 | + |
| 109 | + assertEquals(1, result.size()); |
| 110 | + assertEquals(expected, result.get(0)); |
| 111 | + verify(userRepository).findByFilters("male", "John", null, null, null, null, null); |
| 112 | + verify(userConverter).toDomain(dao); |
| 113 | + } |
| 114 | + |
| 115 | + @Test |
| 116 | + @DisplayName("Should pass null gender when filter gender is null") |
| 117 | + void shouldFilterUsersWithNullGender() { |
| 118 | + UserFilter filter = new UserFilter(null, null, "Smith", null, null, null, null); |
| 119 | + |
| 120 | + User dao = new User(); |
| 121 | + dao.setId(2L); |
| 122 | + dao.setLastname("Smith"); |
| 123 | + |
| 124 | + UserEntity expected = new UserEntity(2L, "female", "Alice", "Smith", "Ms", "alice@smith.com", "5678", "pic2.jpg", "US"); |
| 125 | + |
| 126 | + when(userRepository.findByFilters(null, null, "Smith", null, null, null, null)) |
| 127 | + .thenReturn(List.of(dao)); |
| 128 | + when(userConverter.toDomain(dao)).thenReturn(expected); |
| 129 | + |
| 130 | + List<UserEntity> result = userService.filterUsers(filter); |
| 131 | + |
| 132 | + assertEquals(1, result.size()); |
| 133 | + assertEquals(expected, result.get(0)); |
| 134 | + verify(userRepository).findByFilters(null, null, "Smith", null, null, null, null); |
| 135 | + } |
| 136 | + |
| 137 | + @Test |
| 138 | + @DisplayName("Should return empty list when no users match filter") |
| 139 | + void shouldReturnEmptyListWhenNoUsersMatchFilter() { |
| 140 | + UserFilter filter = new UserFilter(Gender.FEMALE, "Unknown", null, null, null, null, null); |
| 141 | + |
| 142 | + when(userRepository.findByFilters("female", "Unknown", null, null, null, null, null)) |
| 143 | + .thenReturn(Collections.emptyList()); |
| 144 | + |
| 145 | + List<UserEntity> result = userService.filterUsers(filter); |
| 146 | + |
| 147 | + assertTrue(result.isEmpty()); |
| 148 | + verify(userRepository).findByFilters("female", "Unknown", null, null, null, null, null); |
| 149 | + } |
87 | 150 | } |
0 commit comments