Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/52 api page and search #104

Merged
merged 22 commits into from
Oct 9, 2023
Merged
Show file tree
Hide file tree
Changes from 18 commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 58 additions & 14 deletions docs/open-api.yaml
ParkJeongseop marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,28 @@ paths:
schema:
$ref: '#/components/schemas/ReservationResponse'
/events:
get:
tags:
- event-controller
operationId: getEvents
parameters:
- name: title
in: query
required: false
schema:
type: string
- name: pageable
in: query
required: true
schema:
$ref: '#/components/schemas/Pageable'
responses:
"200":
description: OK
content:
'*/*':
schema:
$ref: '#/components/schemas/SuccessResponseDTO'
post:
tags:
- event-controller
Expand Down Expand Up @@ -218,20 +240,6 @@ paths:
'*/*':
schema:
$ref: '#/components/schemas/EventResponse'
/events/:
get:
tags:
- event-controller
operationId: getEvents
responses:
"200":
description: OK
content:
'*/*':
schema:
type: array
items:
$ref: '#/components/schemas/EventResponse'
/bookmarks/{id}:
get:
tags:
Expand Down Expand Up @@ -416,3 +424,39 @@ components:
event_id:
type: integer
format: int32
Pageable:
type: object
properties:
page:
minimum: 0
type: integer
format: int32
size:
minimum: 1
type: integer
format: int32
sort:
type: array
items:
type: string
SuccessResponseDTO:
required:
- data
- message
- path
- timestamp
- totalElements
type: object
properties:
timestamp:
type: string
format: date-time
message:
type: string
data:
type: object
path:
type: string
totalElements:
type: integer
format: int64
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,13 @@ import com.group4.ticketingservice.repository.EventRepository
import com.group4.ticketingservice.repository.UserRepository
import com.group4.ticketingservice.utils.Authority
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.Assertions.assertInstanceOf
import org.junit.jupiter.api.Test
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.data.domain.Page
import org.springframework.data.domain.PageRequest
import org.springframework.data.domain.Pageable
import org.springframework.data.repository.findByIdOrNull
import org.springframework.transaction.annotation.Transactional
import java.time.OffsetDateTime
Expand All @@ -37,11 +41,49 @@ class BookmarkRepositoryTest(
maxAttendees = 10
)

private val sampleBookmark = Bookmark(
user = sampleUser,
event = sampleEvent
val sampleEvents = mutableListOf(
Event(
title = "정섭이의 코딩쇼",
date = OffsetDateTime.now(),
reservationEndTime = OffsetDateTime.now(),
reservationStartTime = OffsetDateTime.now(),
maxAttendees = 10
),
Event(
title = "민준이의 전국군가잘함",
date = OffsetDateTime.now(),
reservationEndTime = OffsetDateTime.now(),
reservationStartTime = OffsetDateTime.now(),
maxAttendees = 10
),
Event(
title = "하영이의 신작도서 팬싸인회",
date = OffsetDateTime.now(),
reservationEndTime = OffsetDateTime.now(),
reservationStartTime = OffsetDateTime.now(),
maxAttendees = 10
),
Event(
title = "준하의 스파르타 코딩 동아리 설명회",
date = OffsetDateTime.now(),
reservationEndTime = OffsetDateTime.now(),
reservationStartTime = OffsetDateTime.now(),
maxAttendees = 10
),
Event(
title = "군대에서 코딩 직군으로 복무하기 설명회",
date = OffsetDateTime.now(),
reservationEndTime = OffsetDateTime.now(),
reservationStartTime = OffsetDateTime.now(),
maxAttendees = 10
)
)

@AfterEach
fun removeBookmark() {
bookmarkRepository.deleteAll()
}

@Test
fun `bookmarkRepository_save should return savedBookmark`() {
// given
Expand All @@ -67,7 +109,7 @@ class BookmarkRepositoryTest(
val foundBookmark = bookmarkRepository.findByIdAndUserId(savedBookmark.id!!, savedUser.id!!)

// then
assert(savedBookmark.id == foundBookmark.id)
assert(savedBookmark.id == foundBookmark?.id)
}

@Test
Expand All @@ -93,12 +135,35 @@ class BookmarkRepositoryTest(
val savedUser = userRepository.save(sampleUser)
val savedEvent = eventRepository.save(sampleEvent)
bookmarkRepository.save(Bookmark(user = savedUser, event = savedEvent))
val pageable: Pageable = PageRequest.of(0, 10)

// when
val listofBookmarks = bookmarkRepository.findByUserId(savedUser.id!!, pageable)

// then
assertInstanceOf(Page::class.java, listofBookmarks)
assertInstanceOf(Bookmark::class.java, listofBookmarks.content[0])
}

@Test
fun `bookmarkRepository_findByUser should return page of bookmarks with pagination`() {
// given
val savedUser = userRepository.save(sampleUser)
bookmarkRepository.deleteAll()
sampleEvents.forEach {
val savedEvent = eventRepository.save(it)
bookmarkRepository.save(Bookmark(user = savedUser, event = savedEvent))
}
val pageSize = 2
val pageable: Pageable = PageRequest.of(0, pageSize)

// when
val listofBookmarks = bookmarkRepository.findByUserId(savedUser.id!!)
val result = bookmarkRepository.findByUserId(savedUser.id!!, pageable)

// then
assertInstanceOf(ArrayList::class.java, listofBookmarks)
assertInstanceOf(Bookmark::class.java, listofBookmarks[0])
assertThat(result.totalElements).isEqualTo(sampleEvents.size.toLong())
assertThat(result.pageable.pageSize).isEqualTo(pageSize)
assertThat(result.numberOfElements).isEqualTo(pageSize)
assertThat(result.content.size).isEqualTo(pageSize)
}
}
Loading
Loading