fix(agent-settlement): 스냅샷 finalize 집계를 단일 누적으로 정리한다
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package kr.co.vividnext.sodalive.admin.partner.agent.settlement
|
||||
|
||||
import kr.co.vividnext.sodalive.common.SodaException
|
||||
import kr.co.vividnext.sodalive.member.Member
|
||||
import kr.co.vividnext.sodalive.member.MemberRepository
|
||||
import kr.co.vividnext.sodalive.member.MemberRole
|
||||
@@ -13,6 +14,7 @@ import kr.co.vividnext.sodalive.partner.agent.settlement.snapshot.AgentSettlemen
|
||||
import kr.co.vividnext.sodalive.partner.agent.settlement.snapshot.FinalizeAgentSettlementSnapshotRequest
|
||||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
import org.junit.jupiter.api.Assertions.assertNotNull
|
||||
import org.junit.jupiter.api.Assertions.assertThrows
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import org.junit.jupiter.api.Test
|
||||
@@ -236,4 +238,68 @@ class AdminAgentSettlementSnapshotServiceTest {
|
||||
Mockito.verifyNoInteractions(calculateRepository)
|
||||
Mockito.verifyNoInteractions(memberRepository)
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("관리자 finalize는 대상 에이전트 회원이 없으면 실패한다")
|
||||
fun shouldThrowWhenFinalizingSnapshotsForMissingAgent() {
|
||||
val request = FinalizeAgentSettlementSnapshotRequest(
|
||||
agentId = 7L,
|
||||
settlementType = AgentSettlementSnapshotType.LIVE,
|
||||
startDateStr = "2026-02-20",
|
||||
endDateStr = "2026-02-21"
|
||||
)
|
||||
val (startDate, endDate) = request.toDateRange()
|
||||
|
||||
Mockito.`when`(
|
||||
snapshotRepository.existsByPeriodStartAndPeriodEndAndSettlementTypeAndAgentId(
|
||||
startDate,
|
||||
endDate,
|
||||
AgentSettlementSnapshotType.LIVE,
|
||||
7L
|
||||
)
|
||||
).thenReturn(false)
|
||||
Mockito.`when`(memberRepository.findById(7L)).thenReturn(Optional.empty())
|
||||
|
||||
val exception = assertThrows(SodaException::class.java) {
|
||||
service.finalizeSnapshots(request, finalizedByMemberId = 99L)
|
||||
}
|
||||
|
||||
assertEquals("partner.agent.ratio.agent_not_found", exception.messageKey)
|
||||
Mockito.verifyNoInteractions(calculateRepository)
|
||||
Mockito.verify(snapshotRepository, Mockito.never()).saveAll(Mockito.anyList())
|
||||
Mockito.verifyNoInteractions(sourceDetailRepository)
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("관리자 finalize는 대상 회원이 AGENT 역할이 아니면 실패한다")
|
||||
fun shouldThrowWhenFinalizingSnapshotsForNonAgentMember() {
|
||||
val request = FinalizeAgentSettlementSnapshotRequest(
|
||||
agentId = 7L,
|
||||
settlementType = AgentSettlementSnapshotType.LIVE,
|
||||
startDateStr = "2026-02-20",
|
||||
endDateStr = "2026-02-21"
|
||||
)
|
||||
val invalidAgent = Member(password = "password", nickname = "user-a", role = MemberRole.USER)
|
||||
invalidAgent.id = 7L
|
||||
val (startDate, endDate) = request.toDateRange()
|
||||
|
||||
Mockito.`when`(
|
||||
snapshotRepository.existsByPeriodStartAndPeriodEndAndSettlementTypeAndAgentId(
|
||||
startDate,
|
||||
endDate,
|
||||
AgentSettlementSnapshotType.LIVE,
|
||||
7L
|
||||
)
|
||||
).thenReturn(false)
|
||||
Mockito.`when`(memberRepository.findById(7L)).thenReturn(Optional.of(invalidAgent))
|
||||
|
||||
val exception = assertThrows(SodaException::class.java) {
|
||||
service.finalizeSnapshots(request, finalizedByMemberId = 99L)
|
||||
}
|
||||
|
||||
assertEquals("partner.agent.ratio.invalid_agent", exception.messageKey)
|
||||
Mockito.verifyNoInteractions(calculateRepository)
|
||||
Mockito.verify(snapshotRepository, Mockito.never()).saveAll(Mockito.anyList())
|
||||
Mockito.verifyNoInteractions(sourceDetailRepository)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user