mirror of https://github.com/usbharu/Hideout.git
test: テストを追加2
This commit is contained in:
parent
17cc92d344
commit
d696494100
hideout/hideout-activitypub
build.gradle.kts
src
main/kotlin/dev/usbharu/hideout/activitypub/interfaces/wellknown
test/kotlin
dev/usbharu/hideout/activitypub/application/webfinger
util
|
@ -52,6 +52,7 @@ dependencies {
|
||||||
testImplementation(libs.coroutines.test)
|
testImplementation(libs.coroutines.test)
|
||||||
testImplementation(libs.h2db)
|
testImplementation(libs.h2db)
|
||||||
testImplementation(libs.flyway.core)
|
testImplementation(libs.flyway.core)
|
||||||
|
testImplementation(libs.mockito.kotlin)
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.test {
|
tasks.test {
|
||||||
|
|
|
@ -9,7 +9,7 @@ import java.net.URI
|
||||||
|
|
||||||
@JacksonXmlRootElement(localName = "XRD", namespace = "http://docs.oasis-open.org/ns/xri/xrd-1.0")
|
@JacksonXmlRootElement(localName = "XRD", namespace = "http://docs.oasis-open.org/ns/xri/xrd-1.0")
|
||||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||||
class XRD(
|
data class XRD(
|
||||||
@JacksonXmlProperty(localName = "Link", namespace = "http://docs.oasis-open.org/ns/xri/xrd-1.0")
|
@JacksonXmlProperty(localName = "Link", namespace = "http://docs.oasis-open.org/ns/xri/xrd-1.0")
|
||||||
@JacksonXmlElementWrapper(useWrapping = false)
|
@JacksonXmlElementWrapper(useWrapping = false)
|
||||||
@JsonProperty("links")
|
@JsonProperty("links")
|
||||||
|
@ -21,7 +21,7 @@ class XRD(
|
||||||
)
|
)
|
||||||
|
|
||||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||||
class Link(
|
data class Link(
|
||||||
@JacksonXmlProperty(localName = "rel", isAttribute = true) val rel: String,
|
@JacksonXmlProperty(localName = "rel", isAttribute = true) val rel: String,
|
||||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||||
@JacksonXmlProperty(localName = "template", isAttribute = true) val template: String?,
|
@JacksonXmlProperty(localName = "template", isAttribute = true) val template: String?,
|
||||||
|
|
|
@ -0,0 +1,98 @@
|
||||||
|
package dev.usbharu.hideout.activitypub.application.webfinger
|
||||||
|
|
||||||
|
import dev.usbharu.hideout.activitypub.external.activitystreams.TestActorFactory
|
||||||
|
import dev.usbharu.hideout.activitypub.interfaces.wellknown.Link
|
||||||
|
import dev.usbharu.hideout.activitypub.interfaces.wellknown.XRD
|
||||||
|
import dev.usbharu.hideout.core.config.ApplicationConfig
|
||||||
|
import dev.usbharu.hideout.core.domain.model.actor.ActorRepository
|
||||||
|
import dev.usbharu.hideout.core.domain.model.support.principal.Anonymous
|
||||||
|
import kotlinx.coroutines.test.runTest
|
||||||
|
import org.junit.jupiter.api.Test
|
||||||
|
import org.junit.jupiter.api.assertThrows
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith
|
||||||
|
import org.mockito.InjectMocks
|
||||||
|
import org.mockito.Mock
|
||||||
|
import org.mockito.Spy
|
||||||
|
import org.mockito.junit.jupiter.MockitoExtension
|
||||||
|
import org.mockito.kotlin.eq
|
||||||
|
import org.mockito.kotlin.times
|
||||||
|
import org.mockito.kotlin.verify
|
||||||
|
import org.mockito.kotlin.whenever
|
||||||
|
import util.TestTransaction
|
||||||
|
import java.net.URI
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
|
@ExtendWith(MockitoExtension::class)
|
||||||
|
class WebFingerApplicationServiceTest {
|
||||||
|
@InjectMocks
|
||||||
|
lateinit var webFingerApplicationService: WebFingerApplicationService
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
lateinit var actorRepository: ActorRepository
|
||||||
|
|
||||||
|
@Spy
|
||||||
|
val transaction = TestTransaction
|
||||||
|
|
||||||
|
@Spy
|
||||||
|
val applicationConfig = ApplicationConfig(URI.create("https://example.com"))
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun acctから始まらないとだめ() = runTest {
|
||||||
|
assertThrows<IllegalArgumentException> {
|
||||||
|
webFingerApplicationService.execute("a", Anonymous)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun ドメインが自ドメインと一致しないとだめ() = runTest {
|
||||||
|
assertThrows<IllegalArgumentException> {
|
||||||
|
webFingerApplicationService.execute("acct:test@remote.example.com", Anonymous)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `acct@username@hostはだめ`() = runTest {
|
||||||
|
assertThrows<IllegalArgumentException> {
|
||||||
|
webFingerApplicationService.execute("acct:@username@example.com", Anonymous)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun actorが存在しないとだめ() = runTest {
|
||||||
|
assertThrows<IllegalArgumentException> {
|
||||||
|
webFingerApplicationService.execute("acct:test2@example.com", Anonymous)
|
||||||
|
}
|
||||||
|
|
||||||
|
verify(actorRepository, times(1)).findByNameAndDomain(eq("test2"), eq("example.com"))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun actorが存在したら返す() = runTest {
|
||||||
|
whenever(
|
||||||
|
actorRepository.findByNameAndDomain(
|
||||||
|
eq("test"), eq("example.com")
|
||||||
|
)
|
||||||
|
).thenReturn(
|
||||||
|
TestActorFactory.create(
|
||||||
|
actorName = "test",
|
||||||
|
domain = "example.com",
|
||||||
|
uri = URI.create("https://example.com/users/test")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
val execute = webFingerApplicationService.execute("acct:test@example.com", Anonymous)
|
||||||
|
|
||||||
|
val expected = XRD(
|
||||||
|
listOf(
|
||||||
|
Link(
|
||||||
|
rel = "self",
|
||||||
|
href = "https://example.com/users/test",
|
||||||
|
type = "application/activity+json",
|
||||||
|
template = null
|
||||||
|
)
|
||||||
|
), URI.create("acct:test@example.com")
|
||||||
|
)
|
||||||
|
|
||||||
|
assertEquals(expected, execute)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
package util
|
||||||
|
|
||||||
|
import dev.usbharu.hideout.core.application.shared.Transaction
|
||||||
|
|
||||||
|
object TestTransaction : Transaction {
|
||||||
|
override suspend fun <T> transaction(block: suspend () -> T): T = block()
|
||||||
|
override suspend fun <T> transaction(transactionLevel: Int, block: suspend () -> T): T = block()
|
||||||
|
}
|
Loading…
Reference in New Issue