@@ -2,6 +2,7 @@ package cc.unitmesh.devti.parser
2
2
3
3
import cc.unitmesh.devti.util.parser.CodeFence
4
4
import com.intellij.testFramework.fixtures.BasePlatformTestCase
5
+ import org.intellij.lang.annotations.Language
5
6
6
7
class CodeFenceTest : BasePlatformTestCase () {
7
8
fun testShould_parse_code_from_markdown_java_hello_world () {
@@ -376,4 +377,104 @@ npm run dev
376
377
""" .trimMargin()
377
378
)
378
379
}
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
+ }
379
480
}
0 commit comments