From 0ebb398bf18f2e94f47432509f9db5faf18fe1d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=98jminkkk=E2=80=99?= <102847513+jminkkk@users.noreply.github.com> Date: Mon, 16 Sep 2024 23:02:37 +0900 Subject: [PATCH 01/12] =?UTF-8?q?refactor(fixture):=20SourceCode=20Entity?= =?UTF-8?q?=EC=97=90=20=EB=8C=80=ED=95=9C=20=ED=94=BD=EC=8A=A4=EC=B2=98=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/codezap/fixture/SourceCodeFixture.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 backend/src/test/java/codezap/fixture/SourceCodeFixture.java diff --git a/backend/src/test/java/codezap/fixture/SourceCodeFixture.java b/backend/src/test/java/codezap/fixture/SourceCodeFixture.java new file mode 100644 index 000000000..c0e1eb8fc --- /dev/null +++ b/backend/src/test/java/codezap/fixture/SourceCodeFixture.java @@ -0,0 +1,16 @@ +package codezap.fixture; + +import codezap.template.domain.SourceCode; +import codezap.template.domain.Template; + +public class SourceCodeFixture { + + public static SourceCode get(Template template, int ordinal) { + return new SourceCode( + template, + "file1.java", + "content1", + ordinal + ); + } +} From 260e26469e1616d1b53ebfd4b5d1a1c902e383a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=98jminkkk=E2=80=99?= <102847513+jminkkk@users.noreply.github.com> Date: Mon, 16 Sep 2024 23:03:37 +0900 Subject: [PATCH 02/12] =?UTF-8?q?feat(global):=20Service=20Layer=EC=9D=98?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=8B=9C=20=EA=B3=B5=ED=86=B5?= =?UTF-8?q?=20=EB=A1=9C=EC=A7=81=20=EB=B6=84=EB=A6=AC=EB=A5=BC=20=EC=9C=84?= =?UTF-8?q?=ED=95=9C=20ServiceTest=20=ED=81=B4=EB=9E=98=EC=8A=A4=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../test/java/codezap/global/ServiceTest.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 backend/src/test/java/codezap/global/ServiceTest.java diff --git a/backend/src/test/java/codezap/global/ServiceTest.java b/backend/src/test/java/codezap/global/ServiceTest.java new file mode 100644 index 000000000..d9c5290e8 --- /dev/null +++ b/backend/src/test/java/codezap/global/ServiceTest.java @@ -0,0 +1,38 @@ +package codezap.global; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import codezap.category.repository.CategoryRepository; +import codezap.member.repository.MemberRepository; +import codezap.tag.repository.TagRepository; +import codezap.tag.repository.TemplateTagRepository; +import codezap.template.repository.SourceCodeRepository; +import codezap.template.repository.TemplateRepository; +import codezap.template.repository.ThumbnailRepository; + +@SpringBootTest +@DatabaseIsolation +public class ServiceTest { + + @Autowired + protected MemberRepository memberRepository; + + @Autowired + protected CategoryRepository categoryRepository; + + @Autowired + protected TemplateRepository templateRepository; + + @Autowired + protected TagRepository tagRepository; + + @Autowired + protected TemplateTagRepository templateTagRepository; + + @Autowired + protected SourceCodeRepository sourceCodeRepository; + + @Autowired + protected ThumbnailRepository thumbnailRepository; +} From 497f231986fa94ab06f61154931bc11d065b62b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=98jminkkk=E2=80=99?= <102847513+jminkkk@users.noreply.github.com> Date: Mon, 16 Sep 2024 23:04:16 +0900 Subject: [PATCH 03/12] =?UTF-8?q?test(service):=20SourceCode=20Service=20?= =?UTF-8?q?=EA=B3=84=EC=B8=B5=20=20Test=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/SourceCodeServiceTest.java | 408 ++++++++++++++++++ 1 file changed, 408 insertions(+) create mode 100644 backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java diff --git a/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java b/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java new file mode 100644 index 000000000..e597787e2 --- /dev/null +++ b/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java @@ -0,0 +1,408 @@ +package codezap.template.service; + +import static org.assertj.core.api.Assertions.assertThatList; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.jupiter.api.Assertions.assertAll; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.Collections; +import java.util.List; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import codezap.category.domain.Category; +import codezap.fixture.CategoryFixture; +import codezap.fixture.MemberFixture; +import codezap.fixture.SourceCodeFixture; +import codezap.fixture.TemplateFixture; +import codezap.global.ServiceTest; +import codezap.global.exception.CodeZapException; +import codezap.member.domain.Member; +import codezap.template.domain.SourceCode; +import codezap.template.domain.Template; +import codezap.template.domain.Thumbnail; +import codezap.template.dto.request.CreateSourceCodeRequest; +import codezap.template.dto.request.UpdateSourceCodeRequest; +import codezap.template.dto.request.UpdateTemplateRequest; + +class SourceCodeServiceTest extends ServiceTest { + + @Autowired + private SourceCodeService sourceCodeService; + + @Nested + @DisplayName("소스 코드 생성") + class CreateSourceCodes { + + @Test + @DisplayName("성공: 템플릿에 해당하는 소스 코드 저장") + void createSourceCodes() { + // given + Template template = createTemplate(); + CreateSourceCodeRequest request1 = new CreateSourceCodeRequest("file1.java", "content1", 1); + CreateSourceCodeRequest request2 = new CreateSourceCodeRequest("file2.java", "content2", 2); + + // when + sourceCodeService.createSourceCodes(template, List.of(request1, request2)); + + // then + List sourceCodes = sourceCodeRepository.findAllByTemplate(template); + assertAll(() -> assertEquals(2, sourceCodes.size()), + () -> assertEquals("file1.java", sourceCodes.get(0).getFilename()), + () -> assertEquals("content1", sourceCodes.get(0).getContent()), + () -> assertEquals(1, sourceCodes.get(0).getOrdinal()), + () -> assertEquals("file2.java", sourceCodes.get(1).getFilename()), + () -> assertEquals("content2", sourceCodes.get(1).getContent()), + () -> assertEquals(2, sourceCodes.get(1).getOrdinal())); + } + + @Test + @Disabled("애플리케이션 코드에서 검증 코드 작성 필요") + @DisplayName("실패: 순서 중복된 코드 존재") + void createSourceCodes_WhenOrdinalIsDuplicate() { + // given + Template template = createTemplate(); + int sameOrdinal = 1; + CreateSourceCodeRequest request1 = new CreateSourceCodeRequest("file1.java", "content1", sameOrdinal); + CreateSourceCodeRequest request2 = new CreateSourceCodeRequest("file2.java", "content2", sameOrdinal); + + // when + sourceCodeService.createSourceCodes(template, List.of(request1, request2)); + + // then + assertThatThrownBy(() -> sourceCodeRepository.findAllByTemplate(template)).isInstanceOf( + CodeZapException.class).hasMessage("소스 코드의 순서는 중복될 수 없습니다."); + } + + @Test + @Disabled("애플리케이션 코드에서 검증 코드 작성 필요") + @DisplayName("실패: 순서가 1부터 시작하지 않는 코드") + void createSourceCodes_WhenOrdinalIsNotStart1() { + // given + Template template = createTemplate(); + CreateSourceCodeRequest request1 = new CreateSourceCodeRequest("file1.java", "content1", 0); + CreateSourceCodeRequest request2 = new CreateSourceCodeRequest("file2.java", "content2", 1); + + // when + sourceCodeService.createSourceCodes(template, List.of(request1, request2)); + + // then + assertThatThrownBy(() -> sourceCodeRepository.findAllByTemplate(template)).isInstanceOf( + CodeZapException.class).hasMessage("소스 코드의 순서는 1부터 시작해야 합니다."); + } + } + + @Nested + @DisplayName("템플릿과 순서에 해당하는 소스 코드 조회") + class getByTemplateAndOrdinal { + + @Test + @DisplayName("성공") + void getByTemplateAndOrdinal() { + // given + Template template = createTemplate(); + SourceCode sourceCode1 = sourceCodeRepository.save(SourceCodeFixture.get(template, 1)); + SourceCode sourceCode2 = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); + + // when & then + assertAll(() -> assertEquals(sourceCodeService.getByTemplateAndOrdinal(template, 2), sourceCode2), + () -> assertEquals(sourceCodeService.getByTemplateAndOrdinal(template, 1), sourceCode1)); + } + + @Test + @DisplayName("실패: 템플릿에 해당하는 소스 코드가 존재하지 않음") + void getByTemplateAndOrdinal_WhenSourceCodeNotExist() { + // given + Template template = createTemplate(); + + // when & then + assertThatThrownBy(() -> sourceCodeService.getByTemplateAndOrdinal(template, 1)).isInstanceOf( + CodeZapException.class).hasMessage("템플릿에 1번째 소스 코드가 존재하지 않습니다."); + } + + @Test + @DisplayName("실패: 해당 순서의 소스 코드 없음") + void getByTemplateAndOrdinal_WhenOrdinalNotExist() { + // given + Template template = createTemplate(); + sourceCodeRepository.save(SourceCodeFixture.get(template, 1)); + sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); + + // when & then + assertThatThrownBy(() -> sourceCodeService.getByTemplateAndOrdinal(template, 3)).isInstanceOf( + CodeZapException.class).hasMessage("템플릿에 3번째 소스 코드가 존재하지 않습니다."); + } + } + + @Nested + @DisplayName("템플릿에 해당하는 소스 코드 조회") + class findSourceCodesByTemplate { + + @Test + @DisplayName("성공") + void findSourceCodesByTemplate() { + // given + Template template = createTemplate(); + SourceCode sourceCode1 = sourceCodeRepository.save(SourceCodeFixture.get(template, 1)); + SourceCode sourceCode2 = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); + + // when & then + assertThatList(sourceCodeService.findSourceCodesByTemplate(template)).containsExactly(sourceCode1, + sourceCode2); + } + + @Test + @DisplayName("성공: 템플릿에 해당하는 소스 코드가 존재하지 않은 경우 빈 리스트 반환") + void findSourceCodesByTemplate_WhenSourceCodeNotExist() { + // given + Template template = createTemplate(); + + // when & then + assertThatList(sourceCodeService.findSourceCodesByTemplate(template)).isEmpty(); + } + } + + @Nested + @DisplayName("소스 코드 수정") + class updateSourceCodes { + + @Test + @DisplayName("성공: 기존 소스 코드 제목, 내용 수정 및 새로운 소스 코드 추가") + void updateSourceCodes() { + // given + Template template = createTemplate(); + SourceCode sourceCode1 = sourceCodeRepository.save(SourceCodeFixture.get(template, 1)); + SourceCode sourceCode2 = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); + Thumbnail thumbnail = thumbnailRepository.save(new Thumbnail(template, sourceCode1)); + + UpdateSourceCodeRequest updateRequest1 = new UpdateSourceCodeRequest(sourceCode1.getId(), "변경된 제목1", + "변경된 내용1", sourceCode1.getOrdinal()); + UpdateSourceCodeRequest updateRequest2 = new UpdateSourceCodeRequest(sourceCode2.getId(), "변경된 제목2", + "변경된 내용2", sourceCode2.getOrdinal()); + CreateSourceCodeRequest createRequest = new CreateSourceCodeRequest("새로운 제목1", "새로운 내용1", 3); + UpdateTemplateRequest updateTemplateRequest = new UpdateTemplateRequest("템플릿 수정", "템플릿 설명", + List.of(createRequest), List.of(updateRequest1, updateRequest2), Collections.emptyList(), + template.getCategory().getId(), Collections.emptyList()); + + // when + sourceCodeService.updateSourceCodes(updateTemplateRequest, template, thumbnail); + + // then + SourceCode updatedSourceCode1 = sourceCodeRepository.fetchById(sourceCode1.getId()); + SourceCode updatedSourceCode2 = sourceCodeRepository.fetchById(sourceCode2.getId()); + SourceCode newSourceCode = sourceCodeRepository.fetchByTemplateAndOrdinal(template, 3); + + assertAll(() -> assertEquals(3, sourceCodeRepository.countByTemplate(template)), + () -> assertEquals("변경된 제목1", updatedSourceCode1.getFilename()), + () -> assertEquals(1, updatedSourceCode1.getOrdinal()), + () -> assertEquals("변경된 제목2", updatedSourceCode2.getFilename()), + () -> assertEquals(2, updatedSourceCode2.getOrdinal()), + () -> assertEquals("새로운 제목1", newSourceCode.getFilename())); + } + + @Test + @Disabled("애플리케이션 코드에서 로직 변경 필요") + @DisplayName("성공: 일부 소스 코드 삭제 및 새로운 소스 코드 추가 시, 삭제된 코드 순서는 앞당겨지고 새로 추가된 소스 코드의 순서는 가장 마지막 순서") + void updateSourceCodes_WhenDeleteSomeAndAddNew_ExistingCodesHavePriority() { + // given + Template template = createTemplate(); + SourceCode sourceCode1 = sourceCodeRepository.save(SourceCodeFixture.get(template, 1)); + SourceCode deleteSourceCode = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); + Thumbnail thumbnail = thumbnailRepository.save(new Thumbnail(template, sourceCode1)); + + UpdateSourceCodeRequest updateRequest1 = new UpdateSourceCodeRequest(sourceCode1.getId(), "변경된 제목1", + "변경된 내용1", sourceCode1.getOrdinal()); + CreateSourceCodeRequest createRequest = new CreateSourceCodeRequest("새로운 제목1", "새로운 내용1", 3); + UpdateTemplateRequest updateTemplateRequest = new UpdateTemplateRequest("템플릿 수정", "템플릿 설명", + List.of(createRequest), List.of(updateRequest1), List.of(deleteSourceCode.getId()), + template.getCategory().getId(), Collections.emptyList()); + + // when + sourceCodeService.updateSourceCodes(updateTemplateRequest, template, thumbnail); + + // then + assertAll( + () -> assertEquals(2, sourceCodeRepository.countByTemplate(template)), + () -> assertEquals("새로운 제목1", + sourceCodeRepository.fetchByTemplateAndOrdinal(template, 2).getFilename()), + () -> assertThatThrownBy(() -> sourceCodeRepository.fetchById(deleteSourceCode.getId())) + .isInstanceOf(CodeZapException.class) + .hasMessage("식별자 " + deleteSourceCode.getId() + "에 해당하는 소스 코드가 존재하지 않습니다.") + ); + } + + @Test + @Disabled("애플리케이션 코드에서 로직 변경 필요") + @DisplayName("성공: 썸네일 코드 삭제 시, 새로 순서가 1인 코드가 썸네일으로 등록") + void updateSourceCodes_WhenDeleteThumbnailCode_NewThumbnailAssigned() { + // given + Template template = createTemplate(); + SourceCode thumbnailSourceCode = sourceCodeRepository.save(SourceCodeFixture.get(template, 1)); + SourceCode sourceCode2 = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); + Thumbnail thumbnail = thumbnailRepository.save(new Thumbnail(template, thumbnailSourceCode)); + + List deleteSourceCodeIds = List.of(thumbnailSourceCode.getId()); + UpdateSourceCodeRequest updateRequest2 = new UpdateSourceCodeRequest(sourceCode2.getId(), "변경된 제목2", + "변경된 내용2", sourceCode2.getOrdinal()); + UpdateTemplateRequest updateTemplateRequest = new UpdateTemplateRequest("템플릿 수정", "템플릿 설명", + Collections.emptyList(), List.of(updateRequest2), deleteSourceCodeIds, + template.getCategory().getId(), Collections.emptyList()); + + // when + sourceCodeService.updateSourceCodes(updateTemplateRequest, template, thumbnail); + + // then + Thumbnail updatedThumbnail = thumbnailRepository.fetchByTemplate(template); + assertAll( + () -> assertEquals(sourceCode2.getId(), updatedThumbnail.getSourceCode().getId()), + () -> assertEquals(1, updatedThumbnail.getSourceCode().getOrdinal()) + ); + } + + @Test + @DisplayName("성공: 소스 코드 추가 및 기존 소스 코드 중 순서를 추가된 소스 코드보다 더 가장 나중으로 변경 및 소스 코드 추가") + void updateSourceCodes_WhenChangeOrderToLast_AndAddNewCode() { + // given + Template template = createTemplate(); + SourceCode sourceCode1 = sourceCodeRepository.save(SourceCodeFixture.get(template, 1)); + SourceCode sourceCode2 = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); + Thumbnail thumbnail = thumbnailRepository.save(new Thumbnail(template, sourceCode1)); + + UpdateSourceCodeRequest updateRequest1 = new UpdateSourceCodeRequest(sourceCode1.getId(), "변경된 제목1", + "변경된 내용1", 3); + UpdateSourceCodeRequest updateRequest2 = new UpdateSourceCodeRequest(sourceCode2.getId(), "변경된 제목2", + "변경된 내용2", 2); + CreateSourceCodeRequest createRequest = new CreateSourceCodeRequest("새로운 제목3", "새로운 내용3", 1); + UpdateTemplateRequest updateTemplateRequest = new UpdateTemplateRequest("템플릿 수정", "템플릿 설명", + List.of(createRequest), List.of(updateRequest1, updateRequest2), Collections.emptyList(), + template.getCategory().getId(), Collections.emptyList()); + + // when + sourceCodeService.updateSourceCodes(updateTemplateRequest, template, thumbnail); + + // then + assertAll(() -> assertEquals(3, sourceCodeRepository.countByTemplate(template)), + () -> assertEquals(3, sourceCodeRepository.fetchById(sourceCode1.getId()).getOrdinal()), + () -> assertEquals("새로운 제목3", + sourceCodeRepository.fetchByTemplateAndOrdinal(template, 1).getFilename()) + ); + } + + @Test + @Disabled("현재는 전체 삭제를 막지 않고 thumbnail으로 인해 DataIntegrityViolationException 발생, 애플리케이션 코드에서 로직 변경 필요") + @DisplayName("실패: 소스 코드 전체 삭제") + void updateSourceCodes_WhenDeleteAll() { + // given + Template template = createTemplate(); + SourceCode sourceCode1 = sourceCodeRepository.save(SourceCodeFixture.get(template, 1)); + SourceCode sourceCode2 = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); + Thumbnail thumbnail = thumbnailRepository.save(new Thumbnail(template, sourceCode1)); + + List deleteSourceCodeIds = List.of(sourceCode1.getId(), sourceCode2.getId()); + + UpdateTemplateRequest updateTemplateRequest = new UpdateTemplateRequest("템플릿 수정", "템플릿 설명", + Collections.emptyList(), Collections.emptyList(), deleteSourceCodeIds, + template.getCategory().getId(), Collections.emptyList()); + + // when & then + assertThatThrownBy(() -> sourceCodeService.updateSourceCodes(updateTemplateRequest, template, thumbnail)) + .isInstanceOf(CodeZapException.class) + .hasMessage("소스 코드는 최소 1개 이상 존재해야 합니다."); + } + + @Test + @DisplayName("실패: 추가가 아닌 모든 소스 코드는 추가 또는 삭제에 있어야 함") + void updateSourceCodes_WhenNotContainsAny_UpdateOrDelete() { + // given + Template template = createTemplate(); + SourceCode sourceCode1 = sourceCodeRepository.save(SourceCodeFixture.get(template, 1)); + SourceCode sourceCode2 = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); + Thumbnail thumbnail = thumbnailRepository.save(new Thumbnail(template, sourceCode1)); + + UpdateSourceCodeRequest updateRequest1 = new UpdateSourceCodeRequest(sourceCode1.getId(), "변경된 제목1", + "변경된 내용1", 1); + UpdateTemplateRequest updateTemplateRequest = new UpdateTemplateRequest("템플릿 수정", "템플릿 설명", + Collections.emptyList(), List.of(updateRequest1), Collections.emptyList(), + template.getCategory().getId(), Collections.emptyList()); + + // when & then + assertThatThrownBy(() -> sourceCodeService.updateSourceCodes(updateTemplateRequest, template, thumbnail)) + .isInstanceOf(CodeZapException.class) + .hasMessage("소스 코드의 정보가 정확하지 않습니다."); + } + + @Test + @Disabled("중복이어도 저장되고 있음, 애플리케이션 코드에서 로직 변경 필요") + @DisplayName("실패: 변경할 소스 코드의 순서가 중복된 소스 코드의 순서인 경우") + void updateSourceCodes_WhenDuplicateOrder() { + // given + Member member = memberRepository.save(MemberFixture.getFirstMember()); + Category category = categoryRepository.save(CategoryFixture.getFirstCategory()); + Template template = templateRepository.save(TemplateFixture.get(member, category)); + SourceCode sourceCode1 = sourceCodeRepository.save(SourceCodeFixture.get(template, 1)); + SourceCode sourceCode2 = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); + Thumbnail thumbnail = thumbnailRepository.save(new Thumbnail(template, sourceCode1)); + + UpdateSourceCodeRequest updateRequest1 = new UpdateSourceCodeRequest(sourceCode1.getId(), "변경된 제목1", + "변경된 내용1", 2); + UpdateSourceCodeRequest updateRequest2 = new UpdateSourceCodeRequest(sourceCode2.getId(), "변경된 제목2", + "변경된 내용2", 2); + + UpdateTemplateRequest updateTemplateRequest = new UpdateTemplateRequest("템플릿 수정", "템플릿 설명", + Collections.emptyList(), List.of(updateRequest1, updateRequest2), Collections.emptyList(), + template.getCategory().getId(), Collections.emptyList()); + + // when & then + assertThatThrownBy(() -> sourceCodeService.updateSourceCodes(updateTemplateRequest, template, thumbnail)) + .isInstanceOf(CodeZapException.class) + .hasMessage("소스 코드의 순서는 중복될 수 없습니다."); + } + } + + @Nested + @DisplayName("id에 해당하는 모든 소스 코드 삭제") + class deleteByIds { + + @Test + @DisplayName("성공") + void deleteByIds() { + // given + Member member = memberRepository.save(MemberFixture.getFirstMember()); + Category category = categoryRepository.save(CategoryFixture.getFirstCategory()); + Template template = templateRepository.save(TemplateFixture.get(member, category)); + SourceCode sourceCode1 = sourceCodeRepository.save(SourceCodeFixture.get(template, 1)); + SourceCode sourceCode2 = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); + + // when + sourceCodeService.deleteByIds(List.of(template.getId())); + + // then + assertThatList(sourceCodeRepository.findAllByTemplate(template)).isEmpty(); + } + + @Test + @DisplayName("성공: 소스 코드가 존재하지 않는 경우") + void deleteByIds_WhenIdNotExist() { + // given + Member member = memberRepository.save(MemberFixture.getFirstMember()); + Category category = categoryRepository.save(CategoryFixture.getFirstCategory()); + Template template = templateRepository.save(TemplateFixture.get(member, category)); + + // when + sourceCodeService.deleteByIds(List.of(template.getId())); + + // then + assertThatList(sourceCodeRepository.findAllByTemplate(template)).isEmpty(); + } + } + + private Template createTemplate() { + Member member = memberRepository.save(MemberFixture.getFirstMember()); + Category category = categoryRepository.save(CategoryFixture.getFirstCategory()); + return templateRepository.save(TemplateFixture.get(member, category)); + } +} From 6fab91441f87317231e8e963f6d6270639a0c728 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=98jminkkk=E2=80=99?= <102847513+jminkkk@users.noreply.github.com> Date: Thu, 19 Sep 2024 16:39:27 +0900 Subject: [PATCH 04/12] =?UTF-8?q?refactor(service):=20=EC=A4=84=EB=B0=94?= =?UTF-8?q?=EA=BF=88=20=EC=A0=95=EB=A0=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/SourceCodeServiceTest.java | 50 +++++++++++-------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java b/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java index e597787e2..fd73ed24e 100644 --- a/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java +++ b/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java @@ -74,8 +74,9 @@ void createSourceCodes_WhenOrdinalIsDuplicate() { sourceCodeService.createSourceCodes(template, List.of(request1, request2)); // then - assertThatThrownBy(() -> sourceCodeRepository.findAllByTemplate(template)).isInstanceOf( - CodeZapException.class).hasMessage("소스 코드의 순서는 중복될 수 없습니다."); + assertThatThrownBy(() -> sourceCodeRepository.findAllByTemplate(template)) + .isInstanceOf(CodeZapException.class) + .hasMessage("소스 코드의 순서는 중복될 수 없습니다."); } @Test @@ -91,8 +92,9 @@ void createSourceCodes_WhenOrdinalIsNotStart1() { sourceCodeService.createSourceCodes(template, List.of(request1, request2)); // then - assertThatThrownBy(() -> sourceCodeRepository.findAllByTemplate(template)).isInstanceOf( - CodeZapException.class).hasMessage("소스 코드의 순서는 1부터 시작해야 합니다."); + assertThatThrownBy(() -> sourceCodeRepository.findAllByTemplate(template)) + .isInstanceOf(CodeZapException.class) + .hasMessage("소스 코드의 순서는 1부터 시작해야 합니다."); } } @@ -120,8 +122,9 @@ void getByTemplateAndOrdinal_WhenSourceCodeNotExist() { Template template = createTemplate(); // when & then - assertThatThrownBy(() -> sourceCodeService.getByTemplateAndOrdinal(template, 1)).isInstanceOf( - CodeZapException.class).hasMessage("템플릿에 1번째 소스 코드가 존재하지 않습니다."); + assertThatThrownBy(() -> sourceCodeService.getByTemplateAndOrdinal(template, 1)) + .isInstanceOf(CodeZapException.class) + .hasMessage("템플릿에 1번째 소스 코드가 존재하지 않습니다."); } @Test @@ -133,8 +136,9 @@ void getByTemplateAndOrdinal_WhenOrdinalNotExist() { sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); // when & then - assertThatThrownBy(() -> sourceCodeService.getByTemplateAndOrdinal(template, 3)).isInstanceOf( - CodeZapException.class).hasMessage("템플릿에 3번째 소스 코드가 존재하지 않습니다."); + assertThatThrownBy(() -> sourceCodeService.getByTemplateAndOrdinal(template, 3)) + .isInstanceOf(CodeZapException.class) + .hasMessage("템플릿에 3번째 소스 코드가 존재하지 않습니다."); } } @@ -151,8 +155,8 @@ void findSourceCodesByTemplate() { SourceCode sourceCode2 = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); // when & then - assertThatList(sourceCodeService.findSourceCodesByTemplate(template)).containsExactly(sourceCode1, - sourceCode2); + assertThatList(sourceCodeService.findSourceCodesByTemplate(template)) + .containsExactly(sourceCode1, sourceCode2); } @Test @@ -179,10 +183,10 @@ void updateSourceCodes() { SourceCode sourceCode2 = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); Thumbnail thumbnail = thumbnailRepository.save(new Thumbnail(template, sourceCode1)); - UpdateSourceCodeRequest updateRequest1 = new UpdateSourceCodeRequest(sourceCode1.getId(), "변경된 제목1", - "변경된 내용1", sourceCode1.getOrdinal()); - UpdateSourceCodeRequest updateRequest2 = new UpdateSourceCodeRequest(sourceCode2.getId(), "변경된 제목2", - "변경된 내용2", sourceCode2.getOrdinal()); + UpdateSourceCodeRequest updateRequest1 = new UpdateSourceCodeRequest( + sourceCode1.getId(), "변경된 제목1", "변경된 내용1", sourceCode1.getOrdinal()); + UpdateSourceCodeRequest updateRequest2 = new UpdateSourceCodeRequest( + sourceCode2.getId(), "변경된 제목2", "변경된 내용2", sourceCode2.getOrdinal()); CreateSourceCodeRequest createRequest = new CreateSourceCodeRequest("새로운 제목1", "새로운 내용1", 3); UpdateTemplateRequest updateTemplateRequest = new UpdateTemplateRequest("템플릿 수정", "템플릿 설명", List.of(createRequest), List.of(updateRequest1, updateRequest2), Collections.emptyList(), @@ -196,7 +200,8 @@ void updateSourceCodes() { SourceCode updatedSourceCode2 = sourceCodeRepository.fetchById(sourceCode2.getId()); SourceCode newSourceCode = sourceCodeRepository.fetchByTemplateAndOrdinal(template, 3); - assertAll(() -> assertEquals(3, sourceCodeRepository.countByTemplate(template)), + assertAll( + () -> assertEquals(3, sourceCodeRepository.countByTemplate(template)), () -> assertEquals("변경된 제목1", updatedSourceCode1.getFilename()), () -> assertEquals(1, updatedSourceCode1.getOrdinal()), () -> assertEquals("변경된 제목2", updatedSourceCode2.getFilename()), @@ -214,8 +219,8 @@ void updateSourceCodes_WhenDeleteSomeAndAddNew_ExistingCodesHavePriority() { SourceCode deleteSourceCode = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); Thumbnail thumbnail = thumbnailRepository.save(new Thumbnail(template, sourceCode1)); - UpdateSourceCodeRequest updateRequest1 = new UpdateSourceCodeRequest(sourceCode1.getId(), "변경된 제목1", - "변경된 내용1", sourceCode1.getOrdinal()); + UpdateSourceCodeRequest updateRequest1 = new UpdateSourceCodeRequest( + sourceCode1.getId(), "변경된 제목1", "변경된 내용1", sourceCode1.getOrdinal()); CreateSourceCodeRequest createRequest = new CreateSourceCodeRequest("새로운 제목1", "새로운 내용1", 3); UpdateTemplateRequest updateTemplateRequest = new UpdateTemplateRequest("템플릿 수정", "템플릿 설명", List.of(createRequest), List.of(updateRequest1), List.of(deleteSourceCode.getId()), @@ -285,7 +290,8 @@ void updateSourceCodes_WhenChangeOrderToLast_AndAddNewCode() { sourceCodeService.updateSourceCodes(updateTemplateRequest, template, thumbnail); // then - assertAll(() -> assertEquals(3, sourceCodeRepository.countByTemplate(template)), + assertAll( + () -> assertEquals(3, sourceCodeRepository.countByTemplate(template)), () -> assertEquals(3, sourceCodeRepository.fetchById(sourceCode1.getId()).getOrdinal()), () -> assertEquals("새로운 제목3", sourceCodeRepository.fetchByTemplateAndOrdinal(template, 1).getFilename()) @@ -347,10 +353,10 @@ void updateSourceCodes_WhenDuplicateOrder() { SourceCode sourceCode2 = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); Thumbnail thumbnail = thumbnailRepository.save(new Thumbnail(template, sourceCode1)); - UpdateSourceCodeRequest updateRequest1 = new UpdateSourceCodeRequest(sourceCode1.getId(), "변경된 제목1", - "변경된 내용1", 2); - UpdateSourceCodeRequest updateRequest2 = new UpdateSourceCodeRequest(sourceCode2.getId(), "변경된 제목2", - "변경된 내용2", 2); + UpdateSourceCodeRequest updateRequest1 = new UpdateSourceCodeRequest( + sourceCode1.getId(), "변경된 제목1", "변경된 내용1", 2); + UpdateSourceCodeRequest updateRequest2 = new UpdateSourceCodeRequest( + sourceCode2.getId(), "변경된 제목2", "변경된 내용2", 2); UpdateTemplateRequest updateTemplateRequest = new UpdateTemplateRequest("템플릿 수정", "템플릿 설명", Collections.emptyList(), List.of(updateRequest1, updateRequest2), Collections.emptyList(), From 7c8e92f6113bf34899122b4c2d005528e05e658a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=98jminkkk=E2=80=99?= <102847513+jminkkk@users.noreply.github.com> Date: Thu, 19 Sep 2024 17:12:56 +0900 Subject: [PATCH 05/12] =?UTF-8?q?refactor(service):=20assertEquals=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0=20=EB=B0=8F=20private=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=EB=A1=9C=20DTO=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/SourceCodeServiceTest.java | 106 ++++++++---------- 1 file changed, 46 insertions(+), 60 deletions(-) diff --git a/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java b/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java index fd73ed24e..fb13ac477 100644 --- a/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java +++ b/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java @@ -1,9 +1,9 @@ package codezap.template.service; +import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatList; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.jupiter.api.Assertions.assertAll; -import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.Collections; import java.util.List; @@ -51,13 +51,13 @@ void createSourceCodes() { // then List sourceCodes = sourceCodeRepository.findAllByTemplate(template); - assertAll(() -> assertEquals(2, sourceCodes.size()), - () -> assertEquals("file1.java", sourceCodes.get(0).getFilename()), - () -> assertEquals("content1", sourceCodes.get(0).getContent()), - () -> assertEquals(1, sourceCodes.get(0).getOrdinal()), - () -> assertEquals("file2.java", sourceCodes.get(1).getFilename()), - () -> assertEquals("content2", sourceCodes.get(1).getContent()), - () -> assertEquals(2, sourceCodes.get(1).getOrdinal())); + assertAll( + () -> assertThat(sourceCodes.size()).isEqualTo(2), + () -> assertThat(sourceCodes.get(0).getFilename()).isEqualTo("file1.java"), + () -> assertThat(sourceCodes.get(0).getOrdinal()).isEqualTo(1), + () -> assertThat(sourceCodes.get(1).getFilename()).isEqualTo("file2.java"), + () -> assertThat(sourceCodes.get(1).getOrdinal()).isEqualTo(2) + ); } @Test @@ -81,7 +81,7 @@ void createSourceCodes_WhenOrdinalIsDuplicate() { @Test @Disabled("애플리케이션 코드에서 검증 코드 작성 필요") - @DisplayName("실패: 순서가 1부터 시작하지 않는 코드") + @DisplayName("실패: 순서가 1부터 시작하지 않는 소스 코드") void createSourceCodes_WhenOrdinalIsNotStart1() { // given Template template = createTemplate(); @@ -111,8 +111,9 @@ void getByTemplateAndOrdinal() { SourceCode sourceCode2 = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); // when & then - assertAll(() -> assertEquals(sourceCodeService.getByTemplateAndOrdinal(template, 2), sourceCode2), - () -> assertEquals(sourceCodeService.getByTemplateAndOrdinal(template, 1), sourceCode1)); + assertAll( + () -> assertThat(sourceCodeService.getByTemplateAndOrdinal(template, 2)).isEqualTo(sourceCode2), + () -> assertThat(sourceCodeService.getByTemplateAndOrdinal(template, 1)).isEqualTo(sourceCode1)); } @Test @@ -183,10 +184,8 @@ void updateSourceCodes() { SourceCode sourceCode2 = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); Thumbnail thumbnail = thumbnailRepository.save(new Thumbnail(template, sourceCode1)); - UpdateSourceCodeRequest updateRequest1 = new UpdateSourceCodeRequest( - sourceCode1.getId(), "변경된 제목1", "변경된 내용1", sourceCode1.getOrdinal()); - UpdateSourceCodeRequest updateRequest2 = new UpdateSourceCodeRequest( - sourceCode2.getId(), "변경된 제목2", "변경된 내용2", sourceCode2.getOrdinal()); + UpdateSourceCodeRequest updateRequest1 = getUpdateSourceCodeRequest(sourceCode1); + UpdateSourceCodeRequest updateRequest2 = getUpdateSourceCodeRequest(sourceCode2); CreateSourceCodeRequest createRequest = new CreateSourceCodeRequest("새로운 제목1", "새로운 내용1", 3); UpdateTemplateRequest updateTemplateRequest = new UpdateTemplateRequest("템플릿 수정", "템플릿 설명", List.of(createRequest), List.of(updateRequest1, updateRequest2), Collections.emptyList(), @@ -201,12 +200,12 @@ void updateSourceCodes() { SourceCode newSourceCode = sourceCodeRepository.fetchByTemplateAndOrdinal(template, 3); assertAll( - () -> assertEquals(3, sourceCodeRepository.countByTemplate(template)), - () -> assertEquals("변경된 제목1", updatedSourceCode1.getFilename()), - () -> assertEquals(1, updatedSourceCode1.getOrdinal()), - () -> assertEquals("변경된 제목2", updatedSourceCode2.getFilename()), - () -> assertEquals(2, updatedSourceCode2.getOrdinal()), - () -> assertEquals("새로운 제목1", newSourceCode.getFilename())); + () -> assertThat(sourceCodeRepository.countByTemplate(template)).isEqualTo(3), + () -> assertThat(updatedSourceCode1.getFilename()).isEqualTo("변경된 제목1"), + () -> assertThat(updatedSourceCode1.getOrdinal()).isEqualTo(1), + () -> assertThat(updatedSourceCode2.getFilename()).isEqualTo("변경된 제목2"), + () -> assertThat(updatedSourceCode2.getOrdinal()).isEqualTo(2), + () -> assertThat(newSourceCode.getFilename()).isEqualTo("새로운 제목1")); } @Test @@ -219,8 +218,7 @@ void updateSourceCodes_WhenDeleteSomeAndAddNew_ExistingCodesHavePriority() { SourceCode deleteSourceCode = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); Thumbnail thumbnail = thumbnailRepository.save(new Thumbnail(template, sourceCode1)); - UpdateSourceCodeRequest updateRequest1 = new UpdateSourceCodeRequest( - sourceCode1.getId(), "변경된 제목1", "변경된 내용1", sourceCode1.getOrdinal()); + UpdateSourceCodeRequest updateRequest1 = getUpdateSourceCodeRequest(sourceCode1); CreateSourceCodeRequest createRequest = new CreateSourceCodeRequest("새로운 제목1", "새로운 내용1", 3); UpdateTemplateRequest updateTemplateRequest = new UpdateTemplateRequest("템플릿 수정", "템플릿 설명", List.of(createRequest), List.of(updateRequest1), List.of(deleteSourceCode.getId()), @@ -231,9 +229,8 @@ void updateSourceCodes_WhenDeleteSomeAndAddNew_ExistingCodesHavePriority() { // then assertAll( - () -> assertEquals(2, sourceCodeRepository.countByTemplate(template)), - () -> assertEquals("새로운 제목1", - sourceCodeRepository.fetchByTemplateAndOrdinal(template, 2).getFilename()), + () -> assertThat(sourceCodeRepository.countByTemplate(template)).isEqualTo(2), + () -> assertThat(sourceCodeRepository.fetchByTemplateAndOrdinal(template, 2).getFilename()).isEqualTo("새로운 제목1"), () -> assertThatThrownBy(() -> sourceCodeRepository.fetchById(deleteSourceCode.getId())) .isInstanceOf(CodeZapException.class) .hasMessage("식별자 " + deleteSourceCode.getId() + "에 해당하는 소스 코드가 존재하지 않습니다.") @@ -247,12 +244,11 @@ void updateSourceCodes_WhenDeleteThumbnailCode_NewThumbnailAssigned() { // given Template template = createTemplate(); SourceCode thumbnailSourceCode = sourceCodeRepository.save(SourceCodeFixture.get(template, 1)); - SourceCode sourceCode2 = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); + SourceCode othersourceCode = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); Thumbnail thumbnail = thumbnailRepository.save(new Thumbnail(template, thumbnailSourceCode)); List deleteSourceCodeIds = List.of(thumbnailSourceCode.getId()); - UpdateSourceCodeRequest updateRequest2 = new UpdateSourceCodeRequest(sourceCode2.getId(), "변경된 제목2", - "변경된 내용2", sourceCode2.getOrdinal()); + UpdateSourceCodeRequest updateRequest2 = getUpdateSourceCodeRequest(othersourceCode); UpdateTemplateRequest updateTemplateRequest = new UpdateTemplateRequest("템플릿 수정", "템플릿 설명", Collections.emptyList(), List.of(updateRequest2), deleteSourceCodeIds, template.getCategory().getId(), Collections.emptyList()); @@ -263,13 +259,13 @@ void updateSourceCodes_WhenDeleteThumbnailCode_NewThumbnailAssigned() { // then Thumbnail updatedThumbnail = thumbnailRepository.fetchByTemplate(template); assertAll( - () -> assertEquals(sourceCode2.getId(), updatedThumbnail.getSourceCode().getId()), - () -> assertEquals(1, updatedThumbnail.getSourceCode().getOrdinal()) + () -> assertThat(updatedThumbnail.getSourceCode().getId()).isEqualTo(othersourceCode.getId()), + () -> assertThat(updatedThumbnail.getSourceCode().getOrdinal()).isEqualTo(1) ); } @Test - @DisplayName("성공: 소스 코드 추가 및 기존 소스 코드 중 순서를 추가된 소스 코드보다 더 가장 나중으로 변경 및 소스 코드 추가") + @DisplayName("성공: 소스 코드 추가 & 기존 소스 코드들 순서를 추가된 소스 코드보다 나중으로 변경") void updateSourceCodes_WhenChangeOrderToLast_AndAddNewCode() { // given Template template = createTemplate(); @@ -277,10 +273,8 @@ void updateSourceCodes_WhenChangeOrderToLast_AndAddNewCode() { SourceCode sourceCode2 = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); Thumbnail thumbnail = thumbnailRepository.save(new Thumbnail(template, sourceCode1)); - UpdateSourceCodeRequest updateRequest1 = new UpdateSourceCodeRequest(sourceCode1.getId(), "변경된 제목1", - "변경된 내용1", 3); - UpdateSourceCodeRequest updateRequest2 = new UpdateSourceCodeRequest(sourceCode2.getId(), "변경된 제목2", - "변경된 내용2", 2); + UpdateSourceCodeRequest updateRequest1 = getUpdateSourceCodeRequest(sourceCode1); + UpdateSourceCodeRequest updateRequest2 = getUpdateSourceCodeRequest(sourceCode2); CreateSourceCodeRequest createRequest = new CreateSourceCodeRequest("새로운 제목3", "새로운 내용3", 1); UpdateTemplateRequest updateTemplateRequest = new UpdateTemplateRequest("템플릿 수정", "템플릿 설명", List.of(createRequest), List.of(updateRequest1, updateRequest2), Collections.emptyList(), @@ -291,10 +285,9 @@ void updateSourceCodes_WhenChangeOrderToLast_AndAddNewCode() { // then assertAll( - () -> assertEquals(3, sourceCodeRepository.countByTemplate(template)), - () -> assertEquals(3, sourceCodeRepository.fetchById(sourceCode1.getId()).getOrdinal()), - () -> assertEquals("새로운 제목3", - sourceCodeRepository.fetchByTemplateAndOrdinal(template, 1).getFilename()) + () -> assertThat(sourceCodeRepository.countByTemplate(template)).isEqualTo(3), + () -> assertThat(sourceCodeRepository.fetchById(sourceCode1.getId()).getOrdinal()).isEqualTo(3), + () -> assertThat(sourceCodeRepository.fetchByTemplateAndOrdinal(template, 1).getFilename()).isEqualTo("새로운 제목3") ); } @@ -329,8 +322,7 @@ void updateSourceCodes_WhenNotContainsAny_UpdateOrDelete() { SourceCode sourceCode2 = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); Thumbnail thumbnail = thumbnailRepository.save(new Thumbnail(template, sourceCode1)); - UpdateSourceCodeRequest updateRequest1 = new UpdateSourceCodeRequest(sourceCode1.getId(), "변경된 제목1", - "변경된 내용1", 1); + UpdateSourceCodeRequest updateRequest1 = getUpdateSourceCodeRequest(sourceCode1); UpdateTemplateRequest updateTemplateRequest = new UpdateTemplateRequest("템플릿 수정", "템플릿 설명", Collections.emptyList(), List.of(updateRequest1), Collections.emptyList(), template.getCategory().getId(), Collections.emptyList()); @@ -346,17 +338,13 @@ void updateSourceCodes_WhenNotContainsAny_UpdateOrDelete() { @DisplayName("실패: 변경할 소스 코드의 순서가 중복된 소스 코드의 순서인 경우") void updateSourceCodes_WhenDuplicateOrder() { // given - Member member = memberRepository.save(MemberFixture.getFirstMember()); - Category category = categoryRepository.save(CategoryFixture.getFirstCategory()); - Template template = templateRepository.save(TemplateFixture.get(member, category)); + Template template = createTemplate(); SourceCode sourceCode1 = sourceCodeRepository.save(SourceCodeFixture.get(template, 1)); SourceCode sourceCode2 = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); Thumbnail thumbnail = thumbnailRepository.save(new Thumbnail(template, sourceCode1)); - UpdateSourceCodeRequest updateRequest1 = new UpdateSourceCodeRequest( - sourceCode1.getId(), "변경된 제목1", "변경된 내용1", 2); - UpdateSourceCodeRequest updateRequest2 = new UpdateSourceCodeRequest( - sourceCode2.getId(), "변경된 제목2", "변경된 내용2", 2); + UpdateSourceCodeRequest updateRequest1 = getUpdateSourceCodeRequest(sourceCode1); + UpdateSourceCodeRequest updateRequest2 = getUpdateSourceCodeRequest(sourceCode2); UpdateTemplateRequest updateTemplateRequest = new UpdateTemplateRequest("템플릿 수정", "템플릿 설명", Collections.emptyList(), List.of(updateRequest1, updateRequest2), Collections.emptyList(), @@ -367,6 +355,11 @@ void updateSourceCodes_WhenDuplicateOrder() { .isInstanceOf(CodeZapException.class) .hasMessage("소스 코드의 순서는 중복될 수 없습니다."); } + + private UpdateSourceCodeRequest getUpdateSourceCodeRequest(SourceCode sourceCode) { + return new UpdateSourceCodeRequest(sourceCode.getId(), "변경된 제목" + sourceCode.getOrdinal(), + "변경된 내용" + sourceCode.getOrdinal(), sourceCode.getOrdinal()); + } } @Nested @@ -377,11 +370,9 @@ class deleteByIds { @DisplayName("성공") void deleteByIds() { // given - Member member = memberRepository.save(MemberFixture.getFirstMember()); - Category category = categoryRepository.save(CategoryFixture.getFirstCategory()); - Template template = templateRepository.save(TemplateFixture.get(member, category)); - SourceCode sourceCode1 = sourceCodeRepository.save(SourceCodeFixture.get(template, 1)); - SourceCode sourceCode2 = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); + Template template = createTemplate(); + sourceCodeRepository.save(SourceCodeFixture.get(template, 1)); + sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); // when sourceCodeService.deleteByIds(List.of(template.getId())); @@ -393,15 +384,10 @@ void deleteByIds() { @Test @DisplayName("성공: 소스 코드가 존재하지 않는 경우") void deleteByIds_WhenIdNotExist() { - // given - Member member = memberRepository.save(MemberFixture.getFirstMember()); - Category category = categoryRepository.save(CategoryFixture.getFirstCategory()); - Template template = templateRepository.save(TemplateFixture.get(member, category)); + Template template = createTemplate(); - // when sourceCodeService.deleteByIds(List.of(template.getId())); - // then assertThatList(sourceCodeRepository.findAllByTemplate(template)).isEmpty(); } } From 2dcca348658a75c5682ed44a4224a9b409d5df28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=98jminkkk=E2=80=99?= <102847513+jminkkk@users.noreply.github.com> Date: Thu, 19 Sep 2024 17:22:39 +0900 Subject: [PATCH 06/12] =?UTF-8?q?fix(service):=20=EC=9E=98=EB=AA=BB=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=ED=95=9C=20=EB=B3=80=EC=88=98=20=EB=A1=A4?= =?UTF-8?q?=EB=B0=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/SourceCodeServiceTest.java | 32 ++++++++++++------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java b/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java index fb13ac477..5db5834f7 100644 --- a/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java +++ b/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java @@ -1,7 +1,6 @@ package codezap.template.service; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatList; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.jupiter.api.Assertions.assertAll; @@ -156,7 +155,7 @@ void findSourceCodesByTemplate() { SourceCode sourceCode2 = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); // when & then - assertThatList(sourceCodeService.findSourceCodesByTemplate(template)) + assertThat(sourceCodeService.findSourceCodesByTemplate(template)) .containsExactly(sourceCode1, sourceCode2); } @@ -167,7 +166,7 @@ void findSourceCodesByTemplate_WhenSourceCodeNotExist() { Template template = createTemplate(); // when & then - assertThatList(sourceCodeService.findSourceCodesByTemplate(template)).isEmpty(); + assertThat(sourceCodeService.findSourceCodesByTemplate(template)).isEmpty(); } } @@ -230,7 +229,9 @@ void updateSourceCodes_WhenDeleteSomeAndAddNew_ExistingCodesHavePriority() { // then assertAll( () -> assertThat(sourceCodeRepository.countByTemplate(template)).isEqualTo(2), - () -> assertThat(sourceCodeRepository.fetchByTemplateAndOrdinal(template, 2).getFilename()).isEqualTo("새로운 제목1"), + () -> assertThat( + sourceCodeRepository.fetchByTemplateAndOrdinal(template, 2).getFilename()).isEqualTo( + "새로운 제목1"), () -> assertThatThrownBy(() -> sourceCodeRepository.fetchById(deleteSourceCode.getId())) .isInstanceOf(CodeZapException.class) .hasMessage("식별자 " + deleteSourceCode.getId() + "에 해당하는 소스 코드가 존재하지 않습니다.") @@ -273,11 +274,12 @@ void updateSourceCodes_WhenChangeOrderToLast_AndAddNewCode() { SourceCode sourceCode2 = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); Thumbnail thumbnail = thumbnailRepository.save(new Thumbnail(template, sourceCode1)); - UpdateSourceCodeRequest updateRequest1 = getUpdateSourceCodeRequest(sourceCode1); + UpdateSourceCodeRequest ordinalUpdateRequest = new UpdateSourceCodeRequest(sourceCode1.getId(), "변경된 제목1", + "변경된 내용1", 3); UpdateSourceCodeRequest updateRequest2 = getUpdateSourceCodeRequest(sourceCode2); - CreateSourceCodeRequest createRequest = new CreateSourceCodeRequest("새로운 제목3", "새로운 내용3", 1); + CreateSourceCodeRequest createRequest = new CreateSourceCodeRequest("새로운 제목3", "새로운 내용3", sourceCode1.getOrdinal()); UpdateTemplateRequest updateTemplateRequest = new UpdateTemplateRequest("템플릿 수정", "템플릿 설명", - List.of(createRequest), List.of(updateRequest1, updateRequest2), Collections.emptyList(), + List.of(createRequest), List.of(ordinalUpdateRequest, updateRequest2), Collections.emptyList(), template.getCategory().getId(), Collections.emptyList()); // when @@ -287,7 +289,9 @@ void updateSourceCodes_WhenChangeOrderToLast_AndAddNewCode() { assertAll( () -> assertThat(sourceCodeRepository.countByTemplate(template)).isEqualTo(3), () -> assertThat(sourceCodeRepository.fetchById(sourceCode1.getId()).getOrdinal()).isEqualTo(3), - () -> assertThat(sourceCodeRepository.fetchByTemplateAndOrdinal(template, 1).getFilename()).isEqualTo("새로운 제목3") + () -> assertThat( + sourceCodeRepository.fetchByTemplateAndOrdinal(template, 1).getFilename()).isEqualTo( + "새로운 제목3") ); } @@ -357,8 +361,12 @@ void updateSourceCodes_WhenDuplicateOrder() { } private UpdateSourceCodeRequest getUpdateSourceCodeRequest(SourceCode sourceCode) { - return new UpdateSourceCodeRequest(sourceCode.getId(), "변경된 제목" + sourceCode.getOrdinal(), - "변경된 내용" + sourceCode.getOrdinal(), sourceCode.getOrdinal()); + return new UpdateSourceCodeRequest( + sourceCode.getId(), + "변경된 제목" + sourceCode.getOrdinal(), + "변경된 내용" + sourceCode.getOrdinal(), + sourceCode.getOrdinal() + ); } } @@ -378,7 +386,7 @@ void deleteByIds() { sourceCodeService.deleteByIds(List.of(template.getId())); // then - assertThatList(sourceCodeRepository.findAllByTemplate(template)).isEmpty(); + assertThat(sourceCodeRepository.findAllByTemplate(template)).isEmpty(); } @Test @@ -388,7 +396,7 @@ void deleteByIds_WhenIdNotExist() { sourceCodeService.deleteByIds(List.of(template.getId())); - assertThatList(sourceCodeRepository.findAllByTemplate(template)).isEmpty(); + assertThat(sourceCodeRepository.findAllByTemplate(template)).isEmpty(); } } From 228ba7baff20a8991a9c943e014748134755f3c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=98jminkkk=E2=80=99?= <102847513+jminkkk@users.noreply.github.com> Date: Thu, 19 Sep 2024 17:29:40 +0900 Subject: [PATCH 07/12] =?UTF-8?q?refactor(service):=20private=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EC=82=AC=EC=9A=A9=20=EB=B0=8F=20=EC=A4=84?= =?UTF-8?q?=EB=B0=94=EA=BF=88=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/SourceCodeServiceTest.java | 89 ++++++++++++++----- 1 file changed, 67 insertions(+), 22 deletions(-) diff --git a/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java b/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java index 5db5834f7..b4d940a09 100644 --- a/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java +++ b/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java @@ -186,9 +186,13 @@ void updateSourceCodes() { UpdateSourceCodeRequest updateRequest1 = getUpdateSourceCodeRequest(sourceCode1); UpdateSourceCodeRequest updateRequest2 = getUpdateSourceCodeRequest(sourceCode2); CreateSourceCodeRequest createRequest = new CreateSourceCodeRequest("새로운 제목1", "새로운 내용1", 3); - UpdateTemplateRequest updateTemplateRequest = new UpdateTemplateRequest("템플릿 수정", "템플릿 설명", - List.of(createRequest), List.of(updateRequest1, updateRequest2), Collections.emptyList(), - template.getCategory().getId(), Collections.emptyList()); + UpdateTemplateRequest updateTemplateRequest = getUpdateTemplateRequest( + List.of(createRequest), + List.of(updateRequest1, updateRequest2), + Collections.emptyList(), + template.getCategory().getId(), + Collections.emptyList() + ); // when sourceCodeService.updateSourceCodes(updateTemplateRequest, template, thumbnail); @@ -219,9 +223,13 @@ void updateSourceCodes_WhenDeleteSomeAndAddNew_ExistingCodesHavePriority() { UpdateSourceCodeRequest updateRequest1 = getUpdateSourceCodeRequest(sourceCode1); CreateSourceCodeRequest createRequest = new CreateSourceCodeRequest("새로운 제목1", "새로운 내용1", 3); - UpdateTemplateRequest updateTemplateRequest = new UpdateTemplateRequest("템플릿 수정", "템플릿 설명", - List.of(createRequest), List.of(updateRequest1), List.of(deleteSourceCode.getId()), - template.getCategory().getId(), Collections.emptyList()); + UpdateTemplateRequest updateTemplateRequest = getUpdateTemplateRequest( + List.of(createRequest), + List.of(updateRequest1), + List.of(deleteSourceCode.getId()), + template.getCategory().getId(), + Collections.emptyList() + ); // when sourceCodeService.updateSourceCodes(updateTemplateRequest, template, thumbnail); @@ -250,9 +258,13 @@ void updateSourceCodes_WhenDeleteThumbnailCode_NewThumbnailAssigned() { List deleteSourceCodeIds = List.of(thumbnailSourceCode.getId()); UpdateSourceCodeRequest updateRequest2 = getUpdateSourceCodeRequest(othersourceCode); - UpdateTemplateRequest updateTemplateRequest = new UpdateTemplateRequest("템플릿 수정", "템플릿 설명", - Collections.emptyList(), List.of(updateRequest2), deleteSourceCodeIds, - template.getCategory().getId(), Collections.emptyList()); + UpdateTemplateRequest updateTemplateRequest = getUpdateTemplateRequest( + Collections.emptyList(), + List.of(updateRequest2), + deleteSourceCodeIds, + template.getCategory().getId(), + Collections.emptyList() + ); // when sourceCodeService.updateSourceCodes(updateTemplateRequest, template, thumbnail); @@ -277,10 +289,14 @@ void updateSourceCodes_WhenChangeOrderToLast_AndAddNewCode() { UpdateSourceCodeRequest ordinalUpdateRequest = new UpdateSourceCodeRequest(sourceCode1.getId(), "변경된 제목1", "변경된 내용1", 3); UpdateSourceCodeRequest updateRequest2 = getUpdateSourceCodeRequest(sourceCode2); - CreateSourceCodeRequest createRequest = new CreateSourceCodeRequest("새로운 제목3", "새로운 내용3", sourceCode1.getOrdinal()); - UpdateTemplateRequest updateTemplateRequest = new UpdateTemplateRequest("템플릿 수정", "템플릿 설명", - List.of(createRequest), List.of(ordinalUpdateRequest, updateRequest2), Collections.emptyList(), - template.getCategory().getId(), Collections.emptyList()); + CreateSourceCodeRequest createRequest = new CreateSourceCodeRequest("새로운 제목3", "새로운 내용3", + sourceCode1.getOrdinal()); + UpdateTemplateRequest updateTemplateRequest = getUpdateTemplateRequest( + List.of(createRequest), + List.of(ordinalUpdateRequest, updateRequest2), + Collections.emptyList(), + template.getCategory().getId(), + Collections.emptyList()); // when sourceCodeService.updateSourceCodes(updateTemplateRequest, template, thumbnail); @@ -307,9 +323,13 @@ void updateSourceCodes_WhenDeleteAll() { List deleteSourceCodeIds = List.of(sourceCode1.getId(), sourceCode2.getId()); - UpdateTemplateRequest updateTemplateRequest = new UpdateTemplateRequest("템플릿 수정", "템플릿 설명", - Collections.emptyList(), Collections.emptyList(), deleteSourceCodeIds, - template.getCategory().getId(), Collections.emptyList()); + UpdateTemplateRequest updateTemplateRequest = getUpdateTemplateRequest( + Collections.emptyList(), + Collections.emptyList(), + deleteSourceCodeIds, + template.getCategory().getId(), + Collections.emptyList() + ); // when & then assertThatThrownBy(() -> sourceCodeService.updateSourceCodes(updateTemplateRequest, template, thumbnail)) @@ -327,9 +347,13 @@ void updateSourceCodes_WhenNotContainsAny_UpdateOrDelete() { Thumbnail thumbnail = thumbnailRepository.save(new Thumbnail(template, sourceCode1)); UpdateSourceCodeRequest updateRequest1 = getUpdateSourceCodeRequest(sourceCode1); - UpdateTemplateRequest updateTemplateRequest = new UpdateTemplateRequest("템플릿 수정", "템플릿 설명", - Collections.emptyList(), List.of(updateRequest1), Collections.emptyList(), - template.getCategory().getId(), Collections.emptyList()); + UpdateTemplateRequest updateTemplateRequest = getUpdateTemplateRequest( + Collections.emptyList(), + List.of(updateRequest1), + Collections.emptyList(), + template.getCategory().getId(), + Collections.emptyList() + ); // when & then assertThatThrownBy(() -> sourceCodeService.updateSourceCodes(updateTemplateRequest, template, thumbnail)) @@ -350,9 +374,13 @@ void updateSourceCodes_WhenDuplicateOrder() { UpdateSourceCodeRequest updateRequest1 = getUpdateSourceCodeRequest(sourceCode1); UpdateSourceCodeRequest updateRequest2 = getUpdateSourceCodeRequest(sourceCode2); - UpdateTemplateRequest updateTemplateRequest = new UpdateTemplateRequest("템플릿 수정", "템플릿 설명", - Collections.emptyList(), List.of(updateRequest1, updateRequest2), Collections.emptyList(), - template.getCategory().getId(), Collections.emptyList()); + UpdateTemplateRequest updateTemplateRequest = getUpdateTemplateRequest( + Collections.emptyList(), + List.of(updateRequest1, updateRequest2), + Collections.emptyList(), + template.getCategory().getId(), + Collections.emptyList() + ); // when & then assertThatThrownBy(() -> sourceCodeService.updateSourceCodes(updateTemplateRequest, template, thumbnail)) @@ -368,6 +396,23 @@ private UpdateSourceCodeRequest getUpdateSourceCodeRequest(SourceCode sourceCode sourceCode.getOrdinal() ); } + + private UpdateTemplateRequest getUpdateTemplateRequest( + List createSourceCodes, + List updateSourceCodes, + List deleteSourceCodeIds, + Long categoryId, + List tags + ) { + return new UpdateTemplateRequest( + "템플릿 수정", + "템플릿 설명", + createSourceCodes, + updateSourceCodes, + deleteSourceCodeIds, + categoryId, + tags); + } } @Nested From a018032f9d46a5c129ccab3b6a4515f46be06362 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=98jminkkk=E2=80=99?= <102847513+jminkkk@users.noreply.github.com> Date: Thu, 19 Sep 2024 17:35:56 +0900 Subject: [PATCH 08/12] =?UTF-8?q?test(service):=20=ED=98=84=EC=9E=AC=20?= =?UTF-8?q?=EA=B2=80=EC=A6=9D=ED=95=A0=20=EC=88=98=20=EC=97=86=EB=8A=94=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../template/service/SourceCodeServiceTest.java | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java b/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java index b4d940a09..61d61c91c 100644 --- a/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java +++ b/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java @@ -115,18 +115,6 @@ void getByTemplateAndOrdinal() { () -> assertThat(sourceCodeService.getByTemplateAndOrdinal(template, 1)).isEqualTo(sourceCode1)); } - @Test - @DisplayName("실패: 템플릿에 해당하는 소스 코드가 존재하지 않음") - void getByTemplateAndOrdinal_WhenSourceCodeNotExist() { - // given - Template template = createTemplate(); - - // when & then - assertThatThrownBy(() -> sourceCodeService.getByTemplateAndOrdinal(template, 1)) - .isInstanceOf(CodeZapException.class) - .hasMessage("템플릿에 1번째 소스 코드가 존재하지 않습니다."); - } - @Test @DisplayName("실패: 해당 순서의 소스 코드 없음") void getByTemplateAndOrdinal_WhenOrdinalNotExist() { From 6fc6ed0dbd895035b9bbbdbe0361d258f5816d4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=98jminkkk=E2=80=99?= <102847513+jminkkk@users.noreply.github.com> Date: Fri, 20 Sep 2024 09:25:48 +0900 Subject: [PATCH 09/12] =?UTF-8?q?test(service):=20=EC=86=8C=EC=8A=A4=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=83=9D=EC=84=B1=20=EC=8B=9C=20=EC=88=9C?= =?UTF-8?q?=EC=84=9C=EB=93=A4=EC=9D=B4=20=EC=97=B0=EC=86=8D=EC=A0=81?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EC=95=8A=EC=9D=80=20=EA=B2=BD=EC=9A=B0=20?= =?UTF-8?q?=EC=8B=A4=ED=8C=A8=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../template/service/SourceCodeServiceTest.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java b/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java index 61d61c91c..0330d7d50 100644 --- a/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java +++ b/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java @@ -95,6 +95,21 @@ void createSourceCodes_WhenOrdinalIsNotStart1() { .isInstanceOf(CodeZapException.class) .hasMessage("소스 코드의 순서는 1부터 시작해야 합니다."); } + + @Test + @Disabled("애플리케이션 코드에서 검증 코드 작성 필요") + @DisplayName("실패: 소스 코드의 순서들이 연속적이지 않은 경우") + void createSourceCodes_WhenOrdinalIsNotSort() { + // given + Template template = createTemplate(); + CreateSourceCodeRequest request1 = new CreateSourceCodeRequest("file1.java", "content1", 1); + CreateSourceCodeRequest request2 = new CreateSourceCodeRequest("file2.java", "content2", 3); + + // when & then + assertThatThrownBy(() -> sourceCodeService.createSourceCodes(template, List.of(request1, request2))) + .isInstanceOf(CodeZapException.class) + .hasMessage("소스 코드의 순서는 1부터 시작해야 합니다."); + } } @Nested From c38ec9670b419592cdcf2a09b869c289b09dc6bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=98jminkkk=E2=80=99?= <102847513+jminkkk@users.noreply.github.com> Date: Fri, 20 Sep 2024 09:29:29 +0900 Subject: [PATCH 10/12] =?UTF-8?q?test(service):=20@Nested=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EB=AA=85=20=EB=B3=80=EA=B2=BD=20=EB=B0=8F?= =?UTF-8?q?=20=EB=A9=94=EC=84=9C=EB=93=9C=EB=AA=85=20=EB=AA=85=ED=99=95?= =?UTF-8?q?=ED=95=98=EA=B2=8C=20=EB=B3=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/SourceCodeServiceTest.java | 54 +++++++++---------- 1 file changed, 26 insertions(+), 28 deletions(-) diff --git a/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java b/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java index 0330d7d50..19207eafe 100644 --- a/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java +++ b/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java @@ -41,7 +41,7 @@ class CreateSourceCodes { @DisplayName("성공: 템플릿에 해당하는 소스 코드 저장") void createSourceCodes() { // given - Template template = createTemplate(); + Template template = createSavedTemplate(); CreateSourceCodeRequest request1 = new CreateSourceCodeRequest("file1.java", "content1", 1); CreateSourceCodeRequest request2 = new CreateSourceCodeRequest("file2.java", "content2", 2); @@ -64,7 +64,7 @@ void createSourceCodes() { @DisplayName("실패: 순서 중복된 코드 존재") void createSourceCodes_WhenOrdinalIsDuplicate() { // given - Template template = createTemplate(); + Template template = createSavedTemplate(); int sameOrdinal = 1; CreateSourceCodeRequest request1 = new CreateSourceCodeRequest("file1.java", "content1", sameOrdinal); CreateSourceCodeRequest request2 = new CreateSourceCodeRequest("file2.java", "content2", sameOrdinal); @@ -83,7 +83,7 @@ void createSourceCodes_WhenOrdinalIsDuplicate() { @DisplayName("실패: 순서가 1부터 시작하지 않는 소스 코드") void createSourceCodes_WhenOrdinalIsNotStart1() { // given - Template template = createTemplate(); + Template template = createSavedTemplate(); CreateSourceCodeRequest request1 = new CreateSourceCodeRequest("file1.java", "content1", 0); CreateSourceCodeRequest request2 = new CreateSourceCodeRequest("file2.java", "content2", 1); @@ -101,7 +101,7 @@ void createSourceCodes_WhenOrdinalIsNotStart1() { @DisplayName("실패: 소스 코드의 순서들이 연속적이지 않은 경우") void createSourceCodes_WhenOrdinalIsNotSort() { // given - Template template = createTemplate(); + Template template = createSavedTemplate(); CreateSourceCodeRequest request1 = new CreateSourceCodeRequest("file1.java", "content1", 1); CreateSourceCodeRequest request2 = new CreateSourceCodeRequest("file2.java", "content2", 3); @@ -114,13 +114,13 @@ void createSourceCodes_WhenOrdinalIsNotSort() { @Nested @DisplayName("템플릿과 순서에 해당하는 소스 코드 조회") - class getByTemplateAndOrdinal { + class GetByTemplateAndOrdinal { @Test @DisplayName("성공") void getByTemplateAndOrdinal() { // given - Template template = createTemplate(); + Template template = createSavedTemplate(); SourceCode sourceCode1 = sourceCodeRepository.save(SourceCodeFixture.get(template, 1)); SourceCode sourceCode2 = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); @@ -134,7 +134,7 @@ void getByTemplateAndOrdinal() { @DisplayName("실패: 해당 순서의 소스 코드 없음") void getByTemplateAndOrdinal_WhenOrdinalNotExist() { // given - Template template = createTemplate(); + Template template = createSavedTemplate(); sourceCodeRepository.save(SourceCodeFixture.get(template, 1)); sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); @@ -147,13 +147,13 @@ void getByTemplateAndOrdinal_WhenOrdinalNotExist() { @Nested @DisplayName("템플릿에 해당하는 소스 코드 조회") - class findSourceCodesByTemplate { + class FindSourceCodesByTemplate { @Test @DisplayName("성공") void findSourceCodesByTemplate() { // given - Template template = createTemplate(); + Template template = createSavedTemplate(); SourceCode sourceCode1 = sourceCodeRepository.save(SourceCodeFixture.get(template, 1)); SourceCode sourceCode2 = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); @@ -166,7 +166,7 @@ void findSourceCodesByTemplate() { @DisplayName("성공: 템플릿에 해당하는 소스 코드가 존재하지 않은 경우 빈 리스트 반환") void findSourceCodesByTemplate_WhenSourceCodeNotExist() { // given - Template template = createTemplate(); + Template template = createSavedTemplate(); // when & then assertThat(sourceCodeService.findSourceCodesByTemplate(template)).isEmpty(); @@ -175,13 +175,13 @@ void findSourceCodesByTemplate_WhenSourceCodeNotExist() { @Nested @DisplayName("소스 코드 수정") - class updateSourceCodes { + class UpdateSourceCodes { @Test @DisplayName("성공: 기존 소스 코드 제목, 내용 수정 및 새로운 소스 코드 추가") void updateSourceCodes() { // given - Template template = createTemplate(); + Template template = createSavedTemplate(); SourceCode sourceCode1 = sourceCodeRepository.save(SourceCodeFixture.get(template, 1)); SourceCode sourceCode2 = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); Thumbnail thumbnail = thumbnailRepository.save(new Thumbnail(template, sourceCode1)); @@ -219,7 +219,7 @@ void updateSourceCodes() { @DisplayName("성공: 일부 소스 코드 삭제 및 새로운 소스 코드 추가 시, 삭제된 코드 순서는 앞당겨지고 새로 추가된 소스 코드의 순서는 가장 마지막 순서") void updateSourceCodes_WhenDeleteSomeAndAddNew_ExistingCodesHavePriority() { // given - Template template = createTemplate(); + Template template = createSavedTemplate(); SourceCode sourceCode1 = sourceCodeRepository.save(SourceCodeFixture.get(template, 1)); SourceCode deleteSourceCode = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); Thumbnail thumbnail = thumbnailRepository.save(new Thumbnail(template, sourceCode1)); @@ -240,9 +240,8 @@ void updateSourceCodes_WhenDeleteSomeAndAddNew_ExistingCodesHavePriority() { // then assertAll( () -> assertThat(sourceCodeRepository.countByTemplate(template)).isEqualTo(2), - () -> assertThat( - sourceCodeRepository.fetchByTemplateAndOrdinal(template, 2).getFilename()).isEqualTo( - "새로운 제목1"), + () -> assertThat(sourceCodeRepository.fetchByTemplateAndOrdinal(template, 2).getFilename()) + .isEqualTo("새로운 제목1"), () -> assertThatThrownBy(() -> sourceCodeRepository.fetchById(deleteSourceCode.getId())) .isInstanceOf(CodeZapException.class) .hasMessage("식별자 " + deleteSourceCode.getId() + "에 해당하는 소스 코드가 존재하지 않습니다.") @@ -254,7 +253,7 @@ void updateSourceCodes_WhenDeleteSomeAndAddNew_ExistingCodesHavePriority() { @DisplayName("성공: 썸네일 코드 삭제 시, 새로 순서가 1인 코드가 썸네일으로 등록") void updateSourceCodes_WhenDeleteThumbnailCode_NewThumbnailAssigned() { // given - Template template = createTemplate(); + Template template = createSavedTemplate(); SourceCode thumbnailSourceCode = sourceCodeRepository.save(SourceCodeFixture.get(template, 1)); SourceCode othersourceCode = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); Thumbnail thumbnail = thumbnailRepository.save(new Thumbnail(template, thumbnailSourceCode)); @@ -284,7 +283,7 @@ void updateSourceCodes_WhenDeleteThumbnailCode_NewThumbnailAssigned() { @DisplayName("성공: 소스 코드 추가 & 기존 소스 코드들 순서를 추가된 소스 코드보다 나중으로 변경") void updateSourceCodes_WhenChangeOrderToLast_AndAddNewCode() { // given - Template template = createTemplate(); + Template template = createSavedTemplate(); SourceCode sourceCode1 = sourceCodeRepository.save(SourceCodeFixture.get(template, 1)); SourceCode sourceCode2 = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); Thumbnail thumbnail = thumbnailRepository.save(new Thumbnail(template, sourceCode1)); @@ -308,9 +307,8 @@ void updateSourceCodes_WhenChangeOrderToLast_AndAddNewCode() { assertAll( () -> assertThat(sourceCodeRepository.countByTemplate(template)).isEqualTo(3), () -> assertThat(sourceCodeRepository.fetchById(sourceCode1.getId()).getOrdinal()).isEqualTo(3), - () -> assertThat( - sourceCodeRepository.fetchByTemplateAndOrdinal(template, 1).getFilename()).isEqualTo( - "새로운 제목3") + () -> assertThat(sourceCodeRepository.fetchByTemplateAndOrdinal(template, 1).getFilename()) + .isEqualTo("새로운 제목3") ); } @@ -319,7 +317,7 @@ void updateSourceCodes_WhenChangeOrderToLast_AndAddNewCode() { @DisplayName("실패: 소스 코드 전체 삭제") void updateSourceCodes_WhenDeleteAll() { // given - Template template = createTemplate(); + Template template = createSavedTemplate(); SourceCode sourceCode1 = sourceCodeRepository.save(SourceCodeFixture.get(template, 1)); SourceCode sourceCode2 = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); Thumbnail thumbnail = thumbnailRepository.save(new Thumbnail(template, sourceCode1)); @@ -344,7 +342,7 @@ void updateSourceCodes_WhenDeleteAll() { @DisplayName("실패: 추가가 아닌 모든 소스 코드는 추가 또는 삭제에 있어야 함") void updateSourceCodes_WhenNotContainsAny_UpdateOrDelete() { // given - Template template = createTemplate(); + Template template = createSavedTemplate(); SourceCode sourceCode1 = sourceCodeRepository.save(SourceCodeFixture.get(template, 1)); SourceCode sourceCode2 = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); Thumbnail thumbnail = thumbnailRepository.save(new Thumbnail(template, sourceCode1)); @@ -369,7 +367,7 @@ void updateSourceCodes_WhenNotContainsAny_UpdateOrDelete() { @DisplayName("실패: 변경할 소스 코드의 순서가 중복된 소스 코드의 순서인 경우") void updateSourceCodes_WhenDuplicateOrder() { // given - Template template = createTemplate(); + Template template = createSavedTemplate(); SourceCode sourceCode1 = sourceCodeRepository.save(SourceCodeFixture.get(template, 1)); SourceCode sourceCode2 = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); Thumbnail thumbnail = thumbnailRepository.save(new Thumbnail(template, sourceCode1)); @@ -420,13 +418,13 @@ private UpdateTemplateRequest getUpdateTemplateRequest( @Nested @DisplayName("id에 해당하는 모든 소스 코드 삭제") - class deleteByIds { + class DeleteByIds { @Test @DisplayName("성공") void deleteByIds() { // given - Template template = createTemplate(); + Template template = createSavedTemplate(); sourceCodeRepository.save(SourceCodeFixture.get(template, 1)); sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); @@ -440,7 +438,7 @@ void deleteByIds() { @Test @DisplayName("성공: 소스 코드가 존재하지 않는 경우") void deleteByIds_WhenIdNotExist() { - Template template = createTemplate(); + Template template = createSavedTemplate(); sourceCodeService.deleteByIds(List.of(template.getId())); @@ -448,7 +446,7 @@ void deleteByIds_WhenIdNotExist() { } } - private Template createTemplate() { + private Template createSavedTemplate() { Member member = memberRepository.save(MemberFixture.getFirstMember()); Category category = categoryRepository.save(CategoryFixture.getFirstCategory()); return templateRepository.save(TemplateFixture.get(member, category)); From f61bd4052cde83b1ed75dfbaf72e5e9551d93ad3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=98jminkkk=E2=80=99?= <102847513+jminkkk@users.noreply.github.com> Date: Fri, 20 Sep 2024 11:19:30 +0900 Subject: [PATCH 11/12] =?UTF-8?q?refactor(service):=20=EB=B3=80=EC=88=98?= =?UTF-8?q?=EB=AA=85=EC=9D=84=20=EC=9D=98=EB=AF=B8=EB=A5=BC=20=EC=95=8C=20?= =?UTF-8?q?=EC=88=98=20=EC=9E=88=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../codezap/template/service/SourceCodeServiceTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java b/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java index 19207eafe..899811acf 100644 --- a/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java +++ b/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java @@ -343,11 +343,11 @@ void updateSourceCodes_WhenDeleteAll() { void updateSourceCodes_WhenNotContainsAny_UpdateOrDelete() { // given Template template = createSavedTemplate(); - SourceCode sourceCode1 = sourceCodeRepository.save(SourceCodeFixture.get(template, 1)); - SourceCode sourceCode2 = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); - Thumbnail thumbnail = thumbnailRepository.save(new Thumbnail(template, sourceCode1)); + SourceCode includedSourceCode = sourceCodeRepository.save(SourceCodeFixture.get(template, 1)); + SourceCode notIncludedSourceCode = sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); + Thumbnail thumbnail = thumbnailRepository.save(new Thumbnail(template, includedSourceCode)); - UpdateSourceCodeRequest updateRequest1 = getUpdateSourceCodeRequest(sourceCode1); + UpdateSourceCodeRequest updateRequest1 = getUpdateSourceCodeRequest(includedSourceCode); UpdateTemplateRequest updateTemplateRequest = getUpdateTemplateRequest( Collections.emptyList(), List.of(updateRequest1), From 362125eba17d6b3717ec35e15872aa4bb4460026 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=98jminkkk=E2=80=99?= <102847513+jminkkk@users.noreply.github.com> Date: Fri, 20 Sep 2024 11:29:08 +0900 Subject: [PATCH 12/12] =?UTF-8?q?refactor(service):=20=EC=8B=A4=ED=8C=A8?= =?UTF-8?q?=20=EC=9D=B4=EC=9C=A0=EB=A5=BC=20=EB=8D=94=20=EB=AA=85=ED=99=95?= =?UTF-8?q?=ED=95=98=EA=B2=8C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/codezap/template/service/SourceCodeServiceTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java b/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java index 899811acf..8649edf5c 100644 --- a/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java +++ b/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java @@ -314,7 +314,7 @@ void updateSourceCodes_WhenChangeOrderToLast_AndAddNewCode() { @Test @Disabled("현재는 전체 삭제를 막지 않고 thumbnail으로 인해 DataIntegrityViolationException 발생, 애플리케이션 코드에서 로직 변경 필요") - @DisplayName("실패: 소스 코드 전체 삭제") + @DisplayName("실패: 템플릿의 전체 소스 코드 삭제는 불가능함") void updateSourceCodes_WhenDeleteAll() { // given Template template = createSavedTemplate();