fix(charge): 이벤트 작업 즉시 지급 트랜잭션을 분리한다
This commit is contained in:
@@ -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) {}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user