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}