package com.peachpasswords.passkeys import java.io.File import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue import org.junit.Test class CredentialProviderContractTest { @Test fun authenticationActionPendingIntentIsMutableForFrameworkRequestAttachment() { val source = source("passkeys/PasskeyUnlockIntent.kt") assertTrue(source.contains("PendingIntent.FLAG_MUTABLE")) assertFalse(source.contains("PendingIntent.FLAG_IMMUTABLE")) } @Test fun selectionPrefersTheFinalFrameworkOrigin() { assertTrue( selectionOrigin("https://github.com", "https://example.com") == "https://github.com", ) } @Test fun selectionRetainsAuthenticatedBeginRequestOriginWhenOemOmitsFinalRequest() { assertTrue( selectionOrigin(null, "https://github.com") == "https://github.com", ) } @Test fun selectionStillFailsClosedWithoutAnyVerifiedOrigin() { assertTrue(selectionOrigin(null, null) == null) assertTrue(selectionOrigin(" ", "") == null) } @Test fun selectionRetainsAuthenticatedBeginRequestHashWhenOemOmitsFinalRequest() { val authenticatedHash = byteArrayOf(1, 2, 3) assertTrue(selectionClientDataHash(null, authenticatedHash)!!.contentEquals(authenticatedHash)) } @Test fun selectionKeepsTheAuthenticatedBeginHashWhenSamsungReplacesFinalHash() { val frameworkHash = byteArrayOf(4, 5, 6) val authenticatedHash = byteArrayOf(1, 2, 3) assertTrue( selectionClientDataHash(frameworkHash, authenticatedHash)!! .contentEquals(authenticatedHash), ) } @Test fun providerOffersAnExplicitManualPasskeyChooser() { val service = source("passkeys/PeachCredentialProviderService.kt") val unlock = source("credentials/CredentialProviderUnlockActivity.kt") val selection = source("passkeys/PasskeyCredentialSelectionActivity.kt") assertTrue(service.contains("Choose another Peach passkey")) assertTrue(unlock.contains("Choose another Peach passkey")) assertTrue(selection.contains("retrieveBeginGetCredentialRequest(intent)")) assertTrue(selection.contains("PasskeyCredentialPlanner.candidates")) } private fun source(relativePath: String): String = File("src/main/java/com/peachpasswords/$relativePath").readText() }