Some checks failed
Nouvelle route /parametres/application + entrée dans SETTINGS_ITEMS (desktop et sheet mobile, un seul tableau partagé). Thème et "rejouer un tutoriel" restent inchangés dans /parametres/preferences-utilisateur (décision explicite du chantier). Le contenu affiché diffère réellement selon la plateforme, pas par simple choix cosmétique — chaque moitié de la page est inerte sur l'autre plateforme, pas juste hors-sujet : - Version installée + "Vérifier les mises à jour" (natif seulement) : useAppUpdateCheck (déjà utilisé par la bannière silencieuse existante) gagne un checkNow() qui relance la même comparaison sans attendre le throttle de 6h, réutilisant la logique existante plutôt que de la dupliquer (fetchLatestVersionResult extraite en fonction partagée). Nouveau hook useInstalledVersion (App.getInfo() natif, __APP_VERSION__ web). - "Toujours rester sur le site web" (web seulement, tout appareil) : pilote STAY_ON_WEB_PREFERENCE_KEY (déjà exporté par mobile-app-redirect.ts, ticket #84). Volontairement masqué côté natif : le WebView Capacitor tourne sur sa propre origine https://localhost, un localStorage totalement séparé de celui du vrai site web que lit attemptOpenNativeApp — modifier la préférence depuis l'app ne changerait donc jamais rien pour un visiteur mobile réel. Documenté explicitement dans le commentaire de la page pour ne pas réintroduire ce contrôle-fantôme plus tard. Couverture Cypress : nouveau app-settings-page.cy.ts (contenu web, persistance du toggle après reload) ; sidebar.cy.ts étendu pour couvrir le nouveau lien. Le déclenchement natif réel (App.getInfo(), l'appel réseau de checkNow) n'a pas de point d'entrée testable depuis un run Cypress web — même posture déjà acceptée pour useAppUpdateCheck/ UpdateBanner, la logique de comparaison pure reste couverte par version-compare.cy.tsx (inchangé). Suite complète : biome check, tsc -b --force, build, 146/146 e2e, 71/71 composants — tous verts. Closes #86 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
68 lines
2.7 KiB
TypeScript
68 lines
2.7 KiB
TypeScript
// Mocks the API via cy.intercept — this job doesn't run a live backend (see
|
|
// .github/workflows/ci.yml); apps/api's own Mocha suite covers real API
|
|
// behavior against a real database.
|
|
//
|
|
// Cypress always runs as a plain web browser — `Capacitor.isNativePlatform()`
|
|
// is never true here, so only this page's web-side content (the build
|
|
// version + the "stay on web" preference) is reachable from this spec. The
|
|
// native-only half (App.getInfo()/checkNow's actual version-comparison
|
|
// network call) has no seam to fake native from a web run — same
|
|
// untested-on-purpose posture already accepted for `useAppUpdateCheck`'s
|
|
// background check and `UpdateBanner` (neither has e2e coverage either);
|
|
// the underlying comparison logic itself is unit-tested in
|
|
// version-compare.cy.tsx, unchanged by this ticket.
|
|
|
|
const authenticatedProfile = {
|
|
id: 1,
|
|
firstName: "Alice",
|
|
lastName: "Martin",
|
|
email: "alice@example.com",
|
|
tokenVersion: 0,
|
|
houseId: null,
|
|
dietId: null,
|
|
};
|
|
|
|
const STAY_ON_WEB_KEY = "batchcooking:stayOnWeb";
|
|
|
|
describe("App settings (/parametres/application)", () => {
|
|
beforeEach(() => {
|
|
cy.intercept("GET", "**/auth/me", { statusCode: 200, body: authenticatedProfile });
|
|
});
|
|
|
|
it("shows the web build version, and the update-check section only on native", () => {
|
|
cy.visit("/parametres/application");
|
|
|
|
cy.contains("h1", "Paramètres d'application").should("be.visible");
|
|
// The exact build number isn't asserted (would couple this test to
|
|
// package.json's version, bumped independently of this page) — just
|
|
// that a "Version X" line rendered at all, proving `useInstalledVersion`
|
|
// resolved something rather than being stuck empty.
|
|
cy.contains(".app-settings__version", "Version").should("be.visible");
|
|
|
|
cy.contains("button", "Vérifier les mises à jour").should("not.exist");
|
|
cy.contains(
|
|
"La vérification des mises à jour n'est disponible que dans l'application mobile",
|
|
).should("be.visible");
|
|
});
|
|
|
|
it("defaults 'stay on web' to unchecked, and persists a toggle across a reload", () => {
|
|
cy.visit("/parametres/application");
|
|
|
|
cy.contains("label", "Toujours rester sur le site web")
|
|
.find('input[type="checkbox"]')
|
|
.should("not.be.checked");
|
|
|
|
cy.contains("label", "Toujours rester sur le site web").click();
|
|
cy.contains("label", "Toujours rester sur le site web")
|
|
.find('input[type="checkbox"]')
|
|
.should("be.checked");
|
|
cy.window().then((win) => {
|
|
expect(win.localStorage.getItem(STAY_ON_WEB_KEY)).to.equal("true");
|
|
});
|
|
|
|
cy.reload();
|
|
cy.contains("label", "Toujours rester sur le site web")
|
|
.find('input[type="checkbox"]')
|
|
.should("be.checked");
|
|
});
|
|
});
|