Ctrl K
ComunidadGuías…

test/router.test.js

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import { test } from "node:test";
import assert from "node:assert/strict";
import { parseHash, hashFor } from "../app/web/src/lib/router.js";

test("parseHash resolves every supported view route", () => {
  assert.deepEqual(parseHash("#/chat"), { view: "chat", chatId: null });
  assert.deepEqual(parseHash("#/chat/abc-123"), { view: "chat", chatId: "abc-123" });
  assert.deepEqual(parseHash("#/deck/some-deck"), { view: "deck", slug: "some-deck" });
  assert.deepEqual(parseHash("#/report/some-deck"), { view: "report", slug: "some-deck" });
  assert.deepEqual(parseHash("#/research/some-deck"), { view: "research", slug: "some-deck" });
  assert.deepEqual(parseHash("#/themes"), { view: "themes" });
  assert.deepEqual(parseHash("#/home"), { view: "home" });
});

test("the removed #/identity route resolves to chat like any unknown route", () => {
  assert.deepEqual(parseHash("#/identity"), { view: "chat" });
});

test("parseHash tolerates an empty or malformed hash by landing on chat", () => {
  assert.deepEqual(parseHash(""), { view: "chat" });
  assert.deepEqual(parseHash("#"), { view: "chat" });
  assert.deepEqual(parseHash("#/"), { view: "chat" });
  assert.deepEqual(parseHash("#/deck"), { view: "chat" }); // no slug — meaningless
  assert.deepEqual(parseHash("#/unknown"), { view: "chat" });
  assert.deepEqual(parseHash("garbage"), { view: "chat" });
});

test("hashFor builds the URL for a view + target", () => {
  assert.equal(hashFor("chat"), "#/chat");
  assert.equal(hashFor("chat", { chatId: "abc" }), "#/chat/abc");
  assert.equal(hashFor("deck", { slug: "x" }), "#/deck/x");
  assert.equal(hashFor("report", { slug: "x" }), "#/report/x");
  assert.equal(hashFor("research", { slug: "x" }), "#/research/x");
  assert.equal(hashFor("themes"), "#/themes");
  assert.equal(hashFor("home"), "#/home");
});

test("hashFor refuses an artefact view without a slug", () => {
  assert.equal(hashFor("deck"), "#/chat");
  assert.equal(hashFor("report", {}), "#/chat");
});

test("hashFor and parseHash round-trip every route", () => {
  const routes = [
    { view: "chat", opts: { chatId: "c-1" } },
    { view: "deck", opts: { slug: "d-1" } },
    { view: "report", opts: { slug: "r-1" } },
    { view: "research", opts: { slug: "x-1" } },
    { view: "themes" },
    { view: "home" },
  ];
  for (const { view, opts } of routes) {
    assert.equal(parseHash(hashFor(view, opts)).view, view);
  }
});