generated from pricelees/issue-pr-template
[#56] 예약 & 결제 프로세스 및 패키지 구조 재정의 #57
@ -32,10 +32,9 @@ interface ThemeRepository : JpaRepository<ThemeEntity, Long> {
|
||||
AND (s.date BETWEEN :startFrom AND :endAt)
|
||||
GROUP BY
|
||||
s.theme_id
|
||||
ORDER BY
|
||||
reservation_count desc
|
||||
LIMIT :count
|
||||
) ranked_themes ON t.id = ranked_themes.theme_id
|
||||
ORDER BY ranked_themes.reservation_count DESC, t.id ASC
|
||||
""",
|
||||
nativeQuery = true
|
||||
)
|
||||
|
||||
@ -4,14 +4,15 @@ import com.sangdol.common.types.web.HttpStatus
|
||||
import com.sangdol.common.utils.KoreaDate
|
||||
import com.sangdol.roomescape.supports.*
|
||||
import com.sangdol.roomescape.theme.business.DateUtils
|
||||
import com.sangdol.roomescape.theme.dto.ThemeInfoResponse
|
||||
import com.sangdol.roomescape.theme.exception.ThemeErrorCode
|
||||
import com.sangdol.roomescape.theme.infrastructure.persistence.ThemeEntity
|
||||
import com.sangdol.roomescape.theme.infrastructure.persistence.ThemeRepository
|
||||
import com.sangdol.roomescape.theme.dto.ThemeInfoResponse
|
||||
import com.sangdol.roomescape.theme.mapper.toEntity
|
||||
import com.sangdol.roomescape.user.infrastructure.persistence.UserEntity
|
||||
import io.kotest.matchers.collections.shouldContainInOrder
|
||||
import io.kotest.matchers.collections.shouldHaveSize
|
||||
import io.kotest.matchers.comparables.shouldBeLessThan
|
||||
import org.hamcrest.CoreMatchers.equalTo
|
||||
import org.springframework.http.HttpMethod
|
||||
import java.time.LocalDate
|
||||
@ -72,6 +73,35 @@ class ThemeApiTest(
|
||||
response.map { it.id }.shouldContainInOrder(expectedResult)
|
||||
}
|
||||
}
|
||||
|
||||
test("예약 수가 동일한 경우 ID 오름차순으로 정렬한다.") {
|
||||
val expectedSize = initialize("두 개의 테마에 각각 1개의 확정 예약 생성") {
|
||||
val user = testAuthUtil.defaultUserLogin()
|
||||
(1..2).map { _ ->
|
||||
dummyInitializer.createConfirmReservation(
|
||||
user.first,
|
||||
scheduleRequest = ScheduleFixture.createRequest.copy(
|
||||
date = DateUtils.getSundayOfPreviousWeek(KoreaDate.today())
|
||||
)
|
||||
)
|
||||
}
|
||||
}.size
|
||||
|
||||
runTest(
|
||||
on = {
|
||||
get("/themes/most-reserved?count=10")
|
||||
},
|
||||
expect = {
|
||||
statusCode(HttpStatus.OK.value())
|
||||
}
|
||||
).also { res ->
|
||||
val response: List<ThemeInfoResponse> =
|
||||
ResponseParser.parseListResponse(res.extract().path("data.themes"))
|
||||
|
||||
response shouldHaveSize expectedSize
|
||||
response[0].id shouldBeLessThan response[1].id
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user