test(media): 覆盖转码入队与重转幂等

This commit is contained in:
Zhou Weidong committed 2026-10-22 14:01:26 +08:00
1 parent cd51aabe7e
commit 7e6075a2e9
5 files changed
+435

No files matched your search

@@ -0,0 +1,63 @@
// Author: fruit.com.cn
package com.fruitshorts.admin.controller;
import com.fruitshorts.admin.support.ControllerContractSupport;
import com.fruitshorts.common.exception.ErrorCode;
import com.fruitshorts.common.exception.ServiceException;
import com.fruitshorts.media.service.MediaService;
import com.fruitshorts.media.service.MediaTranscodeProfileService;
import com.fruitshorts.media.service.TranscodeService;
import com.fruitshorts.media.vo.TranscodeTriggerRespVO;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.test.web.servlet.MockMvc;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
/**
* 后台手动触发转码的最小契约。
*/
class MediaTranscodeTriggerContractTest {
private MediaService mediaService;
private MockMvc mockMvc;
@BeforeEach
void setUp() {
mediaService = mock(MediaService.class);
MediaController controller = new MediaController(
mediaService, mock(MediaTranscodeProfileService.class));
mockMvc = ControllerContractSupport.mockMvcOf(controller);
}
@Test
void should_return_task_id_and_status_when_triggering_transcode() throws Exception {
given(mediaService.triggerTranscode(88L))
.willReturn(new TranscodeTriggerRespVO(100L, TranscodeService.STATUS_QUEUED));
mockMvc.perform(post("/admin/media/88/transcode"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.code").value(0))
.andExpect(jsonPath("$.data.taskId").value("100"))
.andExpect(jsonPath("$.data.status").value(TranscodeService.STATUS_QUEUED));
verify(mediaService).triggerTranscode(88L);
}
@Test
void should_keep_not_found_semantics_when_media_does_not_exist() throws Exception {
given(mediaService.triggerTranscode(404L))
.willThrow(new ServiceException(ErrorCode.DATA_NOT_FOUND, "媒资不存在"));
mockMvc.perform(post("/admin/media/404/transcode"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.code").value(ErrorCode.DATA_NOT_FOUND.getCode()))
.andExpect(jsonPath("$.message").value("媒资不存在"));
}
}