NTP-58492 | Added remarks validation (#15913)
This commit is contained in:
@@ -0,0 +1,132 @@
|
||||
/*
|
||||
*
|
||||
* * Copyright © 2025 by Navi Technologies Limited
|
||||
* * All rights reserved. Strictly confidential
|
||||
*
|
||||
*/
|
||||
|
||||
package com.navi.pay.management.moneytransfer.scanpay.util
|
||||
|
||||
import android.net.Uri
|
||||
import com.navi.pay.network.testsetup.NaviPayAndroidTest
|
||||
import dagger.hilt.android.testing.HiltAndroidTest
|
||||
import io.mockk.every
|
||||
import io.mockk.mockk
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
|
||||
@HiltAndroidTest
|
||||
class UpiUriParserTest : NaviPayAndroidTest() {
|
||||
|
||||
private lateinit var mockUri: Uri
|
||||
|
||||
@Before
|
||||
fun setup() {
|
||||
mockUri = mockk()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testNoteValidation_nullNote() {
|
||||
every { mockUri.getQueryParameter("tn") } returns null
|
||||
mockOtherRequiredParams()
|
||||
|
||||
val result = mockUri.getPayeeEntity()
|
||||
assertEquals("", result.note)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testNoteValidation_validAlphanumericNote() {
|
||||
every { mockUri.getQueryParameter("tn") } returns "Payment123"
|
||||
mockOtherRequiredParams()
|
||||
|
||||
val result = mockUri.getPayeeEntity()
|
||||
assertEquals("Payment123", result.note)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testNoteValidation_specialCharactersInNote() {
|
||||
every { mockUri.getQueryParameter("tn") } returns "Payment@123#"
|
||||
mockOtherRequiredParams()
|
||||
|
||||
val result = mockUri.getPayeeEntity()
|
||||
assertEquals("Payment123", result.note)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testNoteValidation_validHyphenInNote() {
|
||||
every { mockUri.getQueryParameter("tn") } returns "Payment-123"
|
||||
mockOtherRequiredParams()
|
||||
|
||||
val result = mockUri.getPayeeEntity()
|
||||
assertEquals("Payment-123", result.note)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testNoteValidation_spacesInNote() {
|
||||
every { mockUri.getQueryParameter("tn") } returns " Payment 123 "
|
||||
mockOtherRequiredParams()
|
||||
|
||||
val result = mockUri.getPayeeEntity()
|
||||
assertEquals("Payment 123", result.note)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testNoteValidation_onlySpecialCharacters() {
|
||||
every { mockUri.getQueryParameter("tn") } returns "@#$%^"
|
||||
mockOtherRequiredParams()
|
||||
|
||||
val result = mockUri.getPayeeEntity()
|
||||
assertEquals("", result.note)
|
||||
}
|
||||
|
||||
private fun mockOtherRequiredParams() {
|
||||
every { mockUri.getQueryParameter("pn") } returns ""
|
||||
every { mockUri.getQueryParameter("pa") } returns ""
|
||||
every { mockUri.getQueryParameter("am") } returns ""
|
||||
every { mockUri.getQueryParameter("tid") } returns null
|
||||
every { mockUri.getQueryParameter("tr") } returns null
|
||||
every { mockUri.getQueryParameter("url") } returns null
|
||||
every { mockUri.getQueryParameter("category") } returns null
|
||||
every { mockUri.getQueryParameter("mc") } returns null
|
||||
every { mockUri.getQueryParameter("mode") } returns null
|
||||
every { mockUri.getQueryParameter("purpose") } returns null
|
||||
every { mockUri.getQueryParameter("cu") } returns null
|
||||
every { mockUri.getQueryParameter("sign") } returns null
|
||||
every { mockUri.getQueryParameter("txnType") } returns null
|
||||
every { mockUri.getQueryParameter("ver") } returns null
|
||||
every { mockUri.getQueryParameter("mam") } returns null
|
||||
every { mockUri.getQueryParameter("orgId") } returns null
|
||||
every { mockUri.getQueryParameter("mid") } returns null
|
||||
every { mockUri.getQueryParameter("msid") } returns null
|
||||
every { mockUri.getQueryParameter("mtid") } returns null
|
||||
every { mockUri.getQueryParameter("cc") } returns null
|
||||
every { mockUri.getQueryParameter("enTips") } returns null
|
||||
every { mockUri.getQueryParameter("gstBrkUp") } returns null
|
||||
every { mockUri.getQueryParameter("bAm") } returns null
|
||||
every { mockUri.getQueryParameter("bCurr") } returns null
|
||||
every { mockUri.getQueryParameter("qrMedium") } returns null
|
||||
every { mockUri.getQueryParameter("invoiceNo") } returns null
|
||||
every { mockUri.getQueryParameter("invoiceDate") } returns null
|
||||
every { mockUri.getQueryParameter("invoiceName") } returns null
|
||||
every { mockUri.getQueryParameter("QRexpire") } returns null
|
||||
every { mockUri.getQueryParameter("QRts") } returns null
|
||||
every { mockUri.getQueryParameter("split") } returns null
|
||||
every { mockUri.getQueryParameter("pinCode") } returns null
|
||||
every { mockUri.getQueryParameter("Tier") } returns null
|
||||
every { mockUri.getQueryParameter("gstIn") } returns null
|
||||
every { mockUri.getQueryParameter("mn") } returns null
|
||||
every { mockUri.getQueryParameter("type") } returns null
|
||||
every { mockUri.getQueryParameter("validitystart") } returns null
|
||||
every { mockUri.getQueryParameter("validityend") } returns null
|
||||
every { mockUri.getQueryParameter("amrule") } returns null
|
||||
every { mockUri.getQueryParameter("recur") } returns null
|
||||
every { mockUri.getQueryParameter("recurvalue") } returns null
|
||||
every { mockUri.getQueryParameter("recurtype") } returns null
|
||||
every { mockUri.getQueryParameter("rev") } returns null
|
||||
every { mockUri.getQueryParameter("share") } returns null
|
||||
every { mockUri.getQueryParameter("block") } returns null
|
||||
every { mockUri.getQueryParameter("umn") } returns null
|
||||
every { mockUri.getQueryParameter("query") } returns null
|
||||
}
|
||||
}
|
||||
@@ -147,8 +147,7 @@ data class ConfigMessage(
|
||||
"Maximum payment limit is ₹2,000 when you upload a QR from your gallery.",
|
||||
@SerializedName("invalidAmountGenericMessage")
|
||||
val invalidAmountGenericMessage: String = "Invalid amount",
|
||||
@SerializedName("sendMoneyDefaultRemarks")
|
||||
val sendMoneyDefaultRemarks: String = "Paid via Navi",
|
||||
@SerializedName("sendMoneyDefaultRemarks") val sendMoneyDefaultRemarks: String = "Navi UPI",
|
||||
@SerializedName("aadhaarConsentBottomSheetDescription")
|
||||
val aadhaarConsentBottomSheetDescription: String =
|
||||
"I hereby give my consent to {{BANK_NAME}} to collect & use my Aadhaar number for Aadhaar based authentication for the purpose of providing me UPI based payment facilities. I understand that my Aadhaar number shall be used solely for authenticating my identity through Aadhaar Authentication System for the purpose stated above.",
|
||||
|
||||
@@ -24,6 +24,7 @@ import com.navi.pay.utils.DEFAULT_UPI_MODE
|
||||
import com.navi.pay.utils.DEFAULT_UPI_PURPOSE
|
||||
import com.navi.pay.utils.NAVI_PAY_INTENT_HOST_LIST
|
||||
import com.navi.pay.utils.NAVI_PAY_INTENT_SCHEME_LIST
|
||||
import com.navi.pay.utils.NOTES_REGEX
|
||||
import com.navi.pay.utils.isAmountValidForSendMoney
|
||||
import javax.inject.Inject
|
||||
|
||||
@@ -124,7 +125,7 @@ fun Uri.getPayeeEntity(isVerifiedVpa: Boolean = false): PayeeEntity {
|
||||
name = getQueryParameter("pn") ?: "",
|
||||
vpa = getQueryParameter("pa") ?: "",
|
||||
amount = amount,
|
||||
note = getQueryParameter("tn") ?: "",
|
||||
note = getValidatedNote(getQueryParameter("tn")),
|
||||
transactionId = getQueryParameter("tid"),
|
||||
transactionReference = getQueryParameter("tr"),
|
||||
refUrl = getQueryParameter("url"),
|
||||
@@ -179,6 +180,11 @@ fun Uri.getPayeeEntity(isVerifiedVpa: Boolean = false): PayeeEntity {
|
||||
)
|
||||
}
|
||||
|
||||
private fun getValidatedNote(notes: String?): String {
|
||||
if (notes == null) return ""
|
||||
return notes.filter { char -> NOTES_REGEX.matches(char.toString()) }.trim()
|
||||
}
|
||||
|
||||
private fun parseSplitDetailsFromString(split: String?): List<SplitDetailsItem>? {
|
||||
|
||||
if (split.isNullOrEmpty()) {
|
||||
|
||||
Reference in New Issue
Block a user