53 lines
2.6 KiB
JavaScript
53 lines
2.6 KiB
JavaScript
/*
|
|
* nav.test.js — Garde du mode de consommation borne (helpers PURS de nav.js).
|
|
*
|
|
* nav.js n'enregistre son listener DOMContentLoaded que derriere `typeof document`,
|
|
* donc l'import est sans effet de bord en node pur : on teste needsModeRedirect et
|
|
* modeLabel sans jsdom. Couvre la cause du 422 INVALID_SERVICE_MODE : atteindre une
|
|
* page de commande sans mode memorise (localStorage vide) doit renvoyer a l'accueil,
|
|
* et le badge ne doit jamais afficher un faux "Sur place" quand aucun mode n'est choisi.
|
|
*/
|
|
import { test } from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { readFileSync } from 'node:fs';
|
|
import { needsModeRedirect, modeLabel } from '../../src/public/borne/assets/js/nav.js';
|
|
|
|
/* --- modeLabel ----------------------------------------------------------- */
|
|
|
|
test('modeLabel: libelle humain ; vide si mode absent ou inconnu (ne ment pas)', () => {
|
|
assert.equal(modeLabel('sur-place'), 'Sur place');
|
|
assert.equal(modeLabel('a-emporter'), 'A emporter');
|
|
assert.equal(modeLabel(null), '');
|
|
assert.equal(modeLabel(undefined), '');
|
|
assert.equal(modeLabel('bidon'), '');
|
|
});
|
|
|
|
/* --- needsModeRedirect --------------------------------------------------- */
|
|
|
|
test('needsModeRedirect: page profonde SANS mode valide -> redirige', () => {
|
|
assert.equal(needsModeRedirect('/payment.html', null), true);
|
|
assert.equal(needsModeRedirect('/products.html', undefined), true);
|
|
assert.equal(needsModeRedirect('/payment.html', 'bidon'), true);
|
|
assert.equal(needsModeRedirect('/categories.html', ''), true);
|
|
});
|
|
|
|
test('needsModeRedirect: mode valide -> pas de redirection', () => {
|
|
assert.equal(needsModeRedirect('/payment.html', 'sur-place'), false);
|
|
assert.equal(needsModeRedirect('/products.html', 'a-emporter'), false);
|
|
});
|
|
|
|
test('needsModeRedirect: ecran d accueil jamais redirige (le mode s y choisit)', () => {
|
|
assert.equal(needsModeRedirect('/', null), false);
|
|
assert.equal(needsModeRedirect('/index.html', null), false);
|
|
assert.equal(needsModeRedirect('/index.html', 'bidon'), false);
|
|
});
|
|
|
|
/* --- Cablage de la chaine de persistance (regression) -------------------- */
|
|
|
|
test('categories.html charge nav.js (sinon le mode recu en ?mode= n est jamais persiste)', () => {
|
|
// 1re page post-accueil : elle recoit ?mode= depuis index.html et DOIT le persister
|
|
// via syncModeFromURL. Sans nav.js ici, le mode n atteint pas localStorage et la
|
|
// garde renverrait en boucle un utilisateur legitime vers l accueil (regression revue).
|
|
const html = readFileSync(new URL('../../src/public/borne/categories.html', import.meta.url), 'utf8');
|
|
assert.match(html, /assets\/js\/nav\.js/);
|
|
});
|