|
3 | 3 | import org.junit.jupiter.api.DisplayName;
|
4 | 4 | import org.junit.jupiter.api.Test;
|
5 | 5 | import org.orury.domain.config.InfrastructureTest;
|
| 6 | +import org.orury.domain.global.constants.NumberConstants; |
6 | 7 | import org.orury.domain.gym.domain.entity.Gym;
|
7 | 8 | import org.orury.domain.gym.domain.entity.GymLikePK;
|
| 9 | +import org.springframework.data.domain.PageRequest; |
| 10 | +import org.springframework.data.domain.Pageable; |
8 | 11 |
|
9 | 12 | import java.util.Collections;
|
10 | 13 | import java.util.List;
|
|
13 | 16 |
|
14 | 17 | import static org.junit.jupiter.api.Assertions.assertFalse;
|
15 | 18 | import static org.junit.jupiter.api.Assertions.assertTrue;
|
16 |
| -import static org.mockito.ArgumentMatchers.anyLong; |
17 |
| -import static org.mockito.ArgumentMatchers.anyString; |
| 19 | +import static org.mockito.ArgumentMatchers.*; |
18 | 20 | import static org.mockito.BDDMockito.given;
|
19 | 21 | import static org.mockito.BDDMockito.then;
|
20 | 22 | import static org.mockito.Mockito.times;
|
21 | 23 | import static org.orury.domain.GymDomainFixture.TestGym.createGym;
|
| 24 | +import static org.orury.domain.GymDomainFixture.TestGymLike.createGymLike; |
22 | 25 | import static org.orury.domain.GymDomainFixture.TestGymLikePK.createGymLikePK;
|
23 | 26 |
|
24 | 27 | @DisplayName("[Reader] 암장 ReaderImpl 테스트")
|
@@ -140,6 +143,60 @@ void when_GymsInAreaGrid_Then_ReturnGymList() {
|
140 | 143 | .findByLatitudeBetweenAndLongitudeBetweenOrderByLikeCount(bottom, top, left, right);
|
141 | 144 | }
|
142 | 145 |
|
| 146 | + @Test |
| 147 | + @DisplayName("유저id로 좋아요한 암장 리스트를 반환한다. (첫 조회인 경우)") |
| 148 | + void when_FirstGymsLikedByUser_Then_ReturnGymList() { |
| 149 | + // given |
| 150 | + Long userId = 1L; |
| 151 | + Long cursor = NumberConstants.FIRST_CURSOR; |
| 152 | + Pageable pageRequest = PageRequest.of(0, NumberConstants.GYM_PAGINATION_SIZE); |
| 153 | + |
| 154 | + given(gymLikeRepository.findByGymLikePK_UserIdOrderByGymLikePKDesc(userId, pageRequest)) |
| 155 | + .willReturn(List.of( |
| 156 | + createGymLike(11L, userId).build().get(), |
| 157 | + createGymLike(10L, userId).build().get() |
| 158 | + )); |
| 159 | + |
| 160 | + given(gymRepository.findById(anyLong())) |
| 161 | + .willReturn(Optional.of(createGym(1L).build().get())); |
| 162 | + |
| 163 | + // when |
| 164 | + gymReader.findGymsByUserLiked(userId, cursor, pageRequest); |
| 165 | + |
| 166 | + // then |
| 167 | + then(gymLikeRepository).should(times(1)) |
| 168 | + .findByGymLikePK_UserIdOrderByGymLikePKDesc(anyLong(), any(Pageable.class)); |
| 169 | + then(gymLikeRepository).should(times(0)) |
| 170 | + .findByGymLikePK_UserIdAndGymLikePK_GymIdLessThanOrderByGymLikePKDesc(anyLong(), anyLong(), any(Pageable.class)); |
| 171 | + } |
| 172 | + |
| 173 | + @Test |
| 174 | + @DisplayName("유저id로 좋아요한 암장 리스트를 반환한다. (첫 조회가 아닌 경우)") |
| 175 | + void when_GymsLikedByUser_Then_ReturnGymList() { |
| 176 | + // given |
| 177 | + Long userId = 1L; |
| 178 | + Long cursor = 2L; |
| 179 | + Pageable pageRequest = PageRequest.of(0, NumberConstants.GYM_PAGINATION_SIZE); |
| 180 | + |
| 181 | + given(gymLikeRepository.findByGymLikePK_UserIdAndGymLikePK_GymIdLessThanOrderByGymLikePKDesc(userId, cursor, pageRequest)) |
| 182 | + .willReturn(List.of( |
| 183 | + createGymLike(11L, userId).build().get(), |
| 184 | + createGymLike(10L, userId).build().get() |
| 185 | + )); |
| 186 | + |
| 187 | + given(gymRepository.findById(anyLong())) |
| 188 | + .willReturn(Optional.of(createGym(1L).build().get())); |
| 189 | + |
| 190 | + // when |
| 191 | + gymReader.findGymsByUserLiked(userId, cursor, pageRequest); |
| 192 | + |
| 193 | + // then |
| 194 | + then(gymLikeRepository).should(times(0)) |
| 195 | + .findByGymLikePK_UserIdOrderByGymLikePKDesc(anyLong(), any(Pageable.class)); |
| 196 | + then(gymLikeRepository).should(times(1)) |
| 197 | + .findByGymLikePK_UserIdAndGymLikePK_GymIdLessThanOrderByGymLikePKDesc(anyLong(), anyLong(), any(Pageable.class)); |
| 198 | + } |
| 199 | + |
143 | 200 | @Test
|
144 | 201 | @DisplayName("존재하는 (userId와 gymId로 구성된) 암장좋아요PK가 들어오면, true를 반환한다.")
|
145 | 202 | void when_ExistingGymLikePK_Then_ReturnTrue() {
|
|
0 commit comments