Skip to content

Commit c0957d7

Browse files
committed
feat(endpoint-userfilter): add test for usecase and services
1 parent cf5a5ba commit c0957d7

2 files changed

Lines changed: 132 additions & 0 deletions

File tree

src/test/java/com/xpeho/spring_boot_java_random_user/data/services/UserServiceImplTest.java

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,14 @@
44
import com.xpeho.spring_boot_java_random_user.data.models.database.User;
55
import com.xpeho.spring_boot_java_random_user.data.sources.database.UserRepository;
66
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;
79
import org.junit.jupiter.api.BeforeEach;
810
import org.junit.jupiter.api.DisplayName;
911
import org.junit.jupiter.api.Test;
1012

13+
import java.util.Collections;
14+
import java.util.List;
1115
import java.util.Optional;
1216

1317
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -84,4 +88,63 @@ void shouldSaveMappedUserAndReturnMappedDomainEntity() {
8488
verify(userRepository).save(daoToSave);
8589
verify(userConverter).toDomain(savedDao);
8690
}
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+
}
87150
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package com.xpeho.spring_boot_java_random_user.domain.usecases;
2+
3+
import com.xpeho.spring_boot_java_random_user.domain.entities.UserEntity;
4+
import com.xpeho.spring_boot_java_random_user.domain.entities.UserFilter;
5+
import com.xpeho.spring_boot_java_random_user.domain.enums.Gender;
6+
import com.xpeho.spring_boot_java_random_user.domain.services.LocalUserService;
7+
import org.junit.jupiter.api.BeforeEach;
8+
import org.junit.jupiter.api.DisplayName;
9+
import org.junit.jupiter.api.Test;
10+
11+
import java.util.Collections;
12+
import java.util.List;
13+
14+
import static org.junit.jupiter.api.Assertions.*;
15+
import static org.mockito.Mockito.*;
16+
17+
public class FilterUsersUseCaseTest {
18+
private LocalUserService userService;
19+
private FilterUsersUseCase useCase;
20+
21+
@BeforeEach
22+
void setUp() {
23+
userService = mock(LocalUserService.class);
24+
useCase = new FilterUsersUseCase(userService);
25+
}
26+
27+
@Test
28+
@DisplayName("Should return filtered users matching the filter")
29+
void shouldReturnFilteredUsers() {
30+
UserFilter filter = new UserFilter(Gender.MALE, "John", null, null, null, null, null);
31+
List<UserEntity> expected = List.of(
32+
new UserEntity(1L, "male", "John", "Doe", "Mr", "john@example.com", "0600000000", "http://pic.jpg", "FR")
33+
);
34+
when(userService.filterUsers(filter)).thenReturn(expected);
35+
36+
List<UserEntity> result = useCase.execute(filter);
37+
38+
assertEquals(expected, result);
39+
verify(userService).filterUsers(filter);
40+
}
41+
42+
@Test
43+
@DisplayName("Should return empty list when no users match the filter")
44+
void shouldReturnEmptyListWhenNoMatch() {
45+
UserFilter filter = new UserFilter(Gender.FEMALE, "Unknown", null, null, null, null, null);
46+
when(userService.filterUsers(filter)).thenReturn(Collections.emptyList());
47+
48+
List<UserEntity> result = useCase.execute(filter);
49+
50+
assertTrue(result.isEmpty());
51+
verify(userService).filterUsers(filter);
52+
}
53+
54+
@Test
55+
@DisplayName("Should pass filter with all fields to the service")
56+
void shouldPassFilterWithAllFields() {
57+
UserFilter filter = new UserFilter(Gender.FEMALE, "Alice", "Smith", "Ms", "alice@example.com", "0611111111", "US");
58+
List<UserEntity> expected = List.of(
59+
new UserEntity(5L, "female", "Alice", "Smith", "Ms", "alice@example.com", "0611111111", "http://pic2.jpg", "US")
60+
);
61+
when(userService.filterUsers(filter)).thenReturn(expected);
62+
63+
List<UserEntity> result = useCase.execute(filter);
64+
65+
assertEquals(expected, result);
66+
verify(userService, times(1)).filterUsers(filter);
67+
verifyNoMoreInteractions(userService);
68+
}
69+
}

0 commit comments

Comments
 (0)