feat(creator-community): 커뮤니티 게시물 고정 기능을 추가한다
This commit is contained in:
@@ -5,6 +5,7 @@ import kr.co.vividnext.sodalive.aws.cloudfront.AudioContentCloudFront
|
||||
import kr.co.vividnext.sodalive.aws.s3.S3Uploader
|
||||
import kr.co.vividnext.sodalive.can.payment.CanPaymentService
|
||||
import kr.co.vividnext.sodalive.can.use.UseCanRepository
|
||||
import kr.co.vividnext.sodalive.common.SodaException
|
||||
import kr.co.vividnext.sodalive.explorer.profile.creatorCommunity.comment.CreatorCommunityComment
|
||||
import kr.co.vividnext.sodalive.explorer.profile.creatorCommunity.comment.CreatorCommunityCommentRepository
|
||||
import kr.co.vividnext.sodalive.explorer.profile.creatorCommunity.like.CreatorCommunityLikeRepository
|
||||
@@ -18,12 +19,18 @@ import kr.co.vividnext.sodalive.member.Member
|
||||
import kr.co.vividnext.sodalive.member.MemberRole
|
||||
import kr.co.vividnext.sodalive.member.block.BlockMemberRepository
|
||||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
import org.junit.jupiter.api.Assertions.assertFalse
|
||||
import org.junit.jupiter.api.Assertions.assertNotNull
|
||||
import org.junit.jupiter.api.Assertions.assertNull
|
||||
import org.junit.jupiter.api.Assertions.assertThrows
|
||||
import org.junit.jupiter.api.Assertions.assertTrue
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.mockito.ArgumentCaptor
|
||||
import org.mockito.Mockito
|
||||
import org.springframework.context.ApplicationEventPublisher
|
||||
import java.time.LocalDateTime
|
||||
import java.util.Optional
|
||||
|
||||
class CreatorCommunityServiceTest {
|
||||
@@ -121,6 +128,68 @@ class CreatorCommunityServiceTest {
|
||||
Mockito.verify(applicationEventPublisher, Mockito.never()).publishEvent(Mockito.any())
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("고정 게시물이 이미 3개면 추가 고정 시 예외가 발생한다")
|
||||
fun shouldThrowExceptionWhenPinCountExceedsLimit() {
|
||||
val creator = createMember(id = 55L, role = MemberRole.CREATOR, nickname = "creator")
|
||||
val post = CreatorCommunity(content = "post", price = 0, isCommentAvailable = true, isAdult = false)
|
||||
post.id = 501L
|
||||
post.member = creator
|
||||
|
||||
Mockito.`when`(repository.findByIdAndMemberId(post.id!!, creator.id!!)).thenReturn(post)
|
||||
Mockito.`when`(repository.countByMemberIdAndIsFixedIsTrueAndIsActiveIsTrue(creator.id!!)).thenReturn(3L)
|
||||
|
||||
val exception = assertThrows(SodaException::class.java) {
|
||||
service.updateCommunityPostFixed(
|
||||
request = UpdateCommunityPostFixedRequest(postId = post.id!!, isFixed = true),
|
||||
member = creator
|
||||
)
|
||||
}
|
||||
|
||||
assertEquals("creator.community.max_fixed_post_count", exception.messageKey)
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("고정 요청 시 3개 미만이면 게시물이 고정된다")
|
||||
fun shouldPinPostWhenFixedPostCountIsUnderLimit() {
|
||||
val creator = createMember(id = 66L, role = MemberRole.CREATOR, nickname = "creator")
|
||||
val post = CreatorCommunity(content = "post", price = 0, isCommentAvailable = true, isAdult = false)
|
||||
post.id = 601L
|
||||
post.member = creator
|
||||
|
||||
Mockito.`when`(repository.findByIdAndMemberId(post.id!!, creator.id!!)).thenReturn(post)
|
||||
Mockito.`when`(repository.countByMemberIdAndIsFixedIsTrueAndIsActiveIsTrue(creator.id!!)).thenReturn(2L)
|
||||
|
||||
service.updateCommunityPostFixed(
|
||||
request = UpdateCommunityPostFixedRequest(postId = post.id!!, isFixed = true),
|
||||
member = creator
|
||||
)
|
||||
|
||||
assertTrue(post.isFixed)
|
||||
assertNotNull(post.fixedAt)
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("고정 해제 요청 시 게시물이 고정 해제된다")
|
||||
fun shouldUnfixPostWhenIsFixedIsFalse() {
|
||||
val creator = createMember(id = 77L, role = MemberRole.CREATOR, nickname = "creator")
|
||||
val post = CreatorCommunity(content = "post", price = 0, isCommentAvailable = true, isAdult = false)
|
||||
post.id = 701L
|
||||
post.member = creator
|
||||
post.isFixed = true
|
||||
post.fixedAt = LocalDateTime.now()
|
||||
|
||||
Mockito.`when`(repository.findByIdAndMemberId(post.id!!, creator.id!!)).thenReturn(post)
|
||||
|
||||
service.updateCommunityPostFixed(
|
||||
request = UpdateCommunityPostFixedRequest(postId = post.id!!, isFixed = false),
|
||||
member = creator
|
||||
)
|
||||
|
||||
assertFalse(post.isFixed)
|
||||
assertNull(post.fixedAt)
|
||||
}
|
||||
|
||||
private fun createMember(id: Long, role: MemberRole, nickname: String): Member {
|
||||
val member = Member(
|
||||
email = "$nickname@test.com",
|
||||
|
||||
Reference in New Issue
Block a user