WebTestClient с многокомпонентной загрузкой файлов - PullRequest
0 голосов
/ 04 июля 2019

Я создаю микросервис с использованием Spring Boot + Webflux, и у меня есть конечная точка, которая принимает загрузку нескольких файлов. Который работает нормально, когда я тестирую с помощью curl и Postman

@PostMapping("/upload", consumes = [MULTIPART_FORM_DATA_VALUE])
fun uploadVideo(@RequestPart("video") filePart: Mono<FilePart>): Mono<UploadResult> {

    log.info("Video upload request received")

    return videoFilePart.flatMap { video ->
        val fileName = video.filename()

        log.info("Saving video to tmp directory: $fileName")

        val file = temporaryFilePath(fileName).toFile()

        video.transferTo(file)
          .thenReturn(UploadResult(true))
          .doOnError { error ->
              log.error("Failed to save video to temporary directory", error)
          }
          .onErrorMap {
              VideoUploadException("Failed to save video to temporary directory")
          }
    }
}

Я сейчас пытаюсь проверить с помощью WebTestClient:

@Test
fun shouldSuccessfullyUploadVideo() {
    client.post()
        .uri("/video/upload")
        .contentType(MULTIPART_FORM_DATA)
        .syncBody(generateBody())
        .exchange()
        .expectStatus()
        .is2xxSuccessful
}

private fun generateBody(): MultiValueMap<String, HttpEntity<*>> {
    val builder = MultipartBodyBuilder()
    builder.part("video", ClassPathResource("/videos/sunset.mp4"))
    return builder.build()
}

Конечная точка возвращает 500, потому что я не создал папку временного каталога для записи файлов. Однако тест проходит успешно, хотя я проверяю is2xxSuccessful, если я отлаживаю в утверждении, что is2xxSuccessful выполняет, я вижу, что он не работает из-за 500, однако я все еще получаю зеленый тест

Не уверен, что я здесь делаю не так. VideoUploadException, который я отображаю, просто расширяет ResponseStatusException

class VideoUploadException(reason: String) : ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, reason)
...