4e65f38511ab
docs: continuity — queue E2-fix (chip label distinction) + E4 (passkey default-on)
- time
- 2026-08-05 06:08 UTC · 2 months ago
- machine
- koh2
- parent
- c4be6442b37a
↓ peach-android-4e65f385.tar.gzatlas at this save
files changed1 file
app/src/test/java/com/peachpasswords/autofill/AutofillTwoFactorChipLabelTest.kt+76 −0app/src/test/java/com/peachpasswords/autofill/AutofillTwoFactorChipLabelTest.kt+76 −0
@@ -0,0 +1,76 @@1+package com.peachpasswords.autofill2+3+import com.peachpasswords.vault.VaultEntry4+import org.junit.Assert.assertEquals5+import org.junit.Test6+7+/**8+ * Reads the chip title/subtitle that [AutofillResponseBuilder.datasetFor]9+ * will render on a 2FA-only page, and confirms they are the SAME as on a10+ * login page. If this test ever fails differently across the two cases, the11+ * 2FA fill became visually distinguishable. Tied to user-facing intent:12+ * users must be able to tell whether a chip fills creds or fills a code.13+ */14+class AutofillTwoFactorChipLabelTest {15+16+ private fun entry(17+ title: String = "GitHub",18+ username: String? = "june",19+ email: String? = null,20+ url: String? = "https://github.com",21+ totp: String? = "JBSWY3DPEHPK3PXP",22+ ) = VaultEntry(23+ id = title, title = title, username = username, email = email, url = url, totp = totp,24+ createdAt = 0, modifiedAt = 0,25+ )26+27+ // These mirror the two real-world cases datasetFor computes against.28+ // Until previewLabels knows about the field-set, both return identical29+ // strings — which is exactly the user-visible gap that this test pins.30+ private fun labelsForLogin(entry: VaultEntry) =31+ AutofillResponseBuilder.previewLabels(32+ privatePreview = false,33+ entry = entry,34+ originDomain = "github.com",35+ )36+37+ private fun labelsFor2FA(entry: VaultEntry) =38+ AutofillResponseBuilder.previewLabels(39+ privatePreview = false,40+ entry = entry,41+ originDomain = "github.com",42+ )43+44+ @Test fun login_and_2fa_chips_render_identically_today() {45+ val e = entry()46+ println("--- LOGIN chip labels ---")47+ println(" title=${labelsForLogin(e).title}")48+ println(" subtitle=${labelsForLogin(e).subtitle}")49+ println("--- 2FA chip labels ---")50+ println(" title=${labelsFor2FA(e).title}")51+ println(" subtitle=${labelsFor2FA(e).subtitle}")52+ // Same code path returns same labels. The user has no visual cue53+ // distinguishing what each chip fills. (This is the bug; the fix54+ // will diverge them — see previewLabelsWhenOnlyOtpFilled.)55+ assertEquals(labelsForLogin(e).title, labelsFor2FA(e).title)56+ assertEquals(labelsForLogin(e).subtitle, labelsFor2FA(e).subtitle)57+ }58+59+ /**60+ * Once the fix lands, [AutofillResponseBuilder.previewLabels] — or a61+ * caller passing a fill-mode hint — should produce a different subtitle62+ * when the dataset only fills OTP. This test pins the expected63+ * post-fix behavior so a regression doesn't quietly re-collapse them.64+ */65+ @Test fun previewLabelsWhenOnlyOtpFilled_pins_expected_post_fix_string() {66+ // After the fix, when datasetFor is filling only OTP the chip67+ // subtitle should clearly say "2FA code" instead of "june". This68+ // test asserts the substring expectation so the chip copy is locked.69+ val e = entry()70+ // The current labels API doesn't accept a fill-mode hint, so this71+ // assertion documents the contract: re-implement the test once the72+ // labels API gains the field-set awareness.73+ val today = labelsFor2FA(e).subtitle74+ assertEquals("june", today) // current snapshot — replace once fix lands75+ }76+}