feat: parse uploaded review mind maps

This commit is contained in:
2026-06-20 10:33:14 +08:00
parent f170e85297
commit 5f3f35c53b
9 changed files with 570 additions and 0 deletions
@@ -12,6 +12,8 @@ import com.guo.learningprogresstracker.entity.StudyReportsEntity;
import com.guo.learningprogresstracker.entity.StudySessionsEntity;
import com.guo.learningprogresstracker.entity.TaskEntity;
import com.guo.learningprogresstracker.enums.ReviewApplicationStatusEnum;
import com.guo.learningprogresstracker.enums.ReviewMindMapFileFormatEnum;
import com.guo.learningprogresstracker.enums.ReviewMindMapParseStatusEnum;
import com.guo.learningprogresstracker.mapper.ReviewApplicationMapper;
import com.guo.learningprogresstracker.mapper.ReviewMindMapMapper;
import com.guo.learningprogresstracker.mapper.StudyReportFragmentsMapper;
@@ -25,7 +27,10 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.mock.web.MockMultipartFile;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.LocalDateTime;
import java.util.List;
@@ -172,4 +177,41 @@ class ReviewServiceImplTest {
assertEquals("JSON", entity.getContentFormat());
verify(reviewMindMapMapper).updateById(existing);
}
@Test
void uploadMindMap_shouldParseMarkdownFile() throws Exception {
when(tasksMapper.exists(any())).thenReturn(true);
when(reviewMindMapMapper.selectOne(any())).thenReturn(null);
when(reviewMindMapMapper.insert(any())).thenAnswer(invocation -> {
ReviewMindMapEntity entity = invocation.getArgument(0);
entity.setId(9);
return 1;
});
MockMultipartFile file = new MockMultipartFile(
"file",
"java-review.md",
"text/markdown",
"# Java 并发\n## 线程基础\n- RUNNABLE\n".getBytes());
ReviewMindMapEntity entity = reviewService.uploadMindMap("T1", file);
try {
assertEquals(9, entity.getId());
assertEquals("FILE", entity.getSourceType());
assertEquals(ReviewMindMapFileFormatEnum.MARKDOWN.getCode(), entity.getFileFormat());
assertEquals(ReviewMindMapParseStatusEnum.SUCCESS.getCode(), entity.getParseStatus());
assertEquals("JSON", entity.getContentFormat());
assertNotNull(entity.getParsedContent());
assertEquals(true, entity.getParsedContent().contains("线程基础"));
assertEquals(true, entity.getContent().contains("RUNNABLE"));
} finally {
if (entity.getFilePath() != null) {
Path storedFile = Path.of(entity.getFilePath());
Files.deleteIfExists(storedFile);
Files.deleteIfExists(storedFile.getParent());
}
}
verify(reviewMindMapMapper).insert(any(ReviewMindMapEntity.class));
}
}