PasskeyCredentialPlannerTest.kt

2.1 KB · raw

1package com.peachpasswords.passkeys23import com.peachpasswords.vault.PasskeyData4import com.peachpasswords.vault.VaultEntry5import org.junit.Assert.assertEquals6import org.junit.Assert.assertTrue7import org.junit.Test89class PasskeyCredentialPlannerTest {10    @Test fun matches_passkeys_by_exact_rp_id() {11        val matches = PasskeyCredentialPlanner.candidates(12            listOf(13                passkey("a", rpId = "example.com", username = "june"),14                passkey("b", rpId = "evil-example.com", username = "lookalike"),15            ),16            """{"challenge":"c","rpId":"example.com"}""",17        )1819        assertEquals(listOf("a"), matches.map { it.entryId })20        assertEquals("june", matches.single().username)21    }2223    @Test fun narrows_to_allow_credentials_when_present() {24        val matches = PasskeyCredentialPlanner.candidates(25            listOf(26                passkey("a", credentialId = "cred-a", lastUsedAt = 10),27                passkey("b", credentialId = "cred-b", lastUsedAt = 20),28            ),29            """{"challenge":"c","rpId":"example.com","allowCredentials":[{"type":"public-key","id":"cred-a"}]}""",30        )3132        assertEquals(listOf("a"), matches.map { it.entryId })33    }3435    @Test fun empty_or_invalid_requests_offer_no_credentials() {36        assertTrue(PasskeyCredentialPlanner.candidates(listOf(passkey("a")), """{"challenge":"c"}""").isEmpty())37        assertTrue(PasskeyCredentialPlanner.candidates(listOf(passkey("a")), "not-json").isEmpty())38    }3940    private fun passkey(41        id: String,42        rpId: String = "example.com",43        credentialId: String = "cred-$id",44        username: String = "user-$id",45        lastUsedAt: Long? = null,46    ) = VaultEntry(47        id = id,48        type = "passkey",49        title = "Passkey $id",50        passkey = PasskeyData(51            credentialId = credentialId,52            publicKeyCose = "cose-$id",53            rpId = rpId,54            userHandle = "handle-$id",55            userName = username,56            userDisplayName = "User $id",57        ),58        lastUsedAt = lastUsedAt,59        createdAt = 1,60        modifiedAt = 1,61    )62}