NTP-58492 | Added remarks validation (#15913)

This commit is contained in:
Ujjwal Kumar
2025-04-25 13:26:27 +05:30
committed by GitHub
parent 03ea9fdb02
commit 0c8d571a77
3 changed files with 140 additions and 3 deletions

View File

@@ -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
}
}

View File

@@ -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.",

View File

@@ -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()) {