Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions app/src/main/java/to/bitkit/utils/Bip21Utils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ object Bip21Utils {
}

// Add optional parameters
label?.let { queryParams.add("label=${it.encodeToUrl()}") }
message?.let { queryParams.add("message=${it.encodeToUrl()}") }
if (!label.isNullOrBlank()) { queryParams.add("label=${label.encodeToUrl()}") }
if (!message.isNullOrBlank()) { queryParams.add("message=${message.encodeToUrl()}") }

// Add query parameters if any exist
if (queryParams.isNotEmpty()) {
Expand Down
59 changes: 59 additions & 0 deletions app/src/test/java/to/bitkit/utils/Bip21UrlBuilderTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -215,4 +215,63 @@ class Bip21UrlBuilderTest {
val input = first + second
Assert.assertTrue(isDuplicatedBip21(input))
}

// Tests for empty/blank message and label handling - Issue #746

@Test
fun `address with null message produces no message parameter`() {
val address = "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq"
val expected = "bitcoin:$address"
Assert.assertEquals(expected, buildBip21Url(address, message = null))
}

@Test
fun `address with empty message produces no message parameter`() {
val address = "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq"
val expected = "bitcoin:$address"
Assert.assertEquals(expected, buildBip21Url(address, message = ""))
}

@Test
fun `address with blank message produces no message parameter`() {
val address = "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq"
val expected = "bitcoin:$address"
Assert.assertEquals(expected, buildBip21Url(address, message = " "))
}

@Test
fun `address with null label produces no label parameter`() {
val address = "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq"
val expected = "bitcoin:$address?message=Bitkit"
Assert.assertEquals(expected, buildBip21Url(address, label = null))
}

@Test
fun `address with empty label produces no label parameter`() {
val address = "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq"
val expected = "bitcoin:$address?message=Bitkit"
Assert.assertEquals(expected, buildBip21Url(address, label = ""))
}

@Test
fun `address with blank label produces no label parameter`() {
val address = "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq"
val expected = "bitcoin:$address?message=Bitkit"
Assert.assertEquals(expected, buildBip21Url(address, label = " "))
}

@Test
fun `address with empty message and label produces clean URL`() {
val address = "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq"
val expected = "bitcoin:$address"
Assert.assertEquals(expected, buildBip21Url(address, label = "", message = ""))
}

@Test
fun `address with lightning but empty message produces correct URL`() {
val address = "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq"
val invoice = "lnbc100n1p3k9v3pp5kzmj..."
val expected = "bitcoin:$address?lightning=${invoice.encodeToUrl()}"
Assert.assertEquals(expected, buildBip21Url(address, message = "", lightningInvoice = invoice))
}
}
Loading