Skip to content

Commit 4d6d7b0

Browse files
SanderKondratjevNortalaarmam
authored andcommitted
NFC-50 Add unit tests for WebEidViewModel handleAuth() with base64 and JSON validation
1 parent 43afe7b commit 4d6d7b0

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
@file:Suppress("PackageName")
2+
3+
package ee.ria.DigiDoc.viewmodel
4+
5+
import android.net.Uri
6+
import kotlinx.coroutines.ExperimentalCoroutinesApi
7+
import kotlinx.coroutines.test.runTest
8+
import org.junit.Assert.assertEquals
9+
import org.junit.Assert.assertNull
10+
import org.junit.Before
11+
import org.junit.Test
12+
13+
@OptIn(ExperimentalCoroutinesApi::class)
14+
class WebEidViewModelTest {
15+
16+
private lateinit var viewModel: WebEidViewModel
17+
18+
@Before
19+
fun setUp() {
20+
viewModel = WebEidViewModel()
21+
}
22+
23+
@Test
24+
fun handleAuth_validUri_setsAuthPayload() = runTest {
25+
val json = """
26+
{
27+
"challenge": "abc123",
28+
"login_uri": "https://example.com/auth/login",
29+
"get_signing_certificate": true
30+
}
31+
""".trimIndent()
32+
33+
val encoded = java.util.Base64.getEncoder().encodeToString(json.toByteArray())
34+
val uri = Uri.parse("web-eid-mobile://auth#$encoded")
35+
36+
viewModel.handleAuth(uri)
37+
38+
val result = viewModel.authPayload.value
39+
assertEquals("abc123", result?.challenge)
40+
assertEquals("https://example.com/auth/login", result?.loginUri)
41+
assertEquals(true, result?.getSigningCertificate)
42+
}
43+
44+
@Test
45+
fun handleAuth_missingFragment_setsNullPayload() = runTest {
46+
val uri = Uri.parse("web-eid-mobile://auth")
47+
48+
viewModel.handleAuth(uri)
49+
50+
assertNull(viewModel.authPayload.value)
51+
}
52+
53+
@Test
54+
fun handleAuth_invalidBase64_setsNullPayload() = runTest {
55+
val uri = Uri.parse("web-eid-mobile://auth#invalid-base64!!")
56+
57+
viewModel.handleAuth(uri)
58+
59+
assertNull(viewModel.authPayload.value)
60+
}
61+
62+
@Test
63+
fun handleAuth_missingOptionalField_defaultsToFalse() = runTest {
64+
val json = """
65+
{
66+
"challenge": "xyz456",
67+
"login_uri": "https://rp.example.com/login"
68+
}
69+
""".trimIndent()
70+
71+
val encoded = java.util.Base64.getEncoder().encodeToString(json.toByteArray())
72+
val uri = Uri.parse("web-eid-mobile://auth#$encoded")
73+
74+
viewModel.handleAuth(uri)
75+
76+
val result = viewModel.authPayload.value
77+
assertEquals("xyz456", result?.challenge)
78+
assertEquals("https://rp.example.com/login", result?.loginUri)
79+
assertEquals(false, result?.getSigningCertificate)
80+
}
81+
}

0 commit comments

Comments
 (0)