From 2d30a2b8c9d23b568acedec5c74977dfb09e566f Mon Sep 17 00:00:00 2001 From: kms Date: Thu, 10 Nov 2022 22:28:45 +0900 Subject: [PATCH] feat : `List Articles` and `Feed Article` Service Test Code Implement. --- .../article/service/ArticleServiceImpl.java | 8 +- .../service/ArticleServiceImplTest.java | 136 +++++++++++++++++- 2 files changed, 135 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/io/realworld/domain/aggregate/article/service/ArticleServiceImpl.java b/src/main/java/com/io/realworld/domain/aggregate/article/service/ArticleServiceImpl.java index 3aeadeb..62dc028 100644 --- a/src/main/java/com/io/realworld/domain/aggregate/article/service/ArticleServiceImpl.java +++ b/src/main/java/com/io/realworld/domain/aggregate/article/service/ArticleServiceImpl.java @@ -52,13 +52,9 @@ public class ArticleServiceImpl implements ArticleService { if (articleParam.getTag() != null) { articles = articleRepository.findByTag(articleParam.getTag(), pageable); - } - - if(articleParam.getAuthor() != null){ + }else if(articleParam.getAuthor() != null){ articles = articleRepository.findByAuthorName(articleParam.getAuthor(), pageable); - } - - if(articleParam.getFavorited() != null){ + }else if(articleParam.getFavorited() != null){ articles = articleRepository.findByFavoritedUser(articleParam.getFavorited(), pageable); } diff --git a/src/test/java/com/io/realworld/domain/aggregate/article/service/ArticleServiceImplTest.java b/src/test/java/com/io/realworld/domain/aggregate/article/service/ArticleServiceImplTest.java index 439383d..b3f53cf 100644 --- a/src/test/java/com/io/realworld/domain/aggregate/article/service/ArticleServiceImplTest.java +++ b/src/test/java/com/io/realworld/domain/aggregate/article/service/ArticleServiceImplTest.java @@ -1,32 +1,36 @@ package com.io.realworld.domain.aggregate.article.service; -import com.io.realworld.domain.aggregate.article.dto.ArticleResponse; -import com.io.realworld.domain.aggregate.article.dto.ArticleUpdate; -import com.io.realworld.domain.aggregate.article.dto.Articledto; +import com.io.realworld.domain.aggregate.article.dto.*; import com.io.realworld.domain.aggregate.article.entity.Article; import com.io.realworld.domain.aggregate.article.entity.Favorite; import com.io.realworld.domain.aggregate.article.repository.ArticleRepository; import com.io.realworld.domain.aggregate.article.repository.FavoriteRepository; import com.io.realworld.domain.aggregate.profile.dto.ProfileResponse; +import com.io.realworld.domain.aggregate.profile.entity.Follow; +import com.io.realworld.domain.aggregate.profile.repository.ProfileRepository; import com.io.realworld.domain.aggregate.profile.service.ProfileService; +import com.io.realworld.domain.aggregate.tag.entity.Tag; import com.io.realworld.domain.aggregate.tag.service.TagService; import com.io.realworld.domain.aggregate.user.dto.UserAuth; import com.io.realworld.domain.aggregate.user.entity.User; import com.io.realworld.domain.aggregate.user.repository.UserRepository; import com.io.realworld.exception.CustomException; import com.io.realworld.exception.Error; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.data.domain.Pageable; import org.springframework.http.HttpStatus; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -36,6 +40,7 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.when; + @ExtendWith(MockitoExtension.class) class ArticleServiceImplTest { @@ -57,6 +62,72 @@ class ArticleServiceImplTest { @Mock ProfileService profileService; + @Mock + ProfileRepository profileRepository; + + + @Test + @DisplayName("sv: 게시글들 가져오기 - tag가 일치") + void getArticlesTag(){ + UserAuth userAuth = UserAuth.builder().id(1L).username("kms").build(); + List
articles = new ArrayList
(){{ + add(articlesListGet().get(0)); + }}; + ArticleParam articleParam = new ArticleParam(); + articleParam.setTag("blogTag"); + + when(profileService.getProfile(eq(userAuth), any(String.class))).thenReturn(ProfileResponse.builder().username(articles.get(0).getAuthor().getUsername()).build()); + when(articleRepository.findByTag(eq(articleParam.getTag()),any(Pageable.class))).thenReturn(articles); + List articleResponses = articleService.getArticles(userAuth, articleParam); + + assertThat(articleResponses.get(0).getTagList().get(0)).isEqualTo(articleParam.getTag()); + } + + @Test + @DisplayName("sv: 게시글들 가져오기 - author가 일치") + void getArticlesAuthor(){ + UserAuth userAuth = UserAuth.builder().id(1L).username("kms").build(); + + ArticleParam articleParam = new ArticleParam(); + articleParam.setAuthor("jyb"); + + List
articles = articlesListGet().stream().filter(article -> { + return article.getAuthor().getUsername().equals(articleParam.getAuthor()); + }).collect(Collectors.toList()); + + + when(profileService.getProfile(eq(userAuth), any(String.class))).thenReturn(ProfileResponse.builder().username(articles.get(0).getAuthor().getUsername()).build()); + when(articleRepository.findByAuthorName(eq(articleParam.getAuthor()),any(Pageable.class))).thenReturn(articles); + List articleResponses = articleService.getArticles(userAuth, articleParam); + + assertThat(articleResponses.get(0).getAuthor().getUsername()).isEqualTo(articleParam.getAuthor()); + } + + @Test + @DisplayName("sv: 피드 게시글 가져오기 ") + void getFeed(){ + UserAuth userAuth = UserAuth.builder().id(1L).username("kms").build(); + + FeedParam feedParam = new FeedParam(); + + Article article = articlesListGet().get(2); + List
articles = new ArrayList<>(){{ + add(article); + }}; + + List follows = new ArrayList(){{ + add(Follow.builder().followee(User.builder().username("kms").build()).follower(User.builder().username("eden").build()).build()); + }}; + + when(profileService.getProfile(eq(userAuth), any(String.class))).thenReturn(ProfileResponse.builder().username(articles.get(0).getAuthor().getUsername()).build()); + when(profileRepository.findByFollowerId(any(Long.class))).thenReturn(follows); + when(articleRepository.findByAuthorName(any(String.class),any(Pageable.class))).thenReturn(articles); + List articleResponses = articleService.getFeed(userAuth, feedParam); + + assertThat(articleResponses.get(0).getAuthor().getUsername()).isEqualTo(follows.get(0).getFollower().getUsername()); + } + + @Test @DisplayName("sv: 게시글 만들기 성공") void createArticle() { @@ -397,6 +468,65 @@ class ArticleServiceImplTest { } + List
articlesListGet(){ + List blogTags = new ArrayList(){{ + add(Tag.builder().tagName("blogTag").build()); + add(Tag.builder().tagName("tutorial").build()); + }}; + List dietTags = new ArrayList(){{ + add(Tag.builder().tagName("dietTag").build()); + add(Tag.builder().tagName("tutorial").build()); + }}; + Article blogPost = Article.builder() + .id(1L) + .slug("post-my-blog") + .author(User.builder() + .username("kms") + .image("blog image") + .bio("blog bio") + .email("kms@naver.com").build()) + .body("blog Post very ez") + .tagList(blogTags) + .description("blog create") + .title("Post My Blog") + .build(); + + Article dietPost = Article.builder() + .id(2L) + .slug("post-week-diet") + .author(User.builder() + .username("jyb") + .image("diet image") + .bio("diet bio") + .email("jyb@naver.com").build()) + .body("diet very hard") + .tagList(dietTags) + .description("blog create") + .title("Post week diet") + .build(); + + Article codePost = Article.builder() + .id(3L) + .slug("post-coding-test") + .author(User.builder() + .username("eden") + .image("programmer") + .bio("s") + .email("tesla@google.com").build()) + .body("Tesla very nice") + .tagList(dietTags) + .description("realworldApp") + .title("post Coding Test") + .build(); + + List
articles = new ArrayList
(){{ + add(blogPost); + add(dietPost); + add(codePost); + }}; + return articles; + } +