Merge pull request #240 from usbharu/feature/follow-activity

feat: Followアクティビティにidを追加
This commit is contained in:
usbharu 2024-01-16 15:04:40 +09:00 committed by GitHub
commit 27ac24f68a
4 changed files with 18 additions and 7 deletions

View File

@ -6,12 +6,12 @@ import dev.usbharu.hideout.activitypub.domain.model.objects.Object
open class Follow(
type: List<String> = emptyList(),
@JsonProperty("object") val apObject: String,
override val actor: String
override val actor: String,
val id: String? = null
) : Object(
type = add(type, "Follow")
),
HasActor {
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
@ -21,6 +21,7 @@ open class Follow(
if (apObject != other.apObject) return false
if (actor != other.actor) return false
if (id != other.id) return false
return true
}
@ -29,13 +30,15 @@ open class Follow(
var result = super.hashCode()
result = 31 * result + apObject.hashCode()
result = 31 * result + actor.hashCode()
result = 31 * result + (id?.hashCode() ?: 0)
return result
}
override fun toString(): String {
return "Follow(" +
"apObject='$apObject', " +
"actor='$actor'" +
"actor='$actor', " +
"id=$id" +
")" +
" ${super.toString()}"
}

View File

@ -2,6 +2,7 @@ package dev.usbharu.hideout.activitypub.service.activity.follow
import dev.usbharu.hideout.activitypub.domain.model.Follow
import dev.usbharu.hideout.activitypub.service.common.APRequestService
import dev.usbharu.hideout.application.config.ApplicationConfig
import dev.usbharu.hideout.core.service.follow.SendFollowDto
import org.springframework.stereotype.Service
@ -12,11 +13,13 @@ interface APSendFollowService {
@Service
class APSendFollowServiceImpl(
private val apRequestService: APRequestService,
private val applicationConfig: ApplicationConfig,
) : APSendFollowService {
override suspend fun sendFollow(sendFollowDto: SendFollowDto) {
val follow = Follow(
apObject = sendFollowDto.followTargetActorId.url,
actor = sendFollowDto.actorId.url
actor = sendFollowDto.actorId.url,
id = "${applicationConfig.url}/follow/${sendFollowDto.actorId.id}/${sendFollowDto.followTargetActorId.id}"
)
apRequestService.apPost(sendFollowDto.followTargetActorId.inbox, follow, sendFollowDto.actorId)

View File

@ -53,7 +53,8 @@ class RejectTest {
"https://misskey.usbharu.dev/06407419-5aeb-4e2d-8885-aa54b03decf0",
Follow(
apObject = "https://misskey.usbharu.dev/users/97ws8y3rj6",
actor = "https://test-hideout.usbharu.dev/users/test-user2"
actor = "https://test-hideout.usbharu.dev/users/test-user2",
id = "https://misskey.usbharu.dev/follows/9mxh6mawru/97ws8y3rj6"
)
).apply { context = listOf("https://www.w3.org/ns/activitystreams", "https://w3id.org/security/v1") }

View File

@ -2,6 +2,7 @@ package dev.usbharu.hideout.activitypub.service.activity.follow
import dev.usbharu.hideout.activitypub.domain.model.Follow
import dev.usbharu.hideout.activitypub.service.common.APRequestService
import dev.usbharu.hideout.application.config.ApplicationConfig
import dev.usbharu.hideout.core.service.follow.SendFollowDto
import kotlinx.coroutines.test.runTest
import org.junit.jupiter.api.Test
@ -10,12 +11,14 @@ import org.mockito.kotlin.mock
import org.mockito.kotlin.times
import org.mockito.kotlin.verify
import utils.UserBuilder
import java.net.URL
class APSendFollowServiceImplTest {
@Test
fun `sendFollow フォローするユーザーのinboxにFollowオブジェクトが送られる`() = runTest {
val apRequestService = mock<APRequestService>()
val apSendFollowServiceImpl = APSendFollowServiceImpl(apRequestService)
val applicationConfig = ApplicationConfig(URL("https://example.com"))
val apSendFollowServiceImpl = APSendFollowServiceImpl(apRequestService, applicationConfig)
val sendFollowDto = SendFollowDto(
UserBuilder.localUserOf(),
@ -25,7 +28,8 @@ class APSendFollowServiceImplTest {
val value = Follow(
apObject = sendFollowDto.followTargetActorId.url,
actor = sendFollowDto.actorId.url
actor = sendFollowDto.actorId.url,
id = "${applicationConfig.url}/follow/${sendFollowDto.actorId.id}/${sendFollowDto.followTargetActorId.id}"
)
verify(apRequestService, times(1)).apPost(
eq(sendFollowDto.followTargetActorId.inbox),