Skip to content

Commit 0855f7d

Browse files
committed
test(parser): add test for multiple patch code fences
Add a new test case `testShouldIdentifyForMultiplePatch` to verify the parsing of multiple patch code fences in markdown content. This ensures the `CodeFence` parser correctly handles complex patch scenarios.
1 parent f8aa890 commit 0855f7d

File tree

1 file changed

+101
-0
lines changed

1 file changed

+101
-0
lines changed

core/src/test/kotlin/cc/unitmesh/devti/parser/CodeFenceTest.kt

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package cc.unitmesh.devti.parser
22

33
import cc.unitmesh.devti.util.parser.CodeFence
44
import com.intellij.testFramework.fixtures.BasePlatformTestCase
5+
import org.intellij.lang.annotations.Language
56

67
class CodeFenceTest : BasePlatformTestCase() {
78
fun testShould_parse_code_from_markdown_java_hello_world() {
@@ -376,4 +377,104 @@ npm run dev
376377
""".trimMargin()
377378
)
378379
}
380+
381+
fun testShouldIdentifyForMultiplePatch() {
382+
@Language("DevIn")
383+
val content = """
384+
<devin>
385+
```patch
386+
Index: src/main/java/cc/unitmesh/untitled/demo/controller/BlogController.java
387+
--- src/main/java/cc/unitmesh/untitled/demo/controller/BlogController.java
388+
+++ src/main/java/cc/unitmesh/untitled/demo/interfaces/rest/BlogController.java
389+
@@ -3,39 +3,40 @@
390+
import cc.unitmesh.untitled.demo.dto.CreateBlogRequest;
391+
import cc.unitmesh.untitled.demo.dto.CreateBlogResponse;
392+
-import cc.unitmesh.untitled.demo.entity.BlogPost;
393+
-import cc.unitmesh.untitled.demo.service.BlogService;
394+
+import cc.unitmesh.untitled.demo.application.BlogCommandService;
395+
+import cc.unitmesh.untitled.demo.application.BlogQueryService;
396+
+import cc.unitmesh.untitled.demo.domain.model.Blog;
397+
+import cc.unitmesh.untitled.demo.domain.model.BlogAssembler;
398+
import io.swagger.annotations.ApiOperation;
399+
-import org.springframework.beans.BeanUtils;
400+
+import org.springframework.hateoas.EntityModel;
401+
import org.springframework.web.bind.annotation.*;
402+
403+
-import java.util.List;
404+
-
405+
@RestController
406+
@RequestMapping("/blog")
407+
public class BlogController {
408+
- BlogService blogService;
409+
+ private final BlogCommandService blogCommandService;
410+
+ private final BlogQueryService blogQueryService;
411+
+ private final BlogAssembler blogAssembler;
412+
413+
- public BlogController(BlogService blogService) {
414+
- this.blogService = blogService;
415+
+ public BlogController(BlogCommandService blogCommandService,
416+
+ BlogQueryService blogQueryService,
417+
+ BlogAssembler blogAssembler) {
418+
+ this.blogCommandService = blogCommandService;
419+
+ this.blogQueryService = blogQueryService;
420+
+ this.blogAssembler = blogAssembler;
421+
}
422+
423+
@ApiOperation(value = "Get Blog by id")
424+
@GetMapping("/{id}")
425+
- public BlogPost getBlog(@PathVariable Long id) {
426+
- return blogService.getBlogById(id);
427+
+ public EntityModel<BlogResponse> getBlog(@PathVariable Long id) {
428+
+ Blog blog = blogQueryService.getBlog(id);
429+
+ return blogAssembler.toModel(blog);
430+
}
431+
432+
@ApiOperation(value = "Create a new blog")
433+
@PostMapping("/")
434+
- public BlogPost createBlog(@RequestBody CreateBlogRequest request) {
435+
- CreateBlogResponse response = new CreateBlogResponse();
436+
- BlogPost blogPost = new BlogPost();
437+
- BeanUtils.copyProperties(request, blogPost);
438+
- BlogPost createdBlog = blogService.createBlog(blogPost);
439+
- BeanUtils.copyProperties(createdBlog, response);
440+
- return createdBlog;
441+
+ public Long createBlog(@RequestBody CreateBlogRequest request) {
442+
+ Blog blog = blogAssembler.toDomain(request);
443+
+ return blogCommandService.createBlog(blog);
444+
}
445+
}
446+
```
447+
448+
```patch
449+
Index: src/main/java/cc/unitmesh/untitled/demo/repository/BlogRepository.java
450+
--- src/main/java/cc/unitmesh/untitled/demo/repository/BlogRepository.java
451+
+++ src/main/java/cc/unitmesh/untitled/demo/infrastructure/persistence/JpaBlogRepository.java
452+
@@ -1,10 +1,17 @@
453+
-package cc.unitmesh.untitled.demo.repository;
454+
+package cc.unitmesh.untitled.demo.infrastructure.persistence;
455+
456+
-import cc.unitmesh.untitled.demo.entity.BlogPost;
457+
+import cc.unitmesh.untitled.demo.domain.model.Blog;
458+
+import cc.unitmesh.untitled.demo.domain.repository.BlogRepository;
459+
import org.springframework.data.repository.CrudRepository;
460+
import org.springframework.stereotype.Repository;
461+
462+
@Repository
463+
-public interface BlogRepository extends CrudRepository<BlogPost, Long> {
464+
+public interface JpaBlogRepository extends CrudRepository<BlogJpaEntity, Long> {
465+
+}
466+
+
467+
+@Repository
468+
+public class BlogRepositoryImpl implements BlogRepository {
469+
+ private final JpaBlogRepository jpaBlogRepository;
470+
471+
+ // 实现领域仓库接口,处理领域对象与JPA实体的转换
472+
}
473+
```
474+
</devin>
475+
""".trimIndent()
476+
477+
val codeFences = CodeFence.parseAll(content)
478+
assertEquals(codeFences.size, 1)
479+
}
379480
}

0 commit comments

Comments
 (0)