Skip to content

Commit 7e33cc1

Browse files
committed
fix: 코드래빗 리뷰반영 - 테스트 추가
1 parent 565d58b commit 7e33cc1

1 file changed

Lines changed: 65 additions & 0 deletions

File tree

src/test/java/com/codeit/team5/mopl/user/repository/UserRepositoryTest.java

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,71 @@ void findUsers_lockedCursor_success() {
337337
assertThat(secondPage.get(0).getId()).isEqualTo(expectedOrder.get(1).getId());
338338
}
339339

340+
@Test
341+
@DisplayName("권한 커서로 사용자 목록을 이어서 조회한다")
342+
void findUsers_roleCursor_success() {
343+
// Given
344+
User firstUser = User.create("role-cursor-a@example.com", "password", "권한 A");
345+
User secondUser = User.create("role-cursor-b@example.com", "password", "권한 B");
346+
User firstAdmin = User.create("role-cursor-c@example.com", "password", "권한 C");
347+
firstAdmin.updateRole(UserRole.ADMIN);
348+
User secondAdmin = User.create("role-cursor-d@example.com", "password", "권한 D");
349+
secondAdmin.updateRole(UserRole.ADMIN);
350+
351+
userRepository.saveAll(List.of(secondUser, firstAdmin, firstUser, secondAdmin));
352+
entityManager.flush();
353+
entityManager.clear();
354+
355+
UserCursorRequest firstPageRequest = new UserCursorRequest(
356+
"role-cursor",
357+
null,
358+
false,
359+
null,
360+
null,
361+
1,
362+
Sort.Direction.ASC,
363+
UserSortBy.ROLE
364+
);
365+
366+
// When
367+
List<User> expectedOrder = userRepository.findUsers(firstPageRequest, 10);
368+
List<User> firstPage = userRepository.findUsers(firstPageRequest, 1);
369+
User lastUserOfFirstPage = firstPage.get(0);
370+
UserCursorRequest secondPageRequest = new UserCursorRequest(
371+
"role-cursor",
372+
null,
373+
false,
374+
lastUserOfFirstPage.getRole().name(),
375+
lastUserOfFirstPage.getId(),
376+
10,
377+
Sort.Direction.ASC,
378+
UserSortBy.ROLE
379+
);
380+
List<User> secondPage = userRepository.findUsers(secondPageRequest, 10);
381+
382+
// Then
383+
List<User> combinedPages = new ArrayList<>(firstPage);
384+
combinedPages.addAll(secondPage);
385+
386+
assertThat(expectedOrder)
387+
.extracting(User::getRole)
388+
.containsExactly(UserRole.ADMIN, UserRole.ADMIN, UserRole.USER, UserRole.USER);
389+
assertThat(combinedPages)
390+
.extracting(User::getId)
391+
.containsExactlyElementsOf(expectedOrder.stream()
392+
.map(User::getId)
393+
.toList());
394+
assertThat(firstPage)
395+
.extracting(User::getId)
396+
.doesNotContainAnyElementsOf(secondPage.stream()
397+
.map(User::getId)
398+
.toList());
399+
assertThat(firstPage).containsExactly(expectedOrder.get(0));
400+
assertThat(secondPage.get(0)).isEqualTo(expectedOrder.get(1));
401+
assertThat(secondPage.get(0).getRole()).isEqualTo(lastUserOfFirstPage.getRole());
402+
assertThat(secondPage.get(0).getId()).isEqualTo(expectedOrder.get(1).getId());
403+
}
404+
340405
@Test
341406
@DisplayName("잘못된 커서 값이면 예외가 발생한다")
342407
void findUsers_malformedCursor_throwsException() {

0 commit comments

Comments
 (0)