mirror of https://github.com/usbharu/Hideout.git
test: テストを追加
This commit is contained in:
parent
c27599ac55
commit
52b609bac8
|
@ -0,0 +1,181 @@
|
||||||
|
package dev.usbharu.hideout.service.ap.resource
|
||||||
|
|
||||||
|
import dev.usbharu.hideout.domain.model.hideout.entity.User
|
||||||
|
import dev.usbharu.hideout.repository.UserRepository
|
||||||
|
import io.ktor.client.*
|
||||||
|
import io.ktor.client.engine.mock.*
|
||||||
|
import kotlinx.coroutines.async
|
||||||
|
import kotlinx.coroutines.awaitAll
|
||||||
|
import kotlinx.coroutines.test.runTest
|
||||||
|
import org.junit.jupiter.api.Test
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith
|
||||||
|
import org.mockito.junit.jupiter.MockitoExtension
|
||||||
|
import org.mockito.kotlin.any
|
||||||
|
import org.mockito.kotlin.doReturn
|
||||||
|
import org.mockito.kotlin.mock
|
||||||
|
import org.mockito.kotlin.whenever
|
||||||
|
import utils.JsonObjectMapper.objectMapper
|
||||||
|
import java.time.Instant
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
|
@ExtendWith(MockitoExtension::class)
|
||||||
|
class APResourceResolveServiceImplTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `単純な一回のリクエスト`() = runTest {
|
||||||
|
|
||||||
|
var count = 0
|
||||||
|
|
||||||
|
val httpClient = HttpClient(MockEngine { request ->
|
||||||
|
count++
|
||||||
|
respondOk("{}")
|
||||||
|
})
|
||||||
|
|
||||||
|
val userRepository = mock<UserRepository>()
|
||||||
|
|
||||||
|
whenever(userRepository.findById(any())).doReturn(
|
||||||
|
User.of(
|
||||||
|
2L,
|
||||||
|
"follower",
|
||||||
|
"follower.example.com",
|
||||||
|
"followerUser",
|
||||||
|
"test follower user",
|
||||||
|
"https://follower.example.com/inbox",
|
||||||
|
"https://follower.example.com/outbox",
|
||||||
|
"https://follower.example.com",
|
||||||
|
"https://follower.example.com",
|
||||||
|
publicKey = "",
|
||||||
|
createdAt = Instant.now()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
val apResourceResolveService = APResourceResolveServiceImpl(httpClient, userRepository, objectMapper)
|
||||||
|
|
||||||
|
apResourceResolveService.resolve("https", 0)
|
||||||
|
|
||||||
|
assertEquals(1, count)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun 複数回の同じリクエストが重複して発行されない() = runTest {
|
||||||
|
var count = 0
|
||||||
|
|
||||||
|
val httpClient = HttpClient(MockEngine { request ->
|
||||||
|
count++
|
||||||
|
respondOk("{}")
|
||||||
|
})
|
||||||
|
|
||||||
|
val userRepository = mock<UserRepository>()
|
||||||
|
|
||||||
|
whenever(userRepository.findById(any())).doReturn(
|
||||||
|
User.of(
|
||||||
|
2L,
|
||||||
|
"follower",
|
||||||
|
"follower.example.com",
|
||||||
|
"followerUser",
|
||||||
|
"test follower user",
|
||||||
|
"https://follower.example.com/inbox",
|
||||||
|
"https://follower.example.com/outbox",
|
||||||
|
"https://follower.example.com",
|
||||||
|
"https://follower.example.com",
|
||||||
|
publicKey = "",
|
||||||
|
createdAt = Instant.now()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
val apResourceResolveService = APResourceResolveServiceImpl(httpClient, userRepository, objectMapper)
|
||||||
|
|
||||||
|
apResourceResolveService.resolve("https", 0)
|
||||||
|
apResourceResolveService.resolve("https", 0)
|
||||||
|
apResourceResolveService.resolve("https", 0)
|
||||||
|
apResourceResolveService.resolve("https", 0)
|
||||||
|
|
||||||
|
assertEquals(1, count)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun 複数回の同じリクエストが同時に発行されても重複して発行されない() = runTest {
|
||||||
|
var count = 0
|
||||||
|
|
||||||
|
val httpClient = HttpClient(MockEngine { request ->
|
||||||
|
count++
|
||||||
|
respondOk("{}")
|
||||||
|
})
|
||||||
|
|
||||||
|
val userRepository = mock<UserRepository>()
|
||||||
|
|
||||||
|
whenever(userRepository.findById(any())).doReturn(
|
||||||
|
User.of(
|
||||||
|
2L,
|
||||||
|
"follower",
|
||||||
|
"follower.example.com",
|
||||||
|
"followerUser",
|
||||||
|
"test follower user",
|
||||||
|
"https://follower.example.com/inbox",
|
||||||
|
"https://follower.example.com/outbox",
|
||||||
|
"https://follower.example.com",
|
||||||
|
"https://follower.example.com",
|
||||||
|
publicKey = "",
|
||||||
|
createdAt = Instant.now()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
val apResourceResolveService = APResourceResolveServiceImpl(httpClient, userRepository, objectMapper)
|
||||||
|
|
||||||
|
repeat(10) {
|
||||||
|
awaitAll(
|
||||||
|
async { apResourceResolveService.resolve("https", 0) },
|
||||||
|
async { apResourceResolveService.resolve("https", 0) },
|
||||||
|
async { apResourceResolveService.resolve("https", 0) },
|
||||||
|
async { apResourceResolveService.resolve("https", 0) },
|
||||||
|
async { apResourceResolveService.resolve("https", 0) },
|
||||||
|
async { apResourceResolveService.resolve("https", 0) },
|
||||||
|
async { apResourceResolveService.resolve("https", 0) },
|
||||||
|
async { apResourceResolveService.resolve("https", 0) },
|
||||||
|
async { apResourceResolveService.resolve("https", 0) },
|
||||||
|
async { apResourceResolveService.resolve("https", 0) },
|
||||||
|
async { apResourceResolveService.resolve("https", 0) },
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
assertEquals(1, count)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun 関係のないリクエストは発行する() = runTest {
|
||||||
|
var count = 0
|
||||||
|
|
||||||
|
val httpClient = HttpClient(MockEngine { request ->
|
||||||
|
count++
|
||||||
|
respondOk("{}")
|
||||||
|
})
|
||||||
|
|
||||||
|
val userRepository = mock<UserRepository>()
|
||||||
|
|
||||||
|
whenever(userRepository.findById(any())).doReturn(
|
||||||
|
User.of(
|
||||||
|
2L,
|
||||||
|
"follower",
|
||||||
|
"follower.example.com",
|
||||||
|
"followerUser",
|
||||||
|
"test follower user",
|
||||||
|
"https://follower.example.com/inbox",
|
||||||
|
"https://follower.example.com/outbox",
|
||||||
|
"https://follower.example.com",
|
||||||
|
"https://follower.example.com",
|
||||||
|
publicKey = "",
|
||||||
|
createdAt = Instant.now()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
val apResourceResolveService = APResourceResolveServiceImpl(httpClient, userRepository, objectMapper)
|
||||||
|
|
||||||
|
apResourceResolveService.resolve("abcd", 0)
|
||||||
|
apResourceResolveService.resolve("1234", 0)
|
||||||
|
apResourceResolveService.resolve("aaaa", 0)
|
||||||
|
|
||||||
|
assertEquals(3, count)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue