增加 transaction service init 测试
diff --git a/payapi/src/test/kotlin/com/supwisdom/dlpay/transaction_service_test.kt b/payapi/src/test/kotlin/com/supwisdom/dlpay/transaction_service_test.kt
new file mode 100644
index 0000000..cfacc16
--- /dev/null
+++ b/payapi/src/test/kotlin/com/supwisdom/dlpay/transaction_service_test.kt
@@ -0,0 +1,131 @@
+package com.supwisdom.dlpay
+
+import com.supwisdom.dlpay.api.TransactionBuilder
+import com.supwisdom.dlpay.api.dao.TransactionMainDao
+import com.supwisdom.dlpay.api.domain.TAccount
+import com.supwisdom.dlpay.api.domain.TSourceType
+import com.supwisdom.dlpay.api.domain.TTransactionMain
+import com.supwisdom.dlpay.api.repositories.AccountService
+import com.supwisdom.dlpay.api.service.AccountUtilServcie
+import com.supwisdom.dlpay.api.service.SourceTypeService
+import com.supwisdom.dlpay.api.service.TransactionService
+import com.supwisdom.dlpay.api.service.impl.TransactionServiceImpl
+import com.supwisdom.dlpay.framework.data.SystemDateTime
+import com.supwisdom.dlpay.framework.domain.TShopacc
+import com.supwisdom.dlpay.framework.service.SystemUtilService
+import com.supwisdom.dlpay.framework.util.Subject
+import com.supwisdom.dlpay.framework.util.TradeCode
+import com.supwisdom.dlpay.framework.util.TradeDict
+import io.mockk.MockKAnnotations
+import io.mockk.every
+import io.mockk.impl.annotations.InjectMockKs
+import io.mockk.impl.annotations.MockK
+import io.mockk.junit5.MockKExtension
+import io.mockk.mockk
+import io.mockk.verify
+import org.hamcrest.CoreMatchers.notNullValue
+import org.hamcrest.MatcherAssert.assertThat
+import org.hamcrest.Matchers.equalTo
+import org.junit.jupiter.api.Test
+import org.junit.jupiter.api.extension.ExtendWith
+import java.sql.Timestamp
+import java.util.*
+
+@ExtendWith(MockKExtension::class)
+class TransactionServcieTest {
+ companion object {
+ const val OutId = "1000"
+ const val OutTransNo = "12"
+ const val OperatorID = "3454"
+ const val OperatorType = "operator"
+ const val Refno = "20191216103421000001"
+ const val Accdate = "20191216"
+ }
+
+ @InjectMockKs
+ var transactionService: TransactionService = TransactionServiceImpl()
+
+ @MockK
+ private lateinit var transactionMainDao: TransactionMainDao
+
+ @MockK
+ private lateinit var accountService: AccountService
+
+ @MockK
+ private lateinit var accountUtilService: AccountUtilServcie
+
+ @MockK
+ private lateinit var systemUtilService: SystemUtilService
+
+ @MockK
+ private lateinit var sourceTypeService: SourceTypeService
+
+
+ init {
+ MockKAnnotations.init(this)
+ }
+
+ private fun testAccount(): TAccount {
+ return TAccount().apply {
+ accno = "1200203303"
+ accname = "test"
+ transStatus = TradeDict.STATUS_NORMAL
+ }
+ }
+
+ private fun testShop(): TShopacc {
+ return TShopacc().apply {
+ shopaccno = "4001"
+ shopid = 1
+ shopname = "test shop"
+ status = TradeDict.STATUS_NORMAL
+ }
+ }
+
+ @Test
+ fun testTransaction() {
+ val builder = TransactionBuilder()
+ val person = testAccount()
+ val shop = testShop()
+ val amount = 1600
+ builder.apply {
+ setTransInfo("20191205", "134521", TradeCode.TRANSCODE_CARD_BIZ, "balance")
+ setOutTransInfo(OutId, OutTransNo)
+ operator(OperatorID, OperatorType)
+ dtltype = "restaurant"
+ }.person(person).apply {
+ setOpposite(shop.shopaccno, shop.shopname)
+ setAmount(amount / 100.0, TradeDict.TRADE_FLAG_OUT)
+ }.and().shop(shop).apply {
+ setOpposite(person.accno, person.accname)
+ setAmount(amount / 100.0, TradeDict.TRADE_FLAG_IN)
+ }.and()
+ .addDebitCreditRecord(person.accno, Subject.SUBJNO_PERSONAL_DEPOSIT,
+ shop.shopaccno, Subject.SUBJNO_MACHANT_INCOME,
+ amount / 100.0, "消费")
+
+ every { systemUtilService.refno } returns Refno
+ every { systemUtilService.accdate } returns Accdate
+ every { sourceTypeService.getBySourceType(builder.sourceType) } returns TSourceType().apply {
+ sourceType = "balance"
+ checkable = false
+ }
+ every { systemUtilService.sysdatetime } returns mockk {
+ every { hostdate } returns "20191216"
+ every { hosttime } returns "131725"
+ every { hostdatetime } returns "20191216131725"
+ every { sysdate } returns Timestamp(System.currentTimeMillis())
+ }
+
+ every { transactionMainDao.save(any<TTransactionMain>()) } answers {
+ arg(0)
+ }
+
+ val transaction = transactionService.init(builder)
+ assertThat(transaction.refno, equalTo(Refno))
+ assertThat(transaction.accdate, equalTo(Accdate))
+ verify(exactly = 1) { systemUtilService.refno }
+ verify(atLeast = 1) { systemUtilService.accdate }
+ verify(exactly = 1) { sourceTypeService.getBySourceType(builder.sourceType) }
+ }
+}
\ No newline at end of file