From f760bace4b37214c67989d2ce9a3d7cce2220d4d Mon Sep 17 00:00:00 2001 From: usbharu <64310155+usbharu@users.noreply.github.com> Date: Sat, 18 May 2024 14:08:36 +0900 Subject: [PATCH] =?UTF-8?q?test:=20=E3=83=A2=E3=83=83=E3=82=AF=E3=81=AE?= =?UTF-8?q?=E4=BD=9C=E6=88=90=E3=82=92=E3=82=A2=E3=83=8E=E3=83=86=E3=83=BC?= =?UTF-8?q?=E3=82=B7=E3=83=A7=E3=83=B3=E3=83=99=E3=83=BC=E3=82=B9=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/service/user/ActorServiceTest.kt | 145 ++++++++---------- 1 file changed, 68 insertions(+), 77 deletions(-) diff --git a/hideout-core/src/test/kotlin/dev/usbharu/hideout/core/service/user/ActorServiceTest.kt b/hideout-core/src/test/kotlin/dev/usbharu/hideout/core/service/user/ActorServiceTest.kt index 834c3650..6a574dc6 100644 --- a/hideout-core/src/test/kotlin/dev/usbharu/hideout/core/service/user/ActorServiceTest.kt +++ b/hideout-core/src/test/kotlin/dev/usbharu/hideout/core/service/user/ActorServiceTest.kt @@ -18,18 +18,31 @@ package dev.usbharu.hideout.core.service.user +import dev.usbharu.hideout.activitypub.service.activity.delete.APSendDeleteService import dev.usbharu.hideout.application.config.ApplicationConfig import dev.usbharu.hideout.application.config.CharacterLimit import dev.usbharu.hideout.core.domain.model.actor.Actor import dev.usbharu.hideout.core.domain.model.actor.ActorRepository +import dev.usbharu.hideout.core.domain.model.deletedActor.DeletedActorRepository import dev.usbharu.hideout.core.domain.model.instance.Instance +import dev.usbharu.hideout.core.domain.model.post.PostRepository +import dev.usbharu.hideout.core.domain.model.reaction.ReactionRepository +import dev.usbharu.hideout.core.domain.model.relationship.RelationshipRepository +import dev.usbharu.hideout.core.domain.model.userdetails.UserDetailRepository import dev.usbharu.hideout.core.service.instance.InstanceService +import dev.usbharu.hideout.core.service.post.PostService +import dev.usbharu.owl.producer.api.OwlProducer import jakarta.validation.Validation import kotlinx.coroutines.ExperimentalCoroutinesApi 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.ArgumentMatchers.anyString +import org.mockito.InjectMocks +import org.mockito.Mock +import org.mockito.Spy +import org.mockito.junit.jupiter.MockitoExtension import org.mockito.kotlin.* import utils.TestApplicationConfig.testApplicationConfig import java.net.URL @@ -38,40 +51,65 @@ import java.time.Instant import kotlin.test.assertEquals import kotlin.test.assertNull +@ExtendWith(MockitoExtension::class) class ActorServiceTest { - val actorBuilder = Actor.UserBuilder( + + @Mock + private lateinit var actorRepository: ActorRepository + + @Mock + private lateinit var userAuthService: UserAuthService + + @Spy + private val actorBuilder = Actor.UserBuilder( CharacterLimit(), ApplicationConfig(URL("https://example.com")), Validation.buildDefaultValidatorFactory().validator ) + @Spy + private val applicationConfig: ApplicationConfig = testApplicationConfig.copy(private = false) + + @Mock + private lateinit var instanceService: InstanceService + + @Mock + private lateinit var userDetailRepository: UserDetailRepository + + @Mock + private lateinit var deletedActorRepository: DeletedActorRepository + + @Mock + private lateinit var reactionRepository: ReactionRepository + + @Mock + private lateinit var relationshipRepository: RelationshipRepository + + @Mock + private lateinit var postService: PostService + + @Mock + private lateinit var apSendDeleteService: APSendDeleteService + + @Mock + private lateinit var postRepository: PostRepository + + @Mock + private lateinit var owlProducer: OwlProducer + + @InjectMocks + private lateinit var userService: UserServiceImpl + @Test fun `createLocalUser ローカルユーザーを作成できる`() = runTest { - val actorRepository = mock { - onBlocking { nextId() } doReturn 110001L - } val generateKeyPair = KeyPairGenerator.getInstance("RSA").generateKeyPair() - val userAuthService = mock { - onBlocking { hash(anyString()) } doReturn "hashedPassword" - onBlocking { generateKeyPair() } doReturn generateKeyPair - } - val userService = - UserServiceImpl( - actorRepository = actorRepository, - userAuthService = userAuthService, - actorBuilder = actorBuilder, - applicationConfig = testApplicationConfig.copy(private = false), - instanceService = mock(), - userDetailRepository = mock(), - deletedActorRepository = mock(), - reactionRepository = mock(), - relationshipRepository = mock(), - postService = mock(), - apSendDeleteService = mock(), - postRepository = mock(), - owlProducer = mock() - ) + whenever(actorRepository.nextId()).doReturn(110001L) + whenever(userAuthService.hash(anyString())).doReturn("hashedPassword") + whenever(userAuthService.generateKeyPair()).doReturn(generateKeyPair) + + + userService.createLocalUser(UserCreateDto("test", "testUser", "XXXXXXXXXXXXX", "test")) verify(actorRepository, times(1)).save(any()) argumentCaptor { @@ -91,31 +129,7 @@ class ActorServiceTest { @Test fun `createLocalUser applicationconfig privateがtrueのときアカウントを作成できない`() = runTest { - - val actorRepository = mock { - onBlocking { nextId() } doReturn 110001L - } - val generateKeyPair = KeyPairGenerator.getInstance("RSA").generateKeyPair() - val userAuthService = mock { - onBlocking { hash(anyString()) } doReturn "hashedPassword" - onBlocking { generateKeyPair() } doReturn generateKeyPair - } - val userService = - UserServiceImpl( - actorRepository = actorRepository, - userAuthService = userAuthService, - actorBuilder = actorBuilder, - applicationConfig = testApplicationConfig.copy(private = true), - instanceService = mock(), - userDetailRepository = mock(), - deletedActorRepository = mock(), - reactionRepository = mock(), - relationshipRepository = mock(), - postService = mock(), - apSendDeleteService = mock(), - postRepository = mock(), - owlProducer = mock() - ) + whenever(applicationConfig.private).thenReturn(true) assertThrows { userService.createLocalUser(UserCreateDto("test", "testUser", "XXXXXXXXXXXXX", "test")) @@ -126,17 +140,9 @@ class ActorServiceTest { @Test fun `createRemoteUser リモートユーザーを作成できる`() = runTest { - val actorRepository = mock { - onBlocking { nextId() } doReturn 113345L - } - - val instanceService = mock { - onBlocking { - fetchInstance( - eq("https://remote.example.com"), - isNull() - ) - } doReturn Instance( + whenever(actorRepository.nextId()).doReturn(113345L) + whenever(instanceService.fetchInstance(eq("https://remote.example.com"), isNull())).doReturn( + Instance( 12345L, "", "", @@ -150,23 +156,8 @@ class ActorServiceTest { "", Instant.now() ) - } - val userService = - UserServiceImpl( - actorRepository = actorRepository, - userAuthService = mock(), - actorBuilder = actorBuilder, - applicationConfig = testApplicationConfig, - instanceService = instanceService, - userDetailRepository = mock(), - deletedActorRepository = mock(), - reactionRepository = mock(), - relationshipRepository = mock(), - postService = mock(), - apSendDeleteService = mock(), - postRepository = mock(), - owlProducer = mock() - ) + ) + val user = RemoteUserCreateDto( name = "test", domain = "remote.example.com",