#!/usr/bin/env node /** * ObsiGate — tests de la logique pure de la page « Rechercher partout » * (fusion #68), sans DOM ni jsdom : résolution des bases, liens * profonds et normalisation des 4 formats d'API. * * Le fichier frontend/js/recherche.js est chargé en ESM (frontend/js * est "type": "module") ; ses helpers sont exposés via * globalThis.RecherchePartout. Usage : node tests/frontend/recherche.test.mjs */ import { strict as assert } from "node:assert"; import { fileURLToPath, pathToFileURL } from "node:url"; import path from "node:path"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const JS_FILE = path.resolve(__dirname, "..", "..", "frontend", "js", "recherche.js"); await import(pathToFileURL(JS_FILE).href); const rp = globalThis.RecherchePartout; assert.ok(rp, "RecherchePartout exposé"); let n = 0; const ok = (cond, label) => { assert.ok(cond, label); n += 1; }; ok(rp.isDevHost("og-dev.dracodev.net") === true, "dev reconnu"); ok(rp.isDevHost("x-dev.dracodev.net.evil") === false, "hôte piège rejeté"); const b = rp.resolveBases({ host: "og-dev.dracodev.net", explicit: { tiktak: "https://tiktak-perso.example/" }, barUrls: {}, tabHrefs: {}, }); ok(b.tiktak === "https://tiktak-perso.example/", "explicite prioritaire"); ok(b.obsigate === "https://og-dev.dracodev.net/", "dev pour l'hôte courant"); ok(b.kanbante === "https://kanbante-dev.dracodev.net/", "dev avant href"); ok( rp.searchPath("obsigate", "café") === "api/search?q=caf%C3%A9&vault=all&limit=8", "path ObsiGate", ); const items = rp.normalize( "obsigate", { results: [{ vault: "home-bruno", path: "Notes/Idée.md", title: "Idée", snippet: "extrait" }] }, "https://og-dev.dracodev.net/", "idée", ); ok( items[0].url === "https://og-dev.dracodev.net/#file=home-bruno:Notes%2FId%C3%A9e.md", "lien profond ObsiGate", ); ok( rp.nativeSearchUrl("tiktak", "https://tiktak-dev.dracodev.net/", "q") === "https://tiktak-dev.dracodev.net/search?q=q", "repli TikTak", ); console.log(`recherche.test.mjs : ${n} assertions OK`);