Skip to content

Commit

Permalink
[PM-14936] Move prefixHttpsIfNecessaryOrNull to StringExtensions (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
SaintPatrck authored Feb 11, 2025
1 parent fdc9271 commit 2c63c1a
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import com.x8bit.bitwarden.ui.platform.base.util.Text
import com.x8bit.bitwarden.ui.platform.base.util.asText
import com.x8bit.bitwarden.ui.platform.base.util.isValidUri
import com.x8bit.bitwarden.ui.platform.base.util.orNullIfBlank
import com.x8bit.bitwarden.ui.platform.base.util.prefixHttpsIfNecessaryOrNull
import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager
import com.x8bit.bitwarden.ui.platform.manager.keychain.model.PrivateKeyAliasSelectionResult
import dagger.hilt.android.lifecycle.HiltViewModel
Expand Down Expand Up @@ -594,14 +595,3 @@ sealed class EnvironmentAction {
) : Internal()
}
}

/**
* If the given [String] is a valid URI, "https://" will be appended if it is not already present.
* Otherwise `null` will be returned.
*/
private fun String.prefixHttpsIfNecessaryOrNull(): String? =
when {
this.isBlank() || !this.isValidUri() -> null
"http://" in this || "https://" in this -> this
else -> "https://$this"
}
Original file line number Diff line number Diff line change
Expand Up @@ -204,3 +204,14 @@ fun String.removeDiacritics(): String =
Normalizer.normalize(this, Normalizer.Form.NFKD),
"",
)

/**
* If the given [String] is a valid URI, "https://" will be appended if it is not already present.
* Otherwise `null` will be returned.
*/
fun String.prefixHttpsIfNecessaryOrNull(): String? =
when {
this.isBlank() || !this.isValidUri() -> null
"http://" in this || "https://" in this -> this
else -> "https://$this"
}
Original file line number Diff line number Diff line change
Expand Up @@ -141,4 +141,68 @@ class StringExtensionsTest {
val result = "áéíóů".removeDiacritics()
assertEquals("aeiou", result)
}

@Test
fun `prefixHttpsIfNecessaryOrNull should prefix https when URI is valid and no scheme`() {
val uri = "example.com"
val expected = "https://$uri"
val actual = uri.prefixHttpsIfNecessaryOrNull()

assertEquals(expected, actual)
}

@Test
fun `prefixHttpsIfNecessaryOrNull should return null when URI is empty string`() {
val uri = ""
assertNull(uri.prefixHttpsIfNecessaryOrNull())
}

@Test
fun `prefixHttpsIfNecessaryOrNull should return null when URI is whitespace string`() {
val uri = " "
assertNull(uri.prefixHttpsIfNecessaryOrNull())
}

@Test
fun `prefixHttpsIfNecessaryOrNull should return null when URI is invalid`() {
val invalidUri = "invalid uri"
assertNull(invalidUri.prefixHttpsIfNecessaryOrNull())
}

@Test
fun `prefixHttpsIfNecessaryOrNull should return URI unchanged when scheme is http`() {
val uri = "http://example.com"
val actual = uri.prefixHttpsIfNecessaryOrNull()
assertEquals(uri, actual)
}

@Test
fun `prefixHttpsIfNecessaryOrNull should return URI unchanged when scheme is https`() {
val uri = "https://example.com"
val actual = uri.prefixHttpsIfNecessaryOrNull()
assertEquals(uri, actual)
}

@Test
fun `prefixHttpsIfNecessaryOrNull with long valid URI without scheme`() {
val uri = "longexamplewithlots.of.subdomains.com"
val expected = "https://$uri"
val actual = uri.prefixHttpsIfNecessaryOrNull()
assertEquals(expected, actual)
}

@Test
fun `prefixHttpsIfNecessaryOrNull should return null when uri contains special characters`() {
val uri = "example-special!@#$%^&*()_+{}[].com"
val actual = uri.prefixHttpsIfNecessaryOrNull()
assertNull(actual)
}

@Test
fun `prefixHttpsIfNecessaryOrNull should prefix URI when it contains numbers and letters`() {
val uri = "example1234567890.com"
val expected = "https://$uri"
val actual = uri.prefixHttpsIfNecessaryOrNull()
assertEquals(expected, actual)
}
}

0 comments on commit 2c63c1a

Please sign in to comment.