feat(gift): 보낸 선물 상세에 받을 주소를 노출한다
This commit is contained in:
+45
@@ -14,6 +14,8 @@ import kr.co.vividnext.sodalive.v2.gift.adapter.out.persistence.GiftCategory
|
||||
import kr.co.vividnext.sodalive.v2.gift.adapter.out.persistence.GiftCategoryRepository
|
||||
import kr.co.vividnext.sodalive.v2.gift.adapter.out.persistence.GiftDelivery
|
||||
import kr.co.vividnext.sodalive.v2.gift.adapter.out.persistence.GiftDeliveryRepository
|
||||
import kr.co.vividnext.sodalive.v2.gift.adapter.out.persistence.GiftMailbox
|
||||
import kr.co.vividnext.sodalive.v2.gift.adapter.out.persistence.GiftMailboxRepository
|
||||
import kr.co.vividnext.sodalive.v2.gift.adapter.out.persistence.GiftRepository
|
||||
import kr.co.vividnext.sodalive.v2.gift.adapter.out.persistence.GiftSizePrice
|
||||
import kr.co.vividnext.sodalive.v2.gift.adapter.out.persistence.GiftSizePriceRepository
|
||||
@@ -60,6 +62,7 @@ class GiftControllerTest @Autowired constructor(
|
||||
private val giftDeliveryRepository: GiftDeliveryRepository,
|
||||
private val sizePriceRepository: GiftSizePriceRepository,
|
||||
private val memberRepository: MemberRepository,
|
||||
private val giftMailboxRepository: GiftMailboxRepository,
|
||||
private val objectMapper: ObjectMapper
|
||||
) {
|
||||
@MockBean
|
||||
@@ -190,6 +193,48 @@ class GiftControllerTest @Autowired constructor(
|
||||
.andExpect(jsonPath("$.data.statusTimeline[1].occurredAt").value("2026-09-30T12:00:00Z"))
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("발신자는 운송장 등록 전 선물 상세에서 받을 주소를 조회한다")
|
||||
fun shouldGetMailboxForSentReceivedGiftDetail() {
|
||||
val sender = memberRepository.save(Member(password = "password", nickname = "fan"))
|
||||
val recipient = memberRepository.save(Member(password = "password", nickname = "creator"))
|
||||
val gift = saveGift(
|
||||
applicationNo = "G-CONTROLLER-MAILBOX",
|
||||
senderMemberId = sender.id!!,
|
||||
recipientMemberId = recipient.id!!,
|
||||
status = GiftStatus.RECEIVED
|
||||
)
|
||||
giftDeliveryRepository.save(
|
||||
GiftDelivery(
|
||||
giftId = gift.id!!,
|
||||
senderName = "홍길동",
|
||||
senderPhoneNumber = "01012345678",
|
||||
senderZipCode = "06234",
|
||||
senderAddress = "서울시 강남구",
|
||||
trackingDeadlineAt = LocalDateTime.of(2026, 10, 2, 12, 0)
|
||||
)
|
||||
)
|
||||
giftMailboxRepository.save(
|
||||
GiftMailbox(
|
||||
name = "소다라이브 선물 담당자",
|
||||
phoneNumber = "01012345678",
|
||||
zipCode = "06234",
|
||||
address = "서울시 강남구",
|
||||
addressDetail = "3층 선물 접수처"
|
||||
)
|
||||
)
|
||||
|
||||
mockMvc.perform(
|
||||
get("/api/v2/gifts/{applicationNo}", gift.applicationNo)
|
||||
.with(user(MemberAdapter(sender)))
|
||||
)
|
||||
.andExpect(status().isOk)
|
||||
.andExpect(jsonPath("$.success").value(true))
|
||||
.andExpect(jsonPath("$.data.mailbox.name").value("소다라이브 선물 담당자"))
|
||||
.andExpect(jsonPath("$.data.mailbox.phoneNumber").value("01012345678"))
|
||||
.andExpect(jsonPath("$.data.mailbox.address").value("(06234) 서울시 강남구, 3층 선물 접수처"))
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("팬은 POST /api/v2/gifts로 선물을 신청하고 접수 결과를 받는다")
|
||||
fun shouldRegisterGift() {
|
||||
|
||||
+64
-1
@@ -9,6 +9,8 @@ import kr.co.vividnext.sodalive.v2.gift.adapter.out.persistence.GiftCategory
|
||||
import kr.co.vividnext.sodalive.v2.gift.adapter.out.persistence.GiftCategoryRepository
|
||||
import kr.co.vividnext.sodalive.v2.gift.adapter.out.persistence.GiftDelivery
|
||||
import kr.co.vividnext.sodalive.v2.gift.adapter.out.persistence.GiftDeliveryRepository
|
||||
import kr.co.vividnext.sodalive.v2.gift.adapter.out.persistence.GiftMailbox
|
||||
import kr.co.vividnext.sodalive.v2.gift.adapter.out.persistence.GiftMailboxRepository
|
||||
import kr.co.vividnext.sodalive.v2.gift.adapter.out.persistence.GiftRepository
|
||||
import kr.co.vividnext.sodalive.v2.gift.adapter.out.persistence.GiftSizePrice
|
||||
import kr.co.vividnext.sodalive.v2.gift.adapter.out.persistence.GiftSizePriceRepository
|
||||
@@ -39,7 +41,8 @@ class GiftQueryServiceTest @Autowired constructor(
|
||||
private val sizePriceRepository: GiftSizePriceRepository,
|
||||
private val giftRepository: GiftRepository,
|
||||
private val deliveryRepository: GiftDeliveryRepository,
|
||||
private val memberRepository: MemberRepository
|
||||
private val memberRepository: MemberRepository,
|
||||
private val giftMailboxRepository: GiftMailboxRepository
|
||||
) {
|
||||
@Test
|
||||
fun `폼 옵션은 활성 카테고리와 활성 사이즈 가격만 반환한다`() {
|
||||
@@ -230,6 +233,65 @@ class GiftQueryServiceTest @Autowired constructor(
|
||||
assertNull(result.statusTimeline[1].occurredAt)
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("보낸 선물의 운송장 등록 전 상세만 받을 주소를 반환한다")
|
||||
fun shouldReturnMailboxOnlyForSentReceivedGiftDetail() {
|
||||
val sender = saveMember("fan")
|
||||
val recipient = saveMember("creator")
|
||||
val receivedGift = saveGift(
|
||||
applicationNo = "G-MAILBOX-RECEIVED",
|
||||
senderMemberId = sender.id!!,
|
||||
recipientMemberId = recipient.id!!,
|
||||
status = GiftStatus.RECEIVED
|
||||
)
|
||||
saveDelivery(receivedGift)
|
||||
val trackingGift = saveGift(
|
||||
applicationNo = "G-MAILBOX-TRACKING",
|
||||
senderMemberId = sender.id!!,
|
||||
recipientMemberId = recipient.id!!,
|
||||
status = GiftStatus.TRACKING_REGISTERED
|
||||
)
|
||||
saveDelivery(trackingGift).trackingRegisteredAt = NOW
|
||||
giftMailboxRepository.save(
|
||||
GiftMailbox(
|
||||
name = "소다라이브 선물 담당자",
|
||||
phoneNumber = "01012345678",
|
||||
zipCode = "06234",
|
||||
address = "서울시 강남구",
|
||||
addressDetail = "3층 선물 접수처"
|
||||
)
|
||||
)
|
||||
val service = queryService()
|
||||
|
||||
val receivedResult = service.getGiftDetail(sender.id!!, receivedGift.applicationNo)
|
||||
val trackingSenderResult = service.getGiftDetail(sender.id!!, trackingGift.applicationNo)
|
||||
val trackingRecipientResult = service.getGiftDetail(recipient.id!!, trackingGift.applicationNo)
|
||||
|
||||
assertEquals("소다라이브 선물 담당자", receivedResult.mailbox?.name)
|
||||
assertEquals("01012345678", receivedResult.mailbox?.phoneNumber)
|
||||
assertEquals("(06234) 서울시 강남구, 3층 선물 접수처", receivedResult.mailbox?.address)
|
||||
assertNull(trackingSenderResult.mailbox)
|
||||
assertNull(trackingRecipientResult.mailbox)
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("받을 주소가 없으면 운송장 등록 전 상세도 mailbox가 null이다")
|
||||
fun shouldReturnNullMailboxWhenMailboxNotConfigured() {
|
||||
val sender = saveMember("fan")
|
||||
val recipient = saveMember("creator")
|
||||
val gift = saveGift(
|
||||
applicationNo = "G-MAILBOX-EMPTY",
|
||||
senderMemberId = sender.id!!,
|
||||
recipientMemberId = recipient.id!!,
|
||||
status = GiftStatus.RECEIVED
|
||||
)
|
||||
saveDelivery(gift)
|
||||
|
||||
val result = queryService().getGiftDetail(sender.id!!, gift.applicationNo)
|
||||
|
||||
assertNull(result.mailbox)
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("수신자는 노출된 선물 상세에서 자신의 배송지와 발신자 닉네임만 조회한다")
|
||||
fun shouldReturnReceivedGiftDetailWithoutSenderInformation() {
|
||||
@@ -450,6 +512,7 @@ class GiftQueryServiceTest @Autowired constructor(
|
||||
giftRepository,
|
||||
deliveryRepository,
|
||||
memberRepository,
|
||||
giftMailboxRepository,
|
||||
"https://cdn.test"
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user