修复后端BUG
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
package com.nanri.aiimage.modules.imagevideo.service;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.nanri.aiimage.config.ImageVideoProperties;
|
||||
import com.nanri.aiimage.modules.file.service.oss.OssStorageService;
|
||||
import com.nanri.aiimage.modules.imagevideo.mapper.ImageVideoAsyncTaskMapper;
|
||||
import com.nanri.aiimage.modules.imagevideo.model.entity.ImageVideoAsyncTaskEntity;
|
||||
import com.nanri.aiimage.modules.imagevideo.model.vo.DouyinCopyVo;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.core.task.TaskExecutor;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
class ImageVideoAsyncTaskServiceTest {
|
||||
|
||||
@Test
|
||||
void parsesNestedDouyinCopyOutputIntoFrontendTextFields() {
|
||||
ImageVideoCozeService cozeService = new ImageVideoCozeService(
|
||||
new ImageVideoProperties(),
|
||||
mock(ImageVideoSecretService.class),
|
||||
mock(ImageVideoWorkflowConfigService.class),
|
||||
mock(OssStorageService.class),
|
||||
new ObjectMapper());
|
||||
Map<String, Object> cozeResult = Map.of("data", List.of(Map.of(
|
||||
"execute_status", "Success",
|
||||
"output", "{\"node_status\":\"{}\",\"Output\":\"{\\\"data\\\":{\\\"source\\\":\\\"这条裙裤绝了,遮肉显腿长,快拍!\\\",\\\"video_url\\\":\\\"https://example.com/video.mp4\\\"}}\"}"
|
||||
)));
|
||||
|
||||
DouyinCopyVo result = cozeService.parseDouyinCopyResult(cozeResult);
|
||||
|
||||
assertEquals("这条裙裤绝了,遮肉显腿长,快拍!", result.getRecognizedContent());
|
||||
assertEquals("这条裙裤绝了,遮肉显腿长,快拍!", result.getScriptDraft());
|
||||
}
|
||||
|
||||
@Test
|
||||
void pollWaitingTaskCompletesWhenCozeStatusIsInsideDataArray() {
|
||||
ImageVideoAsyncTaskMapper taskMapper = mock(ImageVideoAsyncTaskMapper.class);
|
||||
ImageVideoCozeService cozeService = mock(ImageVideoCozeService.class);
|
||||
ImageVideoWorkflowConfigService workflowConfigService = mock(ImageVideoWorkflowConfigService.class);
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
TaskExecutor directExecutor = Runnable::run;
|
||||
ImageVideoAsyncTaskService service = new ImageVideoAsyncTaskService(
|
||||
taskMapper, cozeService, workflowConfigService, objectMapper, directExecutor);
|
||||
|
||||
ImageVideoAsyncTaskEntity task = waitingDouyinTask();
|
||||
Map<String, Object> cozeResult = Map.of("data", List.of(Map.of(
|
||||
"execute_status", "Success",
|
||||
"output", "{\"Output\":\"{\\\"data\\\":{\\\"source\\\":\\\"这条裙裤绝了,遮肉显腿长,快拍!\\\"}}\"}"
|
||||
)));
|
||||
DouyinCopyVo copyResult = new DouyinCopyVo();
|
||||
copyResult.setRecognizedContent("这条裙裤绝了,遮肉显腿长,快拍!");
|
||||
copyResult.setScriptDraft("这条裙裤绝了,遮肉显腿长,快拍!");
|
||||
|
||||
when(taskMapper.selectList(any())).thenReturn(List.of(task));
|
||||
when(taskMapper.claimWaiting(79L)).thenReturn(1);
|
||||
when(taskMapper.selectById(79L)).thenReturn(task);
|
||||
when(workflowConfigService.douyinCopyWorkflowId()).thenReturn("7652941112982798388");
|
||||
when(cozeService.getWorkflowResult(1L, "7652941112982798388", "7662364426301964329"))
|
||||
.thenReturn(cozeResult);
|
||||
when(cozeService.parseDouyinCopyResult(cozeResult)).thenReturn(copyResult);
|
||||
|
||||
service.pollWaitingTasks();
|
||||
|
||||
assertEquals("SUCCESS", task.getStatus());
|
||||
assertEquals("SUCCESS", task.getCozeStatus());
|
||||
assertNotNull(task.getCompletedAt());
|
||||
assertTrue(task.getResultJson().contains("这条裙裤绝了,遮肉显腿长,快拍!"));
|
||||
verify(cozeService).parseDouyinCopyResult(cozeResult);
|
||||
verify(taskMapper).updateById(task);
|
||||
}
|
||||
|
||||
@Test
|
||||
void pollWaitingTaskRemainsWaitingWhenCozeStatusIsRunningInsideDataArray() {
|
||||
ImageVideoAsyncTaskMapper taskMapper = mock(ImageVideoAsyncTaskMapper.class);
|
||||
ImageVideoCozeService cozeService = mock(ImageVideoCozeService.class);
|
||||
ImageVideoWorkflowConfigService workflowConfigService = mock(ImageVideoWorkflowConfigService.class);
|
||||
ImageVideoAsyncTaskService service = new ImageVideoAsyncTaskService(
|
||||
taskMapper, cozeService, workflowConfigService, new ObjectMapper(), Runnable::run);
|
||||
|
||||
ImageVideoAsyncTaskEntity task = waitingDouyinTask();
|
||||
Map<String, Object> cozeResult = Map.of("data", List.of(Map.of("execute_status", "Running")));
|
||||
|
||||
when(taskMapper.selectList(any())).thenReturn(List.of(task));
|
||||
when(taskMapper.claimWaiting(79L)).thenReturn(1);
|
||||
when(taskMapper.selectById(79L)).thenReturn(task);
|
||||
when(workflowConfigService.douyinCopyWorkflowId()).thenReturn("7652941112982798388");
|
||||
when(cozeService.getWorkflowResult(1L, "7652941112982798388", "7662364426301964329"))
|
||||
.thenReturn(cozeResult);
|
||||
|
||||
service.pollWaitingTasks();
|
||||
|
||||
assertEquals("WAITING", task.getStatus());
|
||||
assertEquals("RUNNING", task.getCozeStatus());
|
||||
verify(cozeService, never()).parseDouyinCopyResult(any());
|
||||
verify(taskMapper).updateById(task);
|
||||
}
|
||||
|
||||
private ImageVideoAsyncTaskEntity waitingDouyinTask() {
|
||||
ImageVideoAsyncTaskEntity task = new ImageVideoAsyncTaskEntity();
|
||||
task.setId(79L);
|
||||
task.setUserId(1L);
|
||||
task.setTaskType("DOUYIN_COPY");
|
||||
task.setStatus("WAITING");
|
||||
task.setCozeExecuteId("7662364426301964329");
|
||||
task.setSubmittedAt(LocalDateTime.now());
|
||||
task.setCreatedAt(LocalDateTime.now());
|
||||
task.setUpdatedAt(LocalDateTime.now());
|
||||
return task;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user