From 42dbbd267bddb8a2af915695e5ad52db3bda07c3 Mon Sep 17 00:00:00 2001 From: jinyoungchoi95 Date: Fri, 29 Oct 2021 17:42:23 +0900 Subject: [PATCH] =?UTF-8?q?[#70]=20feat:=20Article=20=EC=A2=8B=EC=95=84?= =?UTF-8?q?=EC=9A=94,=20=EC=A2=8B=EC=95=84=EC=9A=94=EC=B7=A8=EC=86=8C=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84=20=EB=B0=8F=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../realworld/article/domain/Article.java | 23 +++++++++++ .../realworld/article/domain/ArticleTest.java | 39 +++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/src/main/java/com/study/realworld/article/domain/Article.java b/src/main/java/com/study/realworld/article/domain/Article.java index f824bbb5..5de50f8f 100644 --- a/src/main/java/com/study/realworld/article/domain/Article.java +++ b/src/main/java/com/study/realworld/article/domain/Article.java @@ -16,6 +16,7 @@ import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; +import javax.persistence.Transient; import org.hibernate.annotations.Where; @Entity @@ -34,6 +35,12 @@ public class Article extends BaseTimeEntity { @ManyToOne(fetch = FetchType.LAZY) private User author; + @Embedded + private FavoritingUsers favoritingUsers = new FavoritingUsers(); + + @Transient + private boolean favorited; + protected Article() { } @@ -70,6 +77,10 @@ public User author() { return author; } + public boolean isFavorited() { + return favorited; + } + public void changeTitle(Title title) { articleContent.changeTitle(title); } @@ -82,6 +93,18 @@ public void changeBody(Body body) { articleContent.changeBody(body); } + public boolean updateFavoritedByUser(User user) { + return favorited = favoritingUsers.isFavorite(user); + } + + public void favoritingByUser(User user) { + favoritingUsers.favoritingByUser(user); + } + + public void unfavoritingByUser(User user) { + favoritingUsers.unfavoritingByUser(user); + } + public void deleteArticle() { saveDeletedTime(OffsetDateTime.now()); } diff --git a/src/test/java/com/study/realworld/article/domain/ArticleTest.java b/src/test/java/com/study/realworld/article/domain/ArticleTest.java index 9be77d4e..20fafea6 100644 --- a/src/test/java/com/study/realworld/article/domain/ArticleTest.java +++ b/src/test/java/com/study/realworld/article/domain/ArticleTest.java @@ -2,6 +2,8 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertAll; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; import com.study.realworld.tag.domain.Tag; import com.study.realworld.user.domain.Bio; @@ -106,6 +108,43 @@ void deleteArticleTest() { assertThat(result).isAfter(startTime).isBefore(endTime); } + @Test + @DisplayName("유저가 글을 좋아요할 수 있다.") + void favoritingByUserTest() { + + // given + Article article = Article.from(articleContent, author); + User user = User.Builder() + .email(Email.of("email@email.com")) + .build(); + article.favoritingByUser(user); + + // when + boolean result = article.updateFavoritedByUser(user); + + // then + assertTrue(result); + } + + @Test + @DisplayName("유저가 글을 좋아요 취소할 수 있다.") + void unfavoritingByUserTest() { + + // given + Article article = Article.from(articleContent, author); + User user = User.Builder() + .email(Email.of("email@email.com")) + .build(); + article.favoritingByUser(user); + article.unfavoritingByUser(user); + + // when + boolean result = article.updateFavoritedByUser(user); + + // then + assertFalse(result); + } + @Test @DisplayName("equals hashCode 테스트") void articleEqualsHashCodeTest() {