diff options
Diffstat (limited to 'nexus/src/test/kotlin/DatabaseTest.kt')
-rw-r--r-- | nexus/src/test/kotlin/DatabaseTest.kt | 115 |
1 files changed, 45 insertions, 70 deletions
diff --git a/nexus/src/test/kotlin/DatabaseTest.kt b/nexus/src/test/kotlin/DatabaseTest.kt index c9d70ae0..6809c285 100644 --- a/nexus/src/test/kotlin/DatabaseTest.kt +++ b/nexus/src/test/kotlin/DatabaseTest.kt @@ -162,85 +162,60 @@ class PaymentInitiationsTest { db.initiated.reversal("PAY5", "status reversal") } - // Tests creation, unique constraint violation handling, and - // retrieving only one non-submitted payment. @Test - fun paymentInitiation() = setup { db, _ -> - val beEmpty = db.initiated.submittableGet("KUDOS") // expect no records. - assertEquals(beEmpty.size, 0) - val initPay = InitiatedPayment( - id = -1, - amount = TalerAmount(44, 0, "KUDOS"), - creditPaytoUri = "payto://iban/CH9300762011623852957?receiver-name=Test", - wireTransferSubject = "test", - requestUid = "unique", - initiationTime = Instant.now() - ) - assertEquals(db.initiated.create(initPay), PaymentInitiationResult.SUCCESS) - assertEquals(db.initiated.create(initPay), PaymentInitiationResult.REQUEST_UID_REUSE) - val haveOne = db.initiated.submittableGet("KUDOS") - assertTrue("Size ${haveOne.size} instead of 1") { - haveOne.size == 1 - && haveOne.first().id == 1L - && haveOne.first().requestUid == "unique" + fun submittable() = setup { db, _ -> + for (i in 0..5) { + assertEquals( + PaymentInitiationResult.SUCCESS, + db.initiated.create(genInitPay(requestUid = "PAY$i")) + ) } - } - - /** - * The SQL that gets submittable payments checks multiple - * statuses from them. Checking it here. - */ - @Test - fun submittablePayments() = setup { db, _ -> - val beEmpty = db.initiated.submittableGet("KUDOS") - assertEquals(0, beEmpty.size) assertEquals( - db.initiated.create(genInitPay(requestUid = "first")), - PaymentInitiationResult.SUCCESS + listOf("PAY0", "PAY1", "PAY2", "PAY3", "PAY4", "PAY5"), + db.initiated.submittable("KUDOS").map { it.requestUid } ) + + // Check submitted not submitable + db.initiated.submissionSuccess(1, Instant.now(), "ORDER1") assertEquals( - db.initiated.create(genInitPay(requestUid = "second")), - PaymentInitiationResult.SUCCESS + listOf("PAY1", "PAY2", "PAY3", "PAY4", "PAY5"), + db.initiated.submittable("KUDOS").map { it.requestUid } ) + + // Check transient failure submitable last + db.initiated.submissionFailure(2, Instant.now(), "Failure") assertEquals( - db.initiated.create(genInitPay(requestUid = "third")), - PaymentInitiationResult.SUCCESS + listOf("PAY2", "PAY3", "PAY4", "PAY5", "PAY1"), + db.initiated.submittable("KUDOS").map { it.requestUid } ) - // Setting the first as "transient_failure", must be found. - db.initiated.submissionSuccess(1, Instant.now(), "Failure") - // Setting the second as "success", must not be found. - db.initiated.submissionSuccess(2, Instant.now(), "ORDER1234") - val expectTwo = db.initiated.submittableGet("KUDOS") - // the third initiation keeps the default "unsubmitted" - // state, must be found. Total 2. - assertEquals(1, expectTwo.size) - } - - // Tests how the fetch method gets the list of - // multiple unsubmitted payment initiations. - @Test - fun paymentInitiationsMultiple() = setup { db, _ -> - assertEquals(db.initiated.create(genInitPay("#1", "unique1")), PaymentInitiationResult.SUCCESS) - assertEquals(db.initiated.create(genInitPay("#2", "unique2")), PaymentInitiationResult.SUCCESS) - assertEquals(db.initiated.create(genInitPay("#3", "unique3")), PaymentInitiationResult.SUCCESS) - assertEquals(db.initiated.create(genInitPay("#4", "unique4")), PaymentInitiationResult.SUCCESS) - - // Marking one as submitted, hence not expecting it in the results. - db.conn { conn -> - conn.execSQLUpdate(""" - UPDATE initiated_outgoing_transactions - SET submitted='success' - WHERE initiated_outgoing_transaction_id=3; - """.trimIndent()) - } + // Check persistent failure not submitable + db.initiated.bankFailure("PAY3", "status failure") + assertEquals( + listOf("PAY2", "PAY4", "PAY5", "PAY1"), + db.initiated.submittable("KUDOS").map { it.requestUid } + ) + db.initiated.reversal("PAY4", "status reversal") + assertEquals( + listOf("PAY2", "PAY5", "PAY1"), + db.initiated.submittable("KUDOS").map { it.requestUid } + ) - // Expecting all the payments BUT the #3 in the result. - db.initiated.submittableGet("KUDOS").apply { - assertEquals(3, this.size) - assertEquals("#1", this[0].wireTransferSubject) - assertEquals("#2", this[1].wireTransferSubject) - assertEquals("#4", this[2].wireTransferSubject) - } + // Check rotation + db.initiated.submissionFailure(3, Instant.now(), "Failure") + assertEquals( + listOf("PAY5", "PAY1", "PAY2"), + db.initiated.submittable("KUDOS").map { it.requestUid } + ) + db.initiated.submissionFailure(6, Instant.now(), "Failure") + assertEquals( + listOf("PAY1", "PAY2", "PAY5"), + db.initiated.submittable("KUDOS").map { it.requestUid } + ) + db.initiated.submissionFailure(2, Instant.now(), "Failure") + assertEquals( + listOf("PAY2", "PAY5", "PAY1"), + db.initiated.submittable("KUDOS").map { it.requestUid } + ) } }
\ No newline at end of file |