From 8c14a966aa890620c8bc822d2854bafc0870e4cf Mon Sep 17 00:00:00 2001 From: usbharu Date: Tue, 25 Feb 2025 11:06:06 +0900 Subject: [PATCH] =?UTF-8?q?test:=20=E3=83=86=E3=82=B9=E3=83=88=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nodeinfo/NodeinfoApplicationService.kt | 38 ++++++++------ .../application/nodeinfo/NodeinfoRequest.kt | 3 ++ .../wellknown/NodeinfoController.kt | 5 +- .../NodeinfoApplicationServiceTest.kt | 52 +++++++++++++++++++ 4 files changed, 79 insertions(+), 19 deletions(-) create mode 100644 hideout/hideout-activitypub/src/main/kotlin/dev/usbharu/hideout/activitypub/application/nodeinfo/NodeinfoRequest.kt create mode 100644 hideout/hideout-activitypub/src/test/kotlin/dev/usbharu/hideout/activitypub/application/webfinger/NodeinfoApplicationServiceTest.kt diff --git a/hideout/hideout-activitypub/src/main/kotlin/dev/usbharu/hideout/activitypub/application/nodeinfo/NodeinfoApplicationService.kt b/hideout/hideout-activitypub/src/main/kotlin/dev/usbharu/hideout/activitypub/application/nodeinfo/NodeinfoApplicationService.kt index 29a29e75..ad85ef99 100644 --- a/hideout/hideout-activitypub/src/main/kotlin/dev/usbharu/hideout/activitypub/application/nodeinfo/NodeinfoApplicationService.kt +++ b/hideout/hideout-activitypub/src/main/kotlin/dev/usbharu/hideout/activitypub/application/nodeinfo/NodeinfoApplicationService.kt @@ -14,27 +14,31 @@ import org.springframework.stereotype.Service * 今後ユーザーエージェントに応じてレスポンスを変更する可能性があるためApplicationServiceとして作成する commandは現時点ではUnitだが今後変化する可能性あり */ class NodeinfoApplicationService( - @Autowired(required = false) private val buildInfo: BuildProperties? = null, + @Autowired(required = false) private val buildInfo: BuildProperties?, private val applicationConfig: ApplicationConfig, transaction: Transaction, -) : AbstractApplicationService( +) : AbstractApplicationService( transaction, logger ) { - override suspend fun internalExecute(command: Unit, principal: Principal): Nodeinfo2_0 { - return Nodeinfo2_0( - version = "2.0", - software = mapOf( - "name" to "hideout", "version" to (buildInfo?.version ?: "UNKNOWN") - ), - protocol = listOf("activitypub"), - NodeinfoUsage( - users = mapOf( - "total" to 0, "activeMonth" to 0, "activeHalfyear" to 0 - ), localPosts = 0 - ), - openRegistration = applicationConfig.private.not(), - metadata = mapOf() - ) + override suspend fun internalExecute(command: NodeinfoRequest, principal: Principal): Nodeinfo2_0 { + return when (command.version) { + "2.0", "2.1" -> Nodeinfo2_0( + version = command.version, + software = mapOf( + "name" to "hideout", "version" to (buildInfo?.version ?: "UNKNOWN") + ), + protocol = listOf("activitypub"), + NodeinfoUsage( + users = mapOf( + "total" to 0, "activeMonth" to 0, "activeHalfyear" to 0 + ), localPosts = 0 + ), + openRegistration = applicationConfig.private.not(), + metadata = mapOf() + ) + + else -> throw IllegalArgumentException("Invalid command version ${command.version}") + } } companion object { diff --git a/hideout/hideout-activitypub/src/main/kotlin/dev/usbharu/hideout/activitypub/application/nodeinfo/NodeinfoRequest.kt b/hideout/hideout-activitypub/src/main/kotlin/dev/usbharu/hideout/activitypub/application/nodeinfo/NodeinfoRequest.kt new file mode 100644 index 00000000..49e67893 --- /dev/null +++ b/hideout/hideout-activitypub/src/main/kotlin/dev/usbharu/hideout/activitypub/application/nodeinfo/NodeinfoRequest.kt @@ -0,0 +1,3 @@ +package dev.usbharu.hideout.activitypub.application.nodeinfo + +data class NodeinfoRequest(val version: String) \ No newline at end of file diff --git a/hideout/hideout-activitypub/src/main/kotlin/dev/usbharu/hideout/activitypub/interfaces/wellknown/NodeinfoController.kt b/hideout/hideout-activitypub/src/main/kotlin/dev/usbharu/hideout/activitypub/interfaces/wellknown/NodeinfoController.kt index 7b6f2c95..6f7bb780 100644 --- a/hideout/hideout-activitypub/src/main/kotlin/dev/usbharu/hideout/activitypub/interfaces/wellknown/NodeinfoController.kt +++ b/hideout/hideout-activitypub/src/main/kotlin/dev/usbharu/hideout/activitypub/interfaces/wellknown/NodeinfoController.kt @@ -2,6 +2,7 @@ package dev.usbharu.hideout.activitypub.interfaces.wellknown import dev.usbharu.hideout.activitypub.application.nodeinfo.Nodeinfo2_0 import dev.usbharu.hideout.activitypub.application.nodeinfo.NodeinfoApplicationService +import dev.usbharu.hideout.activitypub.application.nodeinfo.NodeinfoRequest import dev.usbharu.hideout.core.config.ApplicationConfig import dev.usbharu.hideout.core.domain.model.support.principal.Anonymous import org.springframework.web.bind.annotation.GetMapping @@ -27,11 +28,11 @@ class NodeinfoController( @GetMapping("/nodeinfo/2.0", produces = ["application/json"]) suspend fun nodeinfo2_0(): Nodeinfo2_0 { - return nodeinfoApplicationService.execute(Unit, Anonymous) + return nodeinfoApplicationService.execute(NodeinfoRequest("2.0"), Anonymous) } @GetMapping("/nodeinfo/2.1", produces = ["application/json"]) suspend fun nodeinfo2_1(): Nodeinfo2_0 { - return nodeinfoApplicationService.execute(Unit, Anonymous) + return nodeinfoApplicationService.execute(NodeinfoRequest("2.1"), Anonymous) } } \ No newline at end of file diff --git a/hideout/hideout-activitypub/src/test/kotlin/dev/usbharu/hideout/activitypub/application/webfinger/NodeinfoApplicationServiceTest.kt b/hideout/hideout-activitypub/src/test/kotlin/dev/usbharu/hideout/activitypub/application/webfinger/NodeinfoApplicationServiceTest.kt new file mode 100644 index 00000000..8888de4f --- /dev/null +++ b/hideout/hideout-activitypub/src/test/kotlin/dev/usbharu/hideout/activitypub/application/webfinger/NodeinfoApplicationServiceTest.kt @@ -0,0 +1,52 @@ +package dev.usbharu.hideout.activitypub.application.webfinger + + +import dev.usbharu.hideout.activitypub.application.nodeinfo.NodeinfoApplicationService +import dev.usbharu.hideout.activitypub.application.nodeinfo.NodeinfoRequest +import dev.usbharu.hideout.core.config.ApplicationConfig +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.extension.ExtendWith +import org.mockito.InjectMocks +import org.mockito.Spy +import org.mockito.junit.jupiter.MockitoExtension +import org.springframework.boot.info.BuildProperties +import util.TestTransaction +import java.net.URI +import java.util.* +import kotlin.test.assertEquals +import kotlin.test.assertFalse + +@ExtendWith(MockitoExtension::class) +class NodeinfoApplicationServiceTest { + @InjectMocks + lateinit var nodeinfoApplicationService: NodeinfoApplicationService + + @Spy + val buildInfo: BuildProperties = BuildProperties(Properties()) + + @Spy + val applicationConfig = ApplicationConfig(URI.create("https://example.com")) + + @Spy + val transaction = TestTransaction + + @Test + fun nodeinfo2_0() = runTest { + val execute = nodeinfoApplicationService.execute(NodeinfoRequest("2.0"), Anonymous) + + assertFalse(execute.openRegistration) + assertEquals("2.0", execute.version) + assertEquals("hideout", execute.software["name"]) + } + + @Test + fun nodeinfo2_1() = runTest { + val execute = nodeinfoApplicationService.execute(NodeinfoRequest("2.1"), Anonymous) + + assertFalse(execute.openRegistration) + assertEquals("2.1", execute.version) + assertEquals("hideout", execute.software["name"]) + } +} \ No newline at end of file