|
2 | 2 |
|
3 | 3 | import static io.f1.backend.global.exception.errorcode.CommonErrorCode.INVALID_PAGINATION; |
4 | 4 |
|
| 5 | +import static io.f1.backend.global.exception.errorcode.RoomErrorCode.PLAYER_NOT_FOUND; |
5 | 6 | import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; |
6 | 7 | import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; |
7 | 8 | import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; |
8 | 9 |
|
9 | 10 | import com.github.database.rider.core.api.dataset.DataSet; |
10 | 11 |
|
| 12 | +import io.f1.backend.global.exception.errorcode.ErrorCode; |
| 13 | +import io.f1.backend.global.exception.errorcode.RoomErrorCode; |
11 | 14 | import io.f1.backend.global.template.BrowserTestTemplate; |
12 | 15 |
|
13 | 16 | import org.junit.jupiter.api.DisplayName; |
@@ -35,7 +38,7 @@ void totalRankingForSingleUser() throws Exception { |
35 | 38 |
|
36 | 39 | @Test |
37 | 40 | @DisplayName("100을 넘는 페이지 크기 요청이 오면 예외를 발생시킨다") |
38 | | - void totalRankingForSingleUserWithInvalidPageSize() throws Exception { |
| 41 | + void totalRankingWithInvalidPageSize() throws Exception { |
39 | 42 | // when |
40 | 43 | ResultActions result = mockMvc.perform(get("/stats/rankings").param("size", "101")); |
41 | 44 |
|
@@ -86,4 +89,61 @@ void totalRankingForThreeUserWithPageSize2() throws Exception { |
86 | 89 | jsonPath("$.totalElements").value(1), |
87 | 90 | jsonPath("$.ranks.length()").value(1)); |
88 | 91 | } |
| 92 | + |
| 93 | + @Test |
| 94 | + @DataSet("datasets/stat/three-user-stat.yml") |
| 95 | + @DisplayName("랭킹 페이지에서 존재하지 않는 닉네임을 검색하면 예외를 발생시킨다.") |
| 96 | + void totalRankingWithUnregisteredNickname() throws Exception { |
| 97 | + // given |
| 98 | + String nickname = "UNREGISTERED"; |
| 99 | + |
| 100 | + // when |
| 101 | + ResultActions result = mockMvc.perform(get("/stats/rankings/" + nickname)); |
| 102 | + |
| 103 | + // then |
| 104 | + result.andExpectAll( |
| 105 | + status().isNotFound(), jsonPath("$.code").value(PLAYER_NOT_FOUND.getCode())); |
| 106 | + } |
| 107 | + |
| 108 | + @Test |
| 109 | + @DataSet("datasets/stat/three-user-stat.yml") |
| 110 | + @DisplayName("총 유저 수가 3명이고 페이지 크기가 2일 때 1위 유저의 닉네임을 검색하면 첫 번째 페이지에 2개의 결과를 반환한다") |
| 111 | + void totalRankingForThreeUserWithFirstRankedNickname() throws Exception { |
| 112 | + // given |
| 113 | + String nickname = "USER3"; |
| 114 | + |
| 115 | + // when |
| 116 | + ResultActions result = mockMvc.perform( |
| 117 | + get("/stats/rankings/" + nickname).param("size", "2")); |
| 118 | + |
| 119 | + // then |
| 120 | + result.andExpectAll( |
| 121 | + status().isOk(), |
| 122 | + jsonPath("$.totalPages").value(2), |
| 123 | + jsonPath("$.currentPage").value(1), |
| 124 | + jsonPath("$.totalElements").value(2), |
| 125 | + jsonPath("$.ranks.length()").value(2), |
| 126 | + jsonPath("$.ranks[0].nickname").value(nickname)); |
| 127 | + } |
| 128 | + |
| 129 | + @Test |
| 130 | + @DataSet("datasets/stat/three-user-stat.yml") |
| 131 | + @DisplayName("총 유저 수가 3명이고 페이지 크기가 2일 때 3위 유저의 닉네임을 검색하면 두 번째 페이지에 1개의 결과를 반환한다") |
| 132 | + void totalRankingForThreeUserWithLastRankedNickname() throws Exception { |
| 133 | + // given |
| 134 | + String nickname = "USER1"; |
| 135 | + |
| 136 | + // when |
| 137 | + ResultActions result = mockMvc.perform( |
| 138 | + get("/stats/rankings/" + nickname).param("size", "2")); |
| 139 | + |
| 140 | + // then |
| 141 | + result.andExpectAll( |
| 142 | + status().isOk(), |
| 143 | + jsonPath("$.totalPages").value(2), |
| 144 | + jsonPath("$.currentPage").value(2), |
| 145 | + jsonPath("$.totalElements").value(1), |
| 146 | + jsonPath("$.ranks.length()").value(1), |
| 147 | + jsonPath("$.ranks[0].nickname").value(nickname)); |
| 148 | + } |
89 | 149 | } |
0 commit comments