From 09f579435727fc42b08a122eed74bbf1cfc46dbb Mon Sep 17 00:00:00 2001 From: usbharu <64310155+usbharu@users.noreply.github.com> Date: Mon, 6 Nov 2023 16:56:06 +0900 Subject: [PATCH] =?UTF-8?q?test:=20MastodonMediaApiController=E3=81=AE?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../media/MastodonMediaApiControllerTest.kt | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 src/test/kotlin/dev/usbharu/hideout/mastodon/interfaces/api/media/MastodonMediaApiControllerTest.kt diff --git a/src/test/kotlin/dev/usbharu/hideout/mastodon/interfaces/api/media/MastodonMediaApiControllerTest.kt b/src/test/kotlin/dev/usbharu/hideout/mastodon/interfaces/api/media/MastodonMediaApiControllerTest.kt new file mode 100644 index 00000000..c9a56fee --- /dev/null +++ b/src/test/kotlin/dev/usbharu/hideout/mastodon/interfaces/api/media/MastodonMediaApiControllerTest.kt @@ -0,0 +1,93 @@ +package dev.usbharu.hideout.mastodon.interfaces.api.media + +import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper +import dev.usbharu.hideout.domain.mastodon.model.generated.MediaAttachment +import dev.usbharu.hideout.mastodon.service.media.MediaApiService +import kotlinx.coroutines.test.runTest +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.extension.ExtendWith +import org.mockito.InjectMocks +import org.mockito.Mock +import org.mockito.junit.jupiter.MockitoExtension +import org.mockito.kotlin.any +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.whenever +import org.springframework.mock.web.MockMultipartFile +import org.springframework.test.web.servlet.MockMvc +import org.springframework.test.web.servlet.multipart +import org.springframework.test.web.servlet.setup.MockMvcBuilders + +@ExtendWith(MockitoExtension::class) +class MastodonMediaApiControllerTest { + + @Mock + private lateinit var mediaApiService: MediaApiService + + @InjectMocks + private lateinit var mastodonMediaApiController: MastodonMediaApiController + + private lateinit var mockMvc: MockMvc + + @BeforeEach + fun setUp() { + mockMvc = MockMvcBuilders.standaloneSetup(mastodonMediaApiController).build() + } + + @Test + fun `apiV1MediaPost ファイルとサムネイルをアップロードできる`() = runTest { + + val mediaAttachment = MediaAttachment( + id = "1234", + type = MediaAttachment.Type.image, + url = "https://example.com", + previewUrl = "https://example.com", + remoteUrl = "https://example.com", + description = "pngImageStream", + blurhash = "", + textUrl = "https://example.com" + ) + whenever(mediaApiService.postMedia(any())).doReturn(mediaAttachment) + + val objectMapper = jacksonObjectMapper() + + mockMvc + .multipart("/api/v1/media") { + file(MockMultipartFile("file", "test.png", "image/png", "jpgImageStream".toByteArray())) + file(MockMultipartFile("thumbnail", "thumbnail.png", "image/png", "pngImageStream".toByteArray())) + param("description", "jpgImage") + param("focus", "") + } + .asyncDispatch() + .andExpect { status { isOk() } } + .andExpect { content { json(objectMapper.writeValueAsString(mediaAttachment)) } } + } + + @Test + fun `apiV1MediaPost ファイルだけをアップロードできる`() = runTest { + + val mediaAttachment = MediaAttachment( + id = "1234", + type = MediaAttachment.Type.image, + url = "https://example.com", + previewUrl = "https://example.com", + remoteUrl = "https://example.com", + description = "pngImageStream", + blurhash = "", + textUrl = "https://example.com" + ) + whenever(mediaApiService.postMedia(any())).doReturn(mediaAttachment) + + val objectMapper = jacksonObjectMapper() + + mockMvc + .multipart("/api/v1/media") { + file(MockMultipartFile("file", "test.png", "image/png", "jpgImageStream".toByteArray())) + param("description", "jpgImage") + param("focus", "") + } + .asyncDispatch() + .andExpect { status { isOk() } } + .andExpect { content { json(objectMapper.writeValueAsString(mediaAttachment)) } } + } +}