Skip to content

Commit

Permalink
test: add test
Browse files Browse the repository at this point in the history
  • Loading branch information
minjun3021 committed Nov 1, 2023
1 parent aaf384e commit be5fb98
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 13 deletions.
Original file line number Diff line number Diff line change
@@ -1,20 +1,26 @@
package com.group4.ticketingservice.Reservation

import com.group4.ticketingservice.AbstractIntegrationTest
import com.group4.ticketingservice.dto.QueueResponseDTO
import com.group4.ticketingservice.entity.Event
import com.group4.ticketingservice.entity.User
import com.group4.ticketingservice.repository.EventRepository
import com.group4.ticketingservice.repository.ReservationRepository
import com.group4.ticketingservice.repository.UserRepository
import com.group4.ticketingservice.service.ReservationService
import io.mockk.every
import io.mockk.mockk
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.RepeatedTest
import org.junit.jupiter.api.Test
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.http.HttpMethod
import org.springframework.http.ResponseEntity
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder
import org.springframework.test.context.TestPropertySource
import org.springframework.web.client.RestTemplate
import java.time.Duration.ofHours
import java.time.OffsetDateTime
import java.util.concurrent.CountDownLatch
Expand Down Expand Up @@ -50,6 +56,12 @@ class ReservationTest @Autowired constructor(
maxAttendees = 100
)

private val queueSuccess: QueueResponseDTO = QueueResponseDTO(
status = true,
message = "",
data = null
)

@BeforeEach fun addUserAndEvent() {
userRepository.save(sampleUser)
eventRepository.save(sampleEvent)
Expand All @@ -67,6 +79,9 @@ class ReservationTest @Autowired constructor(
@RepeatedTest(3)
@Test
fun `ReservationService_createReservation should not exceed the limit in the concurrency test`() {
val restTemplate: RestTemplate = mockk()
every { restTemplate.exchange(any() as String, HttpMethod.DELETE, null, QueueResponseDTO::class.java) } returns ResponseEntity.ok(queueSuccess)
reservationService.restTemplate = restTemplate
val threadCount = 1000
val executorService = Executors.newFixedThreadPool(32)
val countDownLatch = CountDownLatch(threadCount)
Expand Down
21 changes: 11 additions & 10 deletions src/main/kotlin/com/group4/ticketingservice/dto/QueueDTO.kt
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
package com.group4.ticketingservice.dto

class QueueResponseDTO {
val status: Boolean = false
val message: String = ""
class QueueResponseDTO(
val status: Boolean = false,
val message: String = "",
val data: TicketInfo? = null
}
class TicketInfo {
var eventId: String = ""
var userId: String = ""
var isWaiting = true
var offset = 0
}
)

Check warning on line 7 in src/main/kotlin/com/group4/ticketingservice/dto/QueueDTO.kt

View check run for this annotation

Codecov / codecov/patch

src/main/kotlin/com/group4/ticketingservice/dto/QueueDTO.kt#L7

Added line #L7 was not covered by tests

class TicketInfo(
var eventId: String = "",
var userId: String = "",
var isWaiting: Boolean = true,
var offset: Int = 0
)
data class TicketRequest(
val eventId: Int,
val userId: Int

Check warning on line 17 in src/main/kotlin/com/group4/ticketingservice/dto/QueueDTO.kt

View check run for this annotation

Codecov / codecov/patch

src/main/kotlin/com/group4/ticketingservice/dto/QueueDTO.kt#L9-L17

Added lines #L9 - L17 were not covered by tests
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class ReservationService @Autowired constructor(
private val userRepository: UserRepository,
private val eventRepository: EventRepository,
private val reservationRepository: ReservationRepository,
private val restTemplate: RestTemplate,
var restTemplate: RestTemplate,
@Value("\${ticketing.queue.server.url}")
private val queueServerURL: String

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.group4.ticketingservice.reservation

import com.group4.ticketingservice.dto.QueueResponseDTO
import com.group4.ticketingservice.entity.Event
import com.group4.ticketingservice.entity.Reservation
import com.group4.ticketingservice.entity.User
Expand All @@ -14,6 +15,10 @@ import io.mockk.mockk
import io.mockk.verify
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows
import org.springframework.http.HttpMethod
import org.springframework.http.HttpStatus
import org.springframework.http.ResponseEntity
import org.springframework.web.client.HttpClientErrorException
import org.springframework.web.client.RestTemplate
import java.time.Duration.ofHours
import java.time.OffsetDateTime
Expand All @@ -32,7 +37,6 @@ class ReservationServiceTest() {
queueServerURL = "url",
restTemplate = restTemplate
)

val sampleUserId = 1

val sampleUser = User(
Expand Down Expand Up @@ -67,13 +71,18 @@ class ReservationServiceTest() {
user = sampleUser,
event = sampleEvent
)
private val queueSuccess: QueueResponseDTO = QueueResponseDTO(
status = true,
message = "",
data = null
)

@Test
fun `ReservationService_createReservation invoke ReservationRepository_save`() {
every { userRepository.getReferenceById(any()) } returns sampleUser
every { eventRepository.findByIdWithPesimisticLock(any()) } returns sampleEvent
every { eventRepository.findByIdWithOptimisicLock(any()) } returns sampleEvent

every { restTemplate.exchange(any() as String, HttpMethod.DELETE, null, QueueResponseDTO::class.java) } returns ResponseEntity.ok(queueSuccess)
every { eventRepository.saveAndFlush(any()) } returns sampleEvent
every { reservationRepository.saveAndFlush(any()) } returns sampleReservation
reservationService.createReservation(1, 1, "김해군", "010-1234-5678", 1, "서울")
Expand All @@ -84,7 +93,18 @@ class ReservationServiceTest() {
fun `ReservationService_createReservation throw custom exception when time not allowed`() {
every { userRepository.getReferenceById(any()) } returns sampleUser
every { eventRepository.findByIdWithPesimisticLock(any()) } returns sampleWrongEvent
every { restTemplate.exchange(any() as String, HttpMethod.DELETE, null, QueueResponseDTO::class.java) } returns ResponseEntity.ok(queueSuccess)
every { eventRepository.saveAndFlush(any()) } returns sampleEvent
every { reservationRepository.saveAndFlush(any()) } returns sampleReservation

assertThrows<CustomException> { reservationService.createReservation(1, 1, "김해군", "010-1234-5678", 1, "서울") }
}

@Test
fun `ReservationService_createReservation throw custom exception when doesn't have waiting ticket`() {
every { userRepository.getReferenceById(any()) } returns sampleUser
every { eventRepository.findByIdWithPesimisticLock(any()) } returns sampleWrongEvent
every { restTemplate.exchange(any() as String, HttpMethod.DELETE, null, QueueResponseDTO::class.java) } throws HttpClientErrorException(HttpStatus.NOT_FOUND)
every { eventRepository.saveAndFlush(any()) } returns sampleEvent
every { reservationRepository.saveAndFlush(any()) } returns sampleReservation

Expand Down

0 comments on commit be5fb98

Please sign in to comment.