Я создаю микросервис с использованием 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)