Skip to content

Commit

Permalink
[#160] test: DraftQueryServiceTest 단위테스트로 변경
Browse files Browse the repository at this point in the history
  • Loading branch information
shin-mallang committed Dec 16, 2023
1 parent f4c6a9d commit 46dda13
Showing 1 changed file with 93 additions and 46 deletions.
139 changes: 93 additions & 46 deletions src/test/java/com/mallang/post/query/DraftQueryServiceTest.java
Original file line number Diff line number Diff line change
@@ -1,88 +1,101 @@
package com.mallang.post.query;

import static com.mallang.auth.OauthMemberFixture.깃허브_동훈;
import static com.mallang.auth.OauthMemberFixture.깃허브_말랑;
import static com.mallang.blog.BlogFixture.mallangBlog;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.mock;

import com.mallang.auth.domain.Member;
import com.mallang.auth.query.repository.MemberQueryRepository;
import com.mallang.blog.domain.Blog;
import com.mallang.blog.exception.NoAuthorityBlogException;
import com.mallang.common.ServiceTest;
import com.mallang.post.application.command.CreateDraftCommand;
import com.mallang.post.application.command.CreatePostCategoryCommand;
import com.mallang.blog.query.repository.BlogQueryRepository;
import com.mallang.post.domain.draft.Draft;
import com.mallang.post.exception.NoAuthorityDraftException;
import com.mallang.post.query.repository.DraftQueryRepository;
import com.mallang.post.query.response.DraftDetailResponse;
import com.mallang.post.query.response.DraftListResponse;
import java.util.Collections;
import java.util.List;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.DisplayNameGeneration;
import org.junit.jupiter.api.DisplayNameGenerator.ReplaceUnderscores;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.springframework.test.util.ReflectionTestUtils;

@DisplayName("임시 글 조회 서비스 (DraftQueryService) 은(는)")
@SuppressWarnings("NonAsciiCharacters")
@DisplayNameGeneration(ReplaceUnderscores.class)
class DraftQueryServiceTest extends ServiceTest {
class DraftQueryServiceTest {

private Long memberId;
private Long otherMemberId;
private String blogName;
private Long categoryId;
private Long 임시_글_1_ID;
private Long 임시_글_2_ID;
private final BlogQueryRepository blogQueryRepository = mock(BlogQueryRepository.class);
private final DraftQueryRepository draftQueryRepository = mock(DraftQueryRepository.class);
private final MemberQueryRepository memberQueryRepository = mock(MemberQueryRepository.class);
private final DraftQueryService draftQueryService = new DraftQueryService(
blogQueryRepository,
draftQueryRepository,
memberQueryRepository
);

private final Member member = 깃허브_말랑(1L);
private final Member other = 깃허브_동훈(2L);
private final Blog blog = mallangBlog(member);

@BeforeEach
void setUp() {
memberId = 회원을_저장한다("말랑");
otherMemberId = 회원을_저장한다("other");
blogName = 블로그_개설(memberId, "mallang-log");
categoryId = postCategoryService.create(new CreatePostCategoryCommand(
memberId,
blogName,
"Spring",
null,
null,
null
));
CreateDraftCommand 임시_글_1_요청 = CreateDraftCommand.builder()
.memberId(memberId)
.blogName(blogName)
.title("임시 글 1")
.bodyText("bodyText")
.intro("intro")
.tags(List.of("tag1", "tag2", "tag3"))
.categoryId(categoryId)
.build();
임시_글_1_ID = draftService.create(임시_글_1_요청);

CreateDraftCommand 임시_글_2_요청 = CreateDraftCommand.builder()
.memberId(memberId)
.blogName(blogName)
.title("임시 글 2")
.bodyText("bodyText")
.intro("intro")
.build();
임시_글_2_ID = draftService.create(임시_글_2_요청);
given(memberQueryRepository.getById(member.getId())).willReturn(member);
given(memberQueryRepository.getById(other.getId())).willReturn(other);
given(blogQueryRepository.getByName(blog.getName())).willReturn(blog);
}

@Nested
class 임시_글_목록_조회_시 {

@Test
void 작성한_임시_글_목록을_조회한다() {
// given
Draft draft1 = new Draft(
blog,
"title1",
"intro",
"content",
null,
null,
Collections.emptyList(),
blog.getOwner()
);
Draft draft2 = new Draft(
blog,
"title2",
"intro",
"content",
null,
null,
Collections.emptyList(),
blog.getOwner()
);
given(draftQueryRepository.findAllByBlogOrderByUpdatedDateDesc(blog))
.willReturn(List.of(draft2, draft1));

// when
List<DraftListResponse> result = draftQueryService.findAllByBlog(memberId, blogName);
List<DraftListResponse> result = draftQueryService.findAllByBlog(member.getId(), blog.getName());

// then
assertThat(result)
.extracting(DraftListResponse::title)
.containsExactly("임시 글 2", "임시 글 1");
.containsExactly("title2", "title1");
}

@Test
void 블로그_주인이_아니면_예외() {
// when & then
assertThatThrownBy(() ->
draftQueryService.findAllByBlog(otherMemberId, blogName)
draftQueryService.findAllByBlog(other.getId(), blog.getName())
).isInstanceOf(NoAuthorityBlogException.class);
}
}
Expand All @@ -92,18 +105,52 @@ class 임시_글_단일_조회_시 {

@Test
void 단일_조회한다() {
// given
Draft draft = new Draft(
blog,
"title1",
"intro",
"content",
null,
null,
List.of("1", "2"),
blog.getOwner()
);
ReflectionTestUtils.setField(draft, "id", 1L);
given(draftQueryRepository.getById(draft.getId())).willReturn(draft);

// when
DraftDetailResponse response = draftQueryService.findById(memberId, 임시_글_1_ID);
DraftDetailResponse response = draftQueryService.findById(member.getId(), draft.getId());

// then
assertThat(response.title()).isEqualTo("임시 글 1");
assertThat(response.draftId()).isEqualTo(1L);
assertThat(response.title()).isEqualTo("title1");
assertThat(response.bodyText()).isEqualTo("content");
assertThat(response.postThumbnailImageName()).isNull();
assertThat(response.category().categoryId()).isNull();
assertThat(response.tags().tagContents())
.containsExactly("1", "2");
}

@Test
void 작성자가_아니면_예외() {
// given
Draft draft = new Draft(
blog,
"title1",
"intro",
"content",
null,
null,
List.of("1", "2"),
blog.getOwner()
);
ReflectionTestUtils.setField(draft, "id", 1L);
given(draftQueryRepository.getById(draft.getId())).willReturn(draft);

// when & then
assertThatThrownBy(() ->
draftQueryService.findById(otherMemberId, 임시_글_1_ID)
draftQueryService.findById(other.getId(), draft.getId())
).isInstanceOf(NoAuthorityDraftException.class);
}
}
Expand Down

0 comments on commit 46dda13

Please sign in to comment.