fix(charge): 이벤트 작업 즉시 지급 트랜잭션을 분리한다

This commit is contained in:
2026-05-18 14:52:08 +09:00
parent 9a9fdfe0a1
commit fefb5c24eb
2 changed files with 36 additions and 1 deletions

View File

@@ -10,6 +10,10 @@ import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertNotNull
import org.junit.jupiter.api.Test
import org.mockito.Mockito
import org.springframework.transaction.TransactionDefinition
import org.springframework.transaction.support.AbstractPlatformTransactionManager
import org.springframework.transaction.support.DefaultTransactionStatus
import org.springframework.transaction.support.TransactionTemplate
import java.time.LocalDateTime
class ChargeEventJobServiceTest {
@@ -61,6 +65,19 @@ class ChargeEventJobServiceTest {
Mockito.verify(memberRepository, Mockito.never()).findByIdForUpdate(Mockito.anyLong())
}
@Test
fun shouldUseRequiresNewTransactionForAfterCommitImmediateProcessing() {
val service = ChargeEventJobService(
jobRepository = Mockito.mock(ChargeEventJobRepository::class.java),
chargeRepository = Mockito.mock(ChargeRepository::class.java),
memberRepository = Mockito.mock(MemberRepository::class.java),
transactionManager = RecordingTransactionManager()
)
val transactionTemplate = service.transactionTemplateForTest()
assertEquals(TransactionDefinition.PROPAGATION_REQUIRES_NEW, transactionTemplate.propagationBehavior)
}
private fun job(
id: Long,
memberId: Long = 10L,
@@ -87,3 +104,16 @@ class ChargeEventJobServiceTest {
return Member(password = "pw", nickname = "tester").also { it.id = id }
}
}
private fun ChargeEventJobService.transactionTemplateForTest(): TransactionTemplate {
val field = ChargeEventJobService::class.java.getDeclaredField("transactionTemplate")
field.isAccessible = true
return field.get(this) as TransactionTemplate
}
private class RecordingTransactionManager : AbstractPlatformTransactionManager() {
override fun doGetTransaction(): Any = Any()
override fun doBegin(transaction: Any, definition: TransactionDefinition) {}
override fun doCommit(status: DefaultTransactionStatus) {}
override fun doRollback(status: DefaultTransactionStatus) {}
}