feat(accountsetup): add Yahoo app-password/2FA help in onboarding

Yahoo's guided app-password setup pointed appPasswordHelpUrl at the
generic account-security sign-in page, which assumes the user already
knows to hunt for "Create app password" once there. Point it instead at
Yahoo's own step-by-step "Generate and manage 3rd-party app passwords"
article, mirroring what #153 did for iCloud.

Yahoo does NOT gate app-password creation behind two-step verification
(verified against Yahoo's live help docs, which never list it as a
prerequisite), so — unlike Gmail and iCloud — it keeps twoFactorHelpUrl
null and shows no 2FA button. AppPasswordSetupScreen already renders the
help buttons generically from these provider fields, so no screen change
is needed; the existing PR #152 ordering (2FA link before the
app-password link) is preserved for the providers that have both.

Add a MailProviderTest assertion pinning Yahoo's new app-password URL
(mirroring the iCloud test) and extend the onboarding
yahooSetup_hasNoTwoFactorHelpLink coverage note for #155.

Closes #155

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-02 19:25:24 -05:00
co-authored by Claude Opus 4.8
parent 9e2b4bf49f
commit 6ff988aaec
3 changed files with 20 additions and 4 deletions
@@ -254,10 +254,11 @@ class OnboardingFlowTest {
waitForText("Yahoo Mail")
composeTestRule.onNodeWithText("Yahoo Mail").performClick()
// Yahoo's setup screen keeps its app-password link…
// Yahoo's setup screen keeps its app-password link (now pointing at Yahoo's step-by-step
// instructions article instead of the generic account-security page, issue #155)…
waitForText(string(R.string.app_password_open_page, "Yahoo Mail"))
// …but gains no two-factor help link: unlike Gmail and iCloud, Yahoo gates nothing on it
// (issue #98, #153).
// (issue #98, #153, #155).
composeTestRule.onNodeWithText(string(R.string.app_password_2fa_help)).assertDoesNotExist()
composeTestRule.onNodeWithText(string(R.string.app_password_2fa_help_icloud)).assertDoesNotExist()
}