Some checks failed
Ticket #84 du chantier UI mobile & tablette. Aucune infra de deep-link n'existait (verifie en amont : pas de scheme personnalise, pas d'App Links, pas d'assetlinks.json, pas de listener appUrlOpen). - lib/mobile-app-redirect.ts : attemptOpenNativeApp() (pattern "smart app banner" classique - tente le scheme batchcooking://, bascule sur onFallback si la page est toujours visible passe un court delai) et isAndroidPhoneBrowser() (UA Android+Mobile, deliberement distinct de useIsMobileViewport() - une question de plateforme, pas de largeur). Respecte une preference "rester sur le web" (localStorage, cle exportee pour que l'onglet Parametres d'application - ticket #86 - la reutilise) sans jamais forcer la redirection. - AndroidManifest.xml : nouvel intent-filter additif (scheme batchcooking, sans toucher au filtre MAIN/LAUNCHER existant). - Nouvelle page /telecharger (publique, hors RequireAuth - un visiteur deja connecte sur le web mais sans l'appli sur cet appareil a une raison legitime d'y atterrir) : lien direct vers le proxy existant ${API_BASE_URL}/mobile/download (rien a changer cote API), bouton "reessayer d'ouvrir l'appli". Deliberement pas de changement sur la landing page ici (lien discret actuel laisse tel quel) - c'est le ticket #85, separe pour rester petit/revuable. Verifie en local : tsc -b --force, biome check, build de prod, suite Cypress e2e complete (141/141 sur cette branche - #91 n'est pas encore merge, layout.cy.ts y est donc encore dans son etat pre-#91) et composants (69/69, incluant le nouveau mobile-app-redirect.cy.tsx). Note technique : le premier essai de test du composant tentait un vrai window.location.href vers le scheme personnalise depuis Cypress/ Electron, ce qui bloquait le runner indefiniment (protocole inconnu mal gere par Electron) - corrige en rendant ce seul appel injectable (openAppUrl, reserve aux tests) sans toucher au comportement reel. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
26 lines
1.2 KiB
TypeScript
26 lines
1.2 KiB
TypeScript
// Pure layout spec, no Cucumber — a single static page with no user
|
|
// journey of its own (see layout.cy.ts's identical rationale for this
|
|
// 3-way test split). No `cy.intercept("**/auth/me", ...)` needed: this
|
|
// route renders outside RequireAuth entirely (see App.tsx's own doc
|
|
// comment on why), so it never calls that endpoint.
|
|
|
|
describe("DownloadPage — the mobile-app-redirect fallback", () => {
|
|
it("renders the APK download link, a retry button, and a way back home", () => {
|
|
cy.visit("/telecharger");
|
|
|
|
cy.contains("h1", "Installer l'application Android").should("be.visible");
|
|
|
|
// API_BASE_URL is empty locally (relative-URL, same-origin default —
|
|
// see client.ts), so the real target collapses to this relative path.
|
|
cy.contains("a", "Télécharger l'APK").should("have.attr", "href", "/mobile/download");
|
|
|
|
cy.contains("button", "Réessayer d'ouvrir l'application").should("be.visible");
|
|
|
|
cy.contains("a", "Retour à l'accueil").should("have.attr", "href", "/");
|
|
});
|
|
|
|
it("is reachable without being logged in — no bounce to /login", () => {
|
|
cy.visit("/telecharger");
|
|
cy.url().should("include", "/telecharger");
|
|
});
|
|
});
|