CredentialProviderContractTest.kt

2.4 KB · raw

1package com.peachpasswords.passkeys23import java.io.File4import org.junit.Assert.assertFalse5import org.junit.Assert.assertTrue6import org.junit.Test78class CredentialProviderContractTest {9    @Test10    fun authenticationActionPendingIntentIsMutableForFrameworkRequestAttachment() {11        val source = source("passkeys/PasskeyUnlockIntent.kt")1213        assertTrue(source.contains("PendingIntent.FLAG_MUTABLE"))14        assertFalse(source.contains("PendingIntent.FLAG_IMMUTABLE"))15    }1617    @Test18    fun selectionPrefersTheFinalFrameworkOrigin() {19        assertTrue(20            selectionOrigin("https://github.com", "https://example.com") ==21                "https://github.com",22        )23    }2425    @Test26    fun selectionRetainsAuthenticatedBeginRequestOriginWhenOemOmitsFinalRequest() {27        assertTrue(28            selectionOrigin(null, "https://github.com") == "https://github.com",29        )30    }3132    @Test33    fun selectionStillFailsClosedWithoutAnyVerifiedOrigin() {34        assertTrue(selectionOrigin(null, null) == null)35        assertTrue(selectionOrigin("  ", "") == null)36    }3738    @Test39    fun selectionRetainsAuthenticatedBeginRequestHashWhenOemOmitsFinalRequest() {40        val authenticatedHash = byteArrayOf(1, 2, 3)4142        assertTrue(selectionClientDataHash(null, authenticatedHash)!!.contentEquals(authenticatedHash))43    }4445    @Test46    fun selectionPrefersTheFinalFrameworkHash() {47        val frameworkHash = byteArrayOf(4, 5, 6)48        val authenticatedHash = byteArrayOf(1, 2, 3)4950        assertTrue(51            selectionClientDataHash(frameworkHash, authenticatedHash)!!52                .contentEquals(frameworkHash),53        )54    }5556    @Test57    fun providerOffersAnExplicitManualPasskeyChooser() {58        val service = source("passkeys/PeachCredentialProviderService.kt")59        val unlock = source("credentials/CredentialProviderUnlockActivity.kt")60        val selection = source("passkeys/PasskeyCredentialSelectionActivity.kt")6162        assertTrue(service.contains("Choose another Peach passkey"))63        assertTrue(unlock.contains("Choose another Peach passkey"))64        assertTrue(selection.contains("retrieveBeginGetCredentialRequest(intent)"))65        assertTrue(selection.contains("PasskeyCredentialPlanner.candidates"))66    }6768    private fun source(relativePath: String): String =69        File("src/main/java/com/peachpasswords/$relativePath").readText()70}