feat(gift): 관리자 선물함 HTTP 조회를 추가한다
This commit is contained in:
+141
-1
@@ -1,7 +1,10 @@
|
||||
package kr.co.vividnext.sodalive.v2.api.admin.gift.adapter.`in`.web
|
||||
|
||||
import kr.co.vividnext.sodalive.member.Member
|
||||
import kr.co.vividnext.sodalive.member.MemberRepository
|
||||
import kr.co.vividnext.sodalive.support.EmbeddedRedisInitializer
|
||||
import kr.co.vividnext.sodalive.v2.gift.adapter.out.persistence.Gift
|
||||
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
|
||||
@@ -46,12 +49,93 @@ class AdminGiftControllerTest @Autowired constructor(
|
||||
private val categoryRepository: GiftCategoryRepository,
|
||||
private val sizePriceRepository: GiftSizePriceRepository,
|
||||
private val giftRepository: GiftRepository,
|
||||
private val giftDeliveryRepository: GiftDeliveryRepository
|
||||
private val giftDeliveryRepository: GiftDeliveryRepository,
|
||||
private val memberRepository: MemberRepository
|
||||
) {
|
||||
@BeforeEach
|
||||
fun deleteGiftFixtures() {
|
||||
giftDeliveryRepository.deleteAll()
|
||||
giftRepository.deleteAll()
|
||||
categoryRepository.deleteAll()
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("관리자는 전체 선물함 목록을 필터링해 조회한다")
|
||||
fun shouldListAdminGifts() {
|
||||
val (gift, _) = saveAdminGift(
|
||||
applicationNo = "A-1002609300001",
|
||||
status = GiftStatus.TRACKING_REGISTERED,
|
||||
senderNickname = "admin-fan-alpha",
|
||||
recipientNickname = "admin-creator-alpha",
|
||||
withTracking = true
|
||||
)
|
||||
|
||||
mockMvc.perform(
|
||||
get("/api/v2/admin/gifts")
|
||||
.with(user("admin").roles("ADMIN"))
|
||||
.param("status", "TRACKING_REGISTERED")
|
||||
.param("applicationNo", "0001")
|
||||
.param("nickname", "alpha")
|
||||
.param("page", "0")
|
||||
.param("size", "20")
|
||||
)
|
||||
.andExpect(status().isOk)
|
||||
.andExpect(jsonPath("$.success").value(true))
|
||||
.andExpect(jsonPath("$.data.totalCount").value(1))
|
||||
.andExpect(jsonPath("$.data.items[0].applicationNo").value(gift.applicationNo))
|
||||
.andExpect(jsonPath("$.data.items[0].senderNickname").value("admin-fan-alpha"))
|
||||
.andExpect(jsonPath("$.data.items[0].recipientNickname").value("admin-creator-alpha"))
|
||||
.andExpect(jsonPath("$.data.items[0].sizeCode").value("SMALL"))
|
||||
.andExpect(jsonPath("$.data.items[0].sizeName").value("소형"))
|
||||
.andExpect(jsonPath("$.data.items[0].categoryName").value("인형"))
|
||||
.andExpect(jsonPath("$.data.items[0].classificationNumber").value("100"))
|
||||
.andExpect(jsonPath("$.data.items[0].courierCompanyName").value("CJ대한통운"))
|
||||
.andExpect(jsonPath("$.data.items[0].trackingNumber").value("1234567890"))
|
||||
.andExpect(jsonPath("$.data.items[0].status").value("TRACKING_REGISTERED"))
|
||||
.andExpect(jsonPath("$.data.items[0].statusName").value("발송 확인"))
|
||||
.andExpect(jsonPath("$.data.items[0].availableActions[0]").value("ARRIVE_MAILBOX"))
|
||||
.andExpect(jsonPath("$.data.items[0].availableActions[1]").value("MARK_UNDELIVERABLE"))
|
||||
.andExpect(jsonPath("$.data.page").value(0))
|
||||
.andExpect(jsonPath("$.data.size").value(20))
|
||||
.andExpect(jsonPath("$.data.hasNext").value(false))
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("관리자는 선물 상세를 조회하고 미입력 수취인 정보는 빈 문자열로 받는다")
|
||||
fun shouldGetAdminGiftDetail() {
|
||||
saveAdminGift(
|
||||
applicationNo = "A-1002609300002",
|
||||
status = GiftStatus.ARRIVED_AT_MAILBOX,
|
||||
senderNickname = "admin-fan-beta",
|
||||
recipientNickname = "admin-creator-beta",
|
||||
withTracking = true
|
||||
)
|
||||
|
||||
mockMvc.perform(
|
||||
get("/api/v2/admin/gifts/A-1002609300002")
|
||||
.with(user("admin").roles("ADMIN"))
|
||||
)
|
||||
.andExpect(status().isOk)
|
||||
.andExpect(jsonPath("$.success").value(true))
|
||||
.andExpect(jsonPath("$.data.applicationNo").value("A-1002609300002"))
|
||||
.andExpect(jsonPath("$.data.senderInfo.nickname").value("admin-fan-beta"))
|
||||
.andExpect(jsonPath("$.data.senderInfo.name").value("홍길동"))
|
||||
.andExpect(jsonPath("$.data.senderInfo.phoneNumber").value("01012345678"))
|
||||
.andExpect(jsonPath("$.data.senderInfo.address").value("(06234) 서울시 강남구, 101동 1001호"))
|
||||
.andExpect(jsonPath("$.data.recipientInfo.nickname").value("admin-creator-beta"))
|
||||
.andExpect(jsonPath("$.data.recipientInfo.name").value(""))
|
||||
.andExpect(jsonPath("$.data.recipientInfo.phoneNumber").value(""))
|
||||
.andExpect(jsonPath("$.data.recipientInfo.address").value(""))
|
||||
.andExpect(jsonPath("$.data.productInfo.sizeCode").value("SMALL"))
|
||||
.andExpect(jsonPath("$.data.productInfo.sizeName").value("소형"))
|
||||
.andExpect(jsonPath("$.data.productInfo.categoryName").value("인형"))
|
||||
.andExpect(jsonPath("$.data.productInfo.classificationNumber").value("100"))
|
||||
.andExpect(jsonPath("$.data.inboundDeliveryInfo.courierCompanyName").value("CJ대한통운"))
|
||||
.andExpect(jsonPath("$.data.inboundDeliveryInfo.trackingNumber").value("1234567890"))
|
||||
.andExpect(jsonPath("$.data.status").value("ARRIVED_AT_MAILBOX"))
|
||||
.andExpect(jsonPath("$.data.statusName").value("사서함 도착"))
|
||||
.andExpect(jsonPath("$.data.availableActions[0]").value("COMPLETE_INSPECTION"))
|
||||
.andExpect(jsonPath("$.data.availableActions[1]").value("MARK_UNDELIVERABLE"))
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -242,6 +326,62 @@ class AdminGiftControllerTest @Autowired constructor(
|
||||
)
|
||||
}
|
||||
|
||||
private fun saveAdminGift(
|
||||
applicationNo: String,
|
||||
status: GiftStatus,
|
||||
senderNickname: String,
|
||||
recipientNickname: String,
|
||||
withTracking: Boolean
|
||||
): Pair<Gift, GiftDelivery> {
|
||||
val sender = memberRepository.save(Member(password = "password", nickname = senderNickname))
|
||||
val recipient = memberRepository.save(Member(password = "password", nickname = recipientNickname))
|
||||
val category = categoryRepository.save(
|
||||
GiftCategory(
|
||||
classificationNumber = "100",
|
||||
categoryCode = "ADMIN_${applicationNo.takeLast(4)}",
|
||||
name = "인형",
|
||||
receiptCode = "A",
|
||||
representativeItem = "피규어"
|
||||
)
|
||||
)
|
||||
val gift = giftRepository.save(
|
||||
Gift(
|
||||
applicationNo = applicationNo,
|
||||
senderMemberId = sender.id!!,
|
||||
recipientMemberId = recipient.id!!,
|
||||
status = status,
|
||||
sizeCode = GiftSize.SMALL,
|
||||
categoryId = category.id!!,
|
||||
categoryNameSnapshot = category.name,
|
||||
salePriceCan = 80,
|
||||
canUsageId = 10L,
|
||||
senderTermsAgreed = true,
|
||||
senderPrivacyAgreed = true,
|
||||
senderTermsAgreedAt = NOW.minusDays(1),
|
||||
senderPrivacyAgreedAt = NOW.minusDays(1),
|
||||
damageWaiverAgreed = true
|
||||
)
|
||||
)
|
||||
val delivery = giftDeliveryRepository.save(
|
||||
GiftDelivery(
|
||||
giftId = requireNotNull(gift.id),
|
||||
senderName = "홍길동",
|
||||
senderPhoneNumber = "01012345678",
|
||||
senderZipCode = "06234",
|
||||
senderAddress = "서울시 강남구",
|
||||
senderAddressDetail = "101동 1001호",
|
||||
trackingDeadlineAt = NOW.minusDays(1)
|
||||
).apply {
|
||||
if (withTracking) {
|
||||
courierCompanyName = "CJ대한통운"
|
||||
trackingNumber = "1234567890"
|
||||
trackingRegisteredAt = NOW.minusHours(1)
|
||||
}
|
||||
}
|
||||
)
|
||||
return gift to delivery
|
||||
}
|
||||
|
||||
private companion object {
|
||||
const val APPLICATION_NO = "G20260929000001"
|
||||
const val SENDER_MEMBER_ID = 1L
|
||||
|
||||
Reference in New Issue
Block a user