mirror of https://github.com/usbharu/Hideout.git
test: postのテストを追加
This commit is contained in:
parent
5e7b538d1d
commit
5de217fecc
|
@ -54,6 +54,7 @@ class Post(
|
||||||
|
|
||||||
var visibility = visibility
|
var visibility = visibility
|
||||||
set(value) {
|
set(value) {
|
||||||
|
require(visibility != Visibility.DIRECT)
|
||||||
require(value != Visibility.DIRECT)
|
require(value != Visibility.DIRECT)
|
||||||
require(field.ordinal >= value.ordinal)
|
require(field.ordinal >= value.ordinal)
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ import kotlin.test.assertNull
|
||||||
class ActorsTest {
|
class ActorsTest {
|
||||||
@Test
|
@Test
|
||||||
fun suspendがtrueのときactorSuspendイベントが発生する() {
|
fun suspendがtrueのときactorSuspendイベントが発生する() {
|
||||||
val actor = TestActor2Factory.create(publicKey = ActorPublicKey(""))
|
val actor = TestActorFactory.create(publicKey = ActorPublicKey(""))
|
||||||
|
|
||||||
actor.suspend = true
|
actor.suspend = true
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ class ActorsTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun suspendがfalseになったときactorUnsuspendイベントが発生する() {
|
fun suspendがfalseになったときactorUnsuspendイベントが発生する() {
|
||||||
val actor = TestActor2Factory.create(publicKey = ActorPublicKey(""), suspend = true)
|
val actor = TestActorFactory.create(publicKey = ActorPublicKey(""), suspend = true)
|
||||||
|
|
||||||
actor.suspend = false
|
actor.suspend = false
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ class ActorsTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun alsoKnownAsに自分自身が含まれない場合更新される() {
|
fun alsoKnownAsに自分自身が含まれない場合更新される() {
|
||||||
val actor = TestActor2Factory.create(publicKey = ActorPublicKey(""))
|
val actor = TestActorFactory.create(publicKey = ActorPublicKey(""))
|
||||||
|
|
||||||
val actorIds = setOf(ActorId(100), ActorId(200))
|
val actorIds = setOf(ActorId(100), ActorId(200))
|
||||||
actor.alsoKnownAs = actorIds
|
actor.alsoKnownAs = actorIds
|
||||||
|
@ -40,7 +40,7 @@ class ActorsTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun moveToに自分自身が設定された場合moveイベントが発生し更新される() {
|
fun moveToに自分自身が設定された場合moveイベントが発生し更新される() {
|
||||||
val actor = TestActor2Factory.create(publicKey = ActorPublicKey(""))
|
val actor = TestActorFactory.create(publicKey = ActorPublicKey(""))
|
||||||
|
|
||||||
|
|
||||||
actor.moveTo = ActorId(100)
|
actor.moveTo = ActorId(100)
|
||||||
|
@ -50,7 +50,7 @@ class ActorsTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun alsoKnownAsに自分自身が含まれてはいけない() {
|
fun alsoKnownAsに自分自身が含まれてはいけない() {
|
||||||
val actor = TestActor2Factory.create(publicKey = ActorPublicKey(""))
|
val actor = TestActorFactory.create(publicKey = ActorPublicKey(""))
|
||||||
|
|
||||||
assertThrows<IllegalArgumentException> {
|
assertThrows<IllegalArgumentException> {
|
||||||
actor.alsoKnownAs = setOf(actor.id)
|
actor.alsoKnownAs = setOf(actor.id)
|
||||||
|
@ -59,7 +59,7 @@ class ActorsTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun moveToに自分自身が設定されてはいけない() {
|
fun moveToに自分自身が設定されてはいけない() {
|
||||||
val actor = TestActor2Factory.create(publicKey = ActorPublicKey(""))
|
val actor = TestActorFactory.create(publicKey = ActorPublicKey(""))
|
||||||
|
|
||||||
assertThrows<IllegalArgumentException> {
|
assertThrows<IllegalArgumentException> {
|
||||||
actor.moveTo = actor.id
|
actor.moveTo = actor.id
|
||||||
|
@ -68,7 +68,7 @@ class ActorsTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun descriptionが更新されたときupdateイベントが発生する() {
|
fun descriptionが更新されたときupdateイベントが発生する() {
|
||||||
val actor = TestActor2Factory.create(publicKey = ActorPublicKey(""))
|
val actor = TestActorFactory.create(publicKey = ActorPublicKey(""))
|
||||||
|
|
||||||
actor.description = ActorDescription("hoge fuga")
|
actor.description = ActorDescription("hoge fuga")
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ class ActorsTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun screenNameが更新されたときupdateイベントが発生する() {
|
fun screenNameが更新されたときupdateイベントが発生する() {
|
||||||
val actor = TestActor2Factory.create(publicKey = ActorPublicKey(""))
|
val actor = TestActorFactory.create(publicKey = ActorPublicKey(""))
|
||||||
|
|
||||||
actor.screenName = ActorScreenName("fuga hoge")
|
actor.screenName = ActorScreenName("fuga hoge")
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ class ActorsTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun deleteが実行されたときすでにdeletedがtrueなら何もしない() {
|
fun deleteが実行されたときすでにdeletedがtrueなら何もしない() {
|
||||||
val actor = TestActor2Factory.create(publicKey = ActorPublicKey(""), deleted = true)
|
val actor = TestActorFactory.create(publicKey = ActorPublicKey(""), deleted = true)
|
||||||
|
|
||||||
actor.delete()
|
actor.delete()
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ class ActorsTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun deleteが実行されたときdeletedがfalseならdeleteイベントが発生する() {
|
fun deleteが実行されたときdeletedがfalseならdeleteイベントが発生する() {
|
||||||
val actor = TestActor2Factory.create(publicKey = ActorPublicKey(""))
|
val actor = TestActorFactory.create(publicKey = ActorPublicKey(""))
|
||||||
|
|
||||||
actor.delete()
|
actor.delete()
|
||||||
|
|
||||||
|
@ -111,7 +111,7 @@ class ActorsTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun restoreが実行されたときcheckUpdateイベントが発生する() {
|
fun restoreが実行されたときcheckUpdateイベントが発生する() {
|
||||||
val actor = TestActor2Factory.create(publicKey = ActorPublicKey(""), deleted = true)
|
val actor = TestActorFactory.create(publicKey = ActorPublicKey(""), deleted = true)
|
||||||
|
|
||||||
actor.restore()
|
actor.restore()
|
||||||
|
|
||||||
|
@ -121,7 +121,7 @@ class ActorsTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun checkUpdateが実行されたときcheckUpdateイベントがh() {
|
fun checkUpdateが実行されたときcheckUpdateイベントがh() {
|
||||||
val actor = TestActor2Factory.create(publicKey = ActorPublicKey(""))
|
val actor = TestActorFactory.create(publicKey = ActorPublicKey(""))
|
||||||
|
|
||||||
actor.checkUpdate()
|
actor.checkUpdate()
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ import kotlinx.coroutines.runBlocking
|
||||||
import java.net.URI
|
import java.net.URI
|
||||||
import java.time.Instant
|
import java.time.Instant
|
||||||
|
|
||||||
object TestActor2Factory {
|
object TestActorFactory {
|
||||||
private val idGenerateService = TwitterSnowflakeIdGenerateService
|
private val idGenerateService = TwitterSnowflakeIdGenerateService
|
||||||
|
|
||||||
fun create(
|
fun create(
|
|
@ -1,10 +1,145 @@
|
||||||
package dev.usbharu.hideout.core.domain.model.post
|
package dev.usbharu.hideout.core.domain.model.post
|
||||||
|
|
||||||
|
import dev.usbharu.hideout.core.domain.event.post.PostEvent
|
||||||
|
import dev.usbharu.hideout.core.domain.model.actor.ActorId
|
||||||
import org.junit.jupiter.api.Test
|
import org.junit.jupiter.api.Test
|
||||||
|
import org.junit.jupiter.api.assertDoesNotThrow
|
||||||
|
import org.junit.jupiter.api.assertThrows
|
||||||
|
import utils.AssertDomainEvent.assertContainsEvent
|
||||||
|
import utils.AssertDomainEvent.assertEmpty
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
class PostTest {
|
class PostTest {
|
||||||
@Test
|
@Test
|
||||||
fun deletedがtrueのときghostのidが返される() {
|
fun deletedがtrueのときghostのidが返される() {
|
||||||
|
val post = TestPostFactory.create(deleted = true)
|
||||||
|
|
||||||
|
assertEquals(ActorId.ghost, post.actorId)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun deletedがfalseの時actorのIDが返される() {
|
||||||
|
val post = TestPostFactory.create(deleted = false, actorId = 100)
|
||||||
|
|
||||||
|
assertEquals(ActorId(100), post.actorId)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun visibilityがDIRECTのとき変更できない() {
|
||||||
|
val post = TestPostFactory.create(visibility = Visibility.DIRECT)
|
||||||
|
|
||||||
|
assertThrows<IllegalArgumentException> {
|
||||||
|
post.visibility = Visibility.PUBLIC
|
||||||
|
}
|
||||||
|
assertThrows<IllegalArgumentException> {
|
||||||
|
post.visibility = Visibility.UNLISTED
|
||||||
|
}
|
||||||
|
assertThrows<IllegalArgumentException> {
|
||||||
|
post.visibility = Visibility.FOLLOWERS
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun visibilityを小さくすることはできないPUBLIC() {
|
||||||
|
val post = TestPostFactory.create(visibility = Visibility.PUBLIC)
|
||||||
|
|
||||||
|
assertThrows<IllegalArgumentException> {
|
||||||
|
post.visibility = Visibility.DIRECT
|
||||||
|
}
|
||||||
|
assertThrows<IllegalArgumentException> {
|
||||||
|
post.visibility = Visibility.UNLISTED
|
||||||
|
}
|
||||||
|
assertThrows<IllegalArgumentException> {
|
||||||
|
post.visibility = Visibility.FOLLOWERS
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun visibilityを小さくすることはできないUNLISTED() {
|
||||||
|
val post = TestPostFactory.create(visibility = Visibility.UNLISTED)
|
||||||
|
|
||||||
|
assertThrows<IllegalArgumentException> {
|
||||||
|
post.visibility = Visibility.DIRECT
|
||||||
|
}
|
||||||
|
assertThrows<IllegalArgumentException> {
|
||||||
|
post.visibility = Visibility.FOLLOWERS
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun visibilityを小さくすることはできないFOLLOWERS() {
|
||||||
|
val post = TestPostFactory.create(visibility = Visibility.FOLLOWERS)
|
||||||
|
|
||||||
|
assertThrows<IllegalArgumentException> {
|
||||||
|
post.visibility = Visibility.DIRECT
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun visibilityをDIRECTにあとからすることはできない() {
|
||||||
|
val post = TestPostFactory.create(visibility = Visibility.DIRECT)
|
||||||
|
|
||||||
|
assertThrows<IllegalArgumentException> {
|
||||||
|
post.visibility = Visibility.DIRECT
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun visibilityを大きくすることができるFOLLOWERS() {
|
||||||
|
val post = TestPostFactory.create(visibility = Visibility.FOLLOWERS)
|
||||||
|
|
||||||
|
assertDoesNotThrow {
|
||||||
|
post.visibility = Visibility.UNLISTED
|
||||||
|
}
|
||||||
|
|
||||||
|
val post2 = TestPostFactory.create(visibility = Visibility.FOLLOWERS)
|
||||||
|
|
||||||
|
assertDoesNotThrow {
|
||||||
|
post2.visibility = Visibility.PUBLIC
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun visibilityを大きくすることができるUNLISTED() {
|
||||||
|
val post = TestPostFactory.create(visibility = Visibility.UNLISTED)
|
||||||
|
|
||||||
|
assertDoesNotThrow {
|
||||||
|
post.visibility = Visibility.PUBLIC
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun deletedがtrueのときvisibilityを変更できない() {
|
||||||
|
val post = TestPostFactory.create(visibility = Visibility.UNLISTED, deleted = true)
|
||||||
|
|
||||||
|
assertThrows<IllegalArgumentException> {
|
||||||
|
post.visibility = Visibility.PUBLIC
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun visibilityが変更されない限りドメインイベントは発生しない() {
|
||||||
|
val post = TestPostFactory.create(visibility = Visibility.UNLISTED)
|
||||||
|
|
||||||
|
post.visibility = Visibility.UNLISTED
|
||||||
|
assertEmpty(post)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun visibilityが変更されるとupdateイベントが発生する() {
|
||||||
|
val post = TestPostFactory.create(visibility = Visibility.UNLISTED)
|
||||||
|
post.visibility = Visibility.PUBLIC
|
||||||
|
|
||||||
|
assertContainsEvent(post, PostEvent.update.eventName)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun deletedがtrueのときvisibleActorsを変更できない() {
|
||||||
|
val post = TestPostFactory.create(deleted = true)
|
||||||
|
|
||||||
|
assertThrows<IllegalArgumentException> {
|
||||||
|
post.visibleActors = listOf(ActorId(100))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
package dev.usbharu.hideout.core.domain.model.post
|
||||||
|
|
||||||
|
import dev.usbharu.hideout.core.domain.model.actor.ActorId
|
||||||
|
import dev.usbharu.hideout.core.domain.model.media.MediaId
|
||||||
|
import dev.usbharu.hideout.core.infrastructure.other.TwitterSnowflakeIdGenerateService
|
||||||
|
import kotlinx.coroutines.runBlocking
|
||||||
|
import java.net.URI
|
||||||
|
import java.time.Instant
|
||||||
|
|
||||||
|
object TestPostFactory {
|
||||||
|
private val idGenerateService = TwitterSnowflakeIdGenerateService
|
||||||
|
|
||||||
|
fun create(
|
||||||
|
id: Long = generateId(),
|
||||||
|
actorId: Long = 1,
|
||||||
|
overview: String? = null,
|
||||||
|
content: String = "This is test content",
|
||||||
|
createdAt: Instant = Instant.now(),
|
||||||
|
visibility: Visibility = Visibility.PUBLIC,
|
||||||
|
url: URI = URI.create("https://example.com/$actorId/posts/$id"),
|
||||||
|
repostId: Long? = null,
|
||||||
|
replyId: Long? = null,
|
||||||
|
sensitive: Boolean = false,
|
||||||
|
apId: URI = URI.create("https://example.com/$actorId/posts/$id"),
|
||||||
|
deleted: Boolean = false,
|
||||||
|
mediaIds: List<Long> = emptyList(),
|
||||||
|
visibleActors: List<Long> = emptyList(),
|
||||||
|
hide: Boolean = false,
|
||||||
|
moveTo: Long? = null,
|
||||||
|
): Post {
|
||||||
|
return Post(
|
||||||
|
PostId(id),
|
||||||
|
ActorId(actorId),
|
||||||
|
overview = overview?.let { PostOverview(it) },
|
||||||
|
content = PostContent(content, content, emptyList()),
|
||||||
|
createdAt = createdAt,
|
||||||
|
visibility = visibility,
|
||||||
|
url = url,
|
||||||
|
repostId = repostId?.let { PostId(it) },
|
||||||
|
replyId?.let { PostId(it) },
|
||||||
|
sensitive = sensitive,
|
||||||
|
apId = apId,
|
||||||
|
deleted = deleted,
|
||||||
|
mediaIds.map { MediaId(it) },
|
||||||
|
visibleActors.map { ActorId(it) },
|
||||||
|
hide = hide,
|
||||||
|
moveTo?.let { PostId(it) }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun generateId(): Long = runBlocking {
|
||||||
|
idGenerateService.generateId()
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,7 +2,7 @@ package dev.usbharu.hideout.core.domain.service.actor
|
||||||
|
|
||||||
import dev.usbharu.hideout.core.config.ApplicationConfig
|
import dev.usbharu.hideout.core.config.ApplicationConfig
|
||||||
import dev.usbharu.hideout.core.domain.model.actor.ActorPublicKey
|
import dev.usbharu.hideout.core.domain.model.actor.ActorPublicKey
|
||||||
import dev.usbharu.hideout.core.domain.model.actor.TestActor2Factory
|
import dev.usbharu.hideout.core.domain.model.actor.TestActorFactory
|
||||||
import org.junit.jupiter.api.Test
|
import org.junit.jupiter.api.Test
|
||||||
import java.net.URI
|
import java.net.URI
|
||||||
import kotlin.test.assertFalse
|
import kotlin.test.assertFalse
|
||||||
|
@ -11,7 +11,7 @@ import kotlin.test.assertTrue
|
||||||
class RemoteActorCheckDomainServiceTest {
|
class RemoteActorCheckDomainServiceTest {
|
||||||
@Test
|
@Test
|
||||||
fun リモートのドメインならtrueを返す() {
|
fun リモートのドメインならtrueを返す() {
|
||||||
val actor = TestActor2Factory.create(publicKey = ActorPublicKey(""))
|
val actor = TestActorFactory.create(publicKey = ActorPublicKey(""))
|
||||||
|
|
||||||
val remoteActor = RemoteActorCheckDomainService(
|
val remoteActor = RemoteActorCheckDomainService(
|
||||||
ApplicationConfig(
|
ApplicationConfig(
|
||||||
|
@ -26,7 +26,7 @@ class RemoteActorCheckDomainServiceTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun ローカルのActorならfalseを返す() {
|
fun ローカルのActorならfalseを返す() {
|
||||||
val actor = TestActor2Factory.create(domain = "local.example.com", publicKey = ActorPublicKey(""))
|
val actor = TestActorFactory.create(domain = "local.example.com", publicKey = ActorPublicKey(""))
|
||||||
|
|
||||||
val localActor = RemoteActorCheckDomainService(
|
val localActor = RemoteActorCheckDomainService(
|
||||||
ApplicationConfig(
|
ApplicationConfig(
|
||||||
|
|
Loading…
Reference in New Issue