Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

테스트 시 혼재된 생성 로직과 픽스처 사용을 픽스처 사용으로 통합 #1044

Merged
merged 11 commits into from
Jan 22, 2025
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;

import codezap.category.dto.request.validation.ValidatedDuplicateNameRequest;
import codezap.category.dto.request.validation.ValidatedDuplicateIdRequest;
import codezap.global.validation.ValidationGroups.NotNullGroup;
import codezap.category.dto.request.validation.ValidatedDuplicateNameRequest;
import codezap.global.validation.ValidatedOrdinalRequest;
import codezap.global.validation.ValidationGroups.NotNullGroup;
import io.swagger.v3.oas.annotations.media.Schema;

public record UpdateAllCategoriesRequest(
Expand Down
2 changes: 0 additions & 2 deletions backend/src/main/java/codezap/likes/service/LikesService.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,9 @@

import java.util.List;

import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import codezap.global.pagination.FixedPage;
import codezap.likes.domain.Likes;
import codezap.likes.repository.LikesRepository;
import codezap.member.domain.Member;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,13 @@
import static codezap.template.domain.QTemplateTag.templateTag;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

import org.springframework.stereotype.Repository;

import com.querydsl.jpa.impl.JPAQueryFactory;

import codezap.tag.domain.QTag;
import codezap.tag.domain.Tag;
import codezap.template.domain.QTemplateTag;
import lombok.RequiredArgsConstructor;

@Repository
Expand Down
4 changes: 0 additions & 4 deletions backend/src/main/java/codezap/template/domain/Template.java
Original file line number Diff line number Diff line change
Expand Up @@ -65,10 +65,6 @@ public class Template extends SkipModifiedAtBaseTimeEntity {
@Enumerated(EnumType.STRING)
private Visibility visibility;

public Template(Member member, String title, String description, Category category) {
this(member, title, description, category, Visibility.PUBLIC);
}

public Template(Member member, String title, String description, Category category, Visibility visibility) {
this(null, member, title, description, category, null, 0L, visibility);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@
import jakarta.validation.constraints.Size;

import codezap.global.validation.ByteLength;
import codezap.global.validation.ValidatedOrdinalRequest;
import codezap.global.validation.ValidationGroups.NotNullGroup;
import codezap.global.validation.ValidationGroups.SizeCheckGroup;
import codezap.template.domain.Visibility;
import codezap.global.validation.ValidatedOrdinalRequest;
import codezap.template.dto.request.validation.ValidatedSourceCodesCountRequest;
import io.swagger.v3.oas.annotations.media.Schema;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@
import jakarta.validation.constraints.Size;

import codezap.global.validation.ByteLength;
import codezap.global.validation.ValidatedOrdinalRequest;
import codezap.global.validation.ValidationGroups.NotNullGroup;
import codezap.global.validation.ValidationGroups.SizeCheckGroup;
import codezap.template.domain.Visibility;
import codezap.template.dto.request.validation.ValidatedSourceCodesCountRequest;
import codezap.global.validation.ValidatedOrdinalRequest;
import io.swagger.v3.oas.annotations.media.Schema;

public record UpdateTemplateRequest(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package codezap.template.repository;

import java.util.List;
import java.util.Optional;

import org.springframework.stereotype.Repository;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@

import codezap.global.exception.CodeZapException;
import codezap.global.exception.ErrorCode;
import codezap.global.validation.ValidatedOrdinalRequest;
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.CreateTemplateRequest;
import codezap.template.dto.request.UpdateSourceCodeRequest;
import codezap.template.dto.request.UpdateTemplateRequest;
import codezap.global.validation.ValidatedOrdinalRequest;
import codezap.template.dto.request.validation.ValidatedSourceCodesCountRequest;
import codezap.template.repository.SourceCodeRepository;
import lombok.RequiredArgsConstructor;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import codezap.template.domain.SourceCode;
import codezap.template.domain.Template;
import codezap.template.domain.Thumbnail;
import codezap.template.dto.response.ExploreTemplatesResponse;
import codezap.template.repository.ThumbnailRepository;
import lombok.RequiredArgsConstructor;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import codezap.category.dto.request.UpdateCategoryRequest;
import codezap.category.dto.response.CreateCategoryResponse;
import codezap.category.dto.response.FindAllCategoriesResponse;
import codezap.fixture.CategoryFixture;
import codezap.fixture.MemberFixture;
import codezap.global.MockMvcTest;
import codezap.global.exception.CodeZapException;
Expand Down Expand Up @@ -102,7 +103,7 @@ void createCategoryFailWithLongName() throws Exception {
void findAllCategoriesSuccess() throws Exception {
// given
Member member = MemberFixture.getFirstMember();
List<Category> categories = List.of(new Category("category1", member, 1), new Category("category1", member, 2));
List<Category> categories = CategoryFixture.getList(member, 2);
FindAllCategoriesResponse findAllCategoriesResponse = FindAllCategoriesResponse.from(categories);

when(categoryService.findAllByMemberId(any())).thenReturn(findAllCategoriesResponse);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.junit.jupiter.api.Assertions.assertAll;

import java.util.List;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
Expand Down Expand Up @@ -33,8 +35,8 @@ class FetchById {
@Test
@DisplayName("Id로 카테고리 조회 성공")
void fetchByIdSuccess() {
memberRepository.save(MemberFixture.getFirstMember());
var category = sut.save(CategoryFixture.getFirstCategory());
var member = memberRepository.save(MemberFixture.getFirstMember());
var category = sut.save(CategoryFixture.getDefaultCategory(member));

var actual = sut.fetchById(category.getId());

Expand Down Expand Up @@ -89,10 +91,10 @@ class ExistsByNameAndMember {
void existsByNameAndMemberSuccess() {
var member = new Member("Zappy", "password", "salt");
memberRepository.save(member);
var category1 = new Category("category1", member, 1);
var category1 = CategoryFixture.getDefaultCategory(member);
sut.save(category1);

var actual = sut.existsByNameAndMember("category1", member);
var actual = sut.existsByNameAndMember(category1.getName(), member);

assertThat(actual).isTrue();
}
Expand All @@ -102,7 +104,7 @@ void existsByNameAndMemberSuccess() {
void existsByNameAndMemberFail() {
var member = new Member("Zappy", "password", "salt");
memberRepository.save(member);
var category1 = new Category("category1", member, 1);
var category1 = CategoryFixture.getDefaultCategory(member);
sut.save(category1);

var actual = sut.existsByNameAndMember("category2", member);
Expand All @@ -118,16 +120,11 @@ class CountByMember {
@Test
@DisplayName("회원으로 카테고리 개수 조회 성공")
void countByMemberSuccess() {
var member1 = new Member("Zappy1", "password", "salt");
var member2 = new Member("Zappy2", "password", "salt");
memberRepository.save(member1);
memberRepository.save(member2);
var category1 = new Category("category1", member1, 1);
var category2 = new Category("category2", member1, 2);
var category3 = new Category("category3", member2, 1);
sut.save(category1);
sut.save(category2);
sut.save(category3);
var member1 = memberRepository.save(MemberFixture.getFirstMember());
var member2 = memberRepository.save(MemberFixture.getSecondMember());
sut.save(new Category("category1", member1, 1));
sut.save(new Category("category2", member1, 2));
sut.save(new Category("category3", member2, 1));

long actual = sut.countByMember(member1);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,12 @@
import codezap.category.dto.response.CreateCategoryResponse;
import codezap.category.dto.response.FindAllCategoriesResponse;
import codezap.category.dto.response.FindCategoryResponse;
import codezap.fixture.CategoryFixture;
import codezap.fixture.MemberFixture;
import codezap.fixture.TemplateFixture;
import codezap.global.ServiceTest;
import codezap.global.exception.CodeZapException;
import codezap.member.domain.Member;
import codezap.template.domain.Template;

class CategoryServiceTest extends ServiceTest {

Expand Down Expand Up @@ -142,7 +143,7 @@ class FetchByIdTest {
@DisplayName("성공")
void success() {
Member member = memberRepository.save(MemberFixture.getFirstMember());
Category savedCategory = categoryRepository.save(new Category("categoryName", member, 1));
Category savedCategory = categoryRepository.save(CategoryFixture.getDefaultCategory(member));

Category actual = sut.fetchById(member, savedCategory.getId());

Expand Down Expand Up @@ -171,7 +172,6 @@ class UpdateCategoryTest {
@BeforeEach
void saveDefaultCategory() {
member = memberRepository.save(MemberFixture.getFirstMember());
defaultCategory = categoryRepository.save(Category.createDefaultCategory(member));
}

@Test
Expand All @@ -191,11 +191,9 @@ void updateCategoriesSuccess() {
List.of(category2.getId())));

assertAll(
() -> assertThat(categoryRepository.fetchById(category1.getId()).getName()).isEqualTo(
updateCategoryName),
() -> assertThat(categoryRepository.fetchById(category1.getId()).getName()).isEqualTo(updateCategoryName),
() -> assertThat(categoryRepository.fetchById(category1.getId()).getOrdinal()).isEqualTo(2L),
() -> assertThat(categoryRepository.fetchById(4L).getName()).isEqualTo(
createCategoryName),
() -> assertThat(categoryRepository.fetchById(4L).getName()).isEqualTo(createCategoryName),
() -> assertThat(categoryRepository.fetchById(4L).getOrdinal()).isEqualTo(1L)
);
}
Expand Down Expand Up @@ -228,7 +226,7 @@ void updateCategoriesSuccessWithChangeOdinal() {
@Test
@DisplayName("카테고리 편집 실패: 수정 권한 없음")
void updateCategoriesFailWithUnauthorizedUpdate() {
Category category = categoryRepository.save(new Category("category1", member, 1));
Category category = categoryRepository.save(CategoryFixture.getDefaultCategory(member));
Member otherMember = memberRepository.save(MemberFixture.createFixture("otherMember"));
UpdateCategoryRequest request = new UpdateCategoryRequest(category.getId(), "updateName",
category.getOrdinal());
Expand All @@ -245,7 +243,7 @@ void updateCategoriesFailWithUnauthorizedUpdate() {
@Test
@DisplayName("카테고리 편집 실패: 기본 카테고리 수정")
void updateCategoriesFailWithDefaultCategory() {
categoryRepository.save(new Category("category1", member, 1));
categoryRepository.save(CategoryFixture.getDefaultCategory(member));

UpdateCategoryRequest request = new UpdateCategoryRequest(defaultCategory.getId(), "updateName", 1);

Expand Down Expand Up @@ -295,8 +293,8 @@ void notSavedCategoryId() {
@Test
@DisplayName("카테고리 편집 실패: 중복된 순서")
void duplicatedCategoryOrdinal() {
Category category1 = categoryRepository.save(new Category("category1", member, 1));
Category category2 = categoryRepository.save(new Category("category2", member, 2));
Category category1 = categoryRepository.save(CategoryFixture.getDefaultCategory(member));
Category category2 = categoryRepository.save(CategoryFixture.getAdditionalCategory(member));

CreateCategoryRequest createRequest = new CreateCategoryRequest("category3", category2.getOrdinal());
UpdateCategoryRequest request1 = new UpdateCategoryRequest(category1.getId(), category1.getName(), 2);
Expand All @@ -314,8 +312,8 @@ void duplicatedCategoryOrdinal() {
@Test
@DisplayName("카테고리 편집 실패: 연속되지 않는 순서")
void nonSequentialCategoryOrdinal() {
Category category1 = categoryRepository.save(new Category("category1", member, 1));
Category category2 = categoryRepository.save(new Category("category2", member, 2));
Category category1 = categoryRepository.save(CategoryFixture.getDefaultCategory(member));
Category category2 = categoryRepository.save(CategoryFixture.getAdditionalCategory(member));

CreateCategoryRequest createRequest = new CreateCategoryRequest("category3", 4);
UpdateCategoryRequest request1 = new UpdateCategoryRequest(category1.getId(), category1.getName(), 2);
Expand All @@ -333,7 +331,7 @@ void nonSequentialCategoryOrdinal() {
@Test
@DisplayName("카테고리 편집 실패: 삭제 권한 없음")
void updateCategoriesFailWithUnauthorizedDelete() {
categoryRepository.save(new Category("category1", member, 1));
categoryRepository.save(CategoryFixture.getAdditionalCategory(member));
Member otherMember = memberRepository.save(MemberFixture.createFixture("otherMember"));

assertThatThrownBy(
Expand Down Expand Up @@ -362,8 +360,8 @@ void deleteCategoryFailWithNotExistCategory() {
@Test
@DisplayName("카테고리 편집 실패: 템플릿이 존재하는 카테고리 삭제")
void deleteByIdFailExistsTemplate() {
Category category = categoryRepository.save(new Category("카테고리 1", member, 1));
templateRepository.save(new Template(member, "title", "desciption", category));
Category category = categoryRepository.save(CategoryFixture.getAdditionalCategory(member));
templateRepository.save(TemplateFixture.get(member, category));

assertThatThrownBy(
() -> sut.updateCategories(member, new UpdateAllCategoriesRequest(
Expand All @@ -377,7 +375,7 @@ void deleteByIdFailExistsTemplate() {
@Test
@DisplayName("카테고리 편집 실패: 기본 카테고리 삭제")
void deleteByIdFailDefaultCategory() {
categoryRepository.save(new Category("카테고리 1", member, 1));
categoryRepository.save(CategoryFixture.getDefaultCategory(member));

assertThatThrownBy(
() -> sut.updateCategories(member, new UpdateAllCategoriesRequest(
Expand All @@ -391,7 +389,7 @@ void deleteByIdFailDefaultCategory() {
@Test
@DisplayName("카테고리 편집 실패: 중복된 id 수정 및 삭제")
void deleteByIdFailDuplicatedId() {
Category category = categoryRepository.save(new Category("카테고리 1", member, 1));
Category category = categoryRepository.save(CategoryFixture.getAdditionalCategory(member));
UpdateCategoryRequest request = new UpdateCategoryRequest(category.getId(), category.getName(), 1);

assertThatThrownBy(
Expand Down
19 changes: 13 additions & 6 deletions backend/src/test/java/codezap/fixture/CategoryFixture.java
Original file line number Diff line number Diff line change
@@ -1,18 +1,25 @@
package codezap.fixture;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.IntStream;

import codezap.category.domain.Category;
import codezap.member.domain.Member;

public class CategoryFixture {
public static Category getFirstCategory() {
return new Category(1L, MemberFixture.getFirstMember(), "카테고리 없음", true, 1);
public static Category getDefaultCategory(Member member) {
return new Category(1L, member, "카테고리 없음", true, 1);
}

public static Category getSecondCategory() {
return new Category(2L, MemberFixture.getSecondMember(), "자바", true, 2);
public static Category getAdditionalCategory(Member member) {
return new Category(2L, member, "카테고리", false, 2);
}

public static Category get(Member member) {
return new Category("카테고리", member, 1);
public static List<Category> getList(Member member, int size) {
List<Category> categories = new ArrayList<>();
categories.add(getDefaultCategory(member));
IntStream.range(1, size).forEach(i -> categories.add(new Category("카테고리" + i, member, i + 1)));
return categories;
}
}
10 changes: 10 additions & 0 deletions backend/src/test/java/codezap/fixture/SourceCodeFixture.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package codezap.fixture;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.IntStream;

import codezap.template.domain.SourceCode;
import codezap.template.domain.Template;

Expand All @@ -13,4 +17,10 @@ public static SourceCode get(Template template, int ordinal) {
ordinal
);
}

public static List<SourceCode> getList(Template template, int size) {
List<SourceCode> sourceCodes = new ArrayList<>();
IntStream.range(0, size).forEach(i -> sourceCodes.add(get(template, i)));
return sourceCodes;
}
}
2 changes: 1 addition & 1 deletion backend/src/test/java/codezap/fixture/TemplateFixture.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

public class TemplateFixture {
public static Template get(Member member, Category category) {
return new Template(member, "안녕", "Description 1", category);
return new Template(member, "안녕", "Description 1", category, Visibility.PUBLIC);
}

public static Template getPrivate(Member member, Category category) {
Expand Down
Loading
Loading