test/home-surface-boot.test.js
Rama main · réplica de lectura del repositorio original.
var test = require("node:test");
var assert = require("node:assert/strict");
var fs = require("node:fs");
var path = require("node:path");
var pathToFileURL = require("node:url").pathToFileURL;
var root = path.join(__dirname, "..");
test("root and explicit project boots default to the project workspace", async function () {
var boot = await import(pathToFileURL(path.join(root, "lib/public/modules/home-surface-boot.js")).href);
assert.equal(boot.resolveHomeBootDestination({ surfaceLoaded: false, currentSlug: null, projectsLoaded: false }), "wait");
assert.equal(boot.resolveHomeBootDestination({ surfaceLoaded: true, dockLoaded: true, surface: "home", currentSlug: "alpha", pathname: "/p/alpha/" }), "project");
assert.equal(boot.resolveHomeBootDestination({ surfaceLoaded: true, dockLoaded: true, surface: "home", currentSlug: "alpha", pathname: "/", paneMode: true }), "project");
assert.equal(boot.resolveHomeBootDestination({ surfaceLoaded: false, dockLoaded: false, surface: "home", currentSlug: "alpha", pathname: "/" }), "project");
assert.equal(boot.resolveHomeBootDestination({ surfaceLoaded: true, dockLoaded: true, surface: "project", currentSlug: "alpha", pathname: "/" }), "project");
assert.equal(boot.resolveHomeBootDestination({ surfaceLoaded: true, dockLoaded: true, surface: "home", currentSlug: "alpha", pathname: "/" }), "project");
assert.equal(boot.resolveHomeBootDestination({ surfaceLoaded: true, dockLoaded: false, surface: "home", currentSlug: null, pathname: "/" }), "wait");
assert.equal(boot.resolveHomeBootDestination({ surfaceLoaded: true, projectsLoaded: true, dockLoaded: true, surface: "home", currentSlug: null, pathname: "/" }), "projects");
});
test("hard-refresh after explicit Home returns to the server-selected project", async function () {
var originals = { document: global.document, location: global.location, history: global.history };
var bodyClasses = new Set();
var overlayClasses = new Set(["hidden"]);
var overlayMessage = { textContent: "Connecting…" };
global.document = {
body: { classList: { add: function (name) { bodyClasses.add(name); }, remove: function (name) { bodyClasses.delete(name); } } },
getElementById: function (id) {
if (id === "connect-overlay") return { classList: { add: function (name) { overlayClasses.add(name); } } };
if (id === "connect-overlay-msg") return overlayMessage;
return null;
},
};
global.location = { pathname: "/" };
var routes = [];
global.history = { replaceState: function (state, title, route) { routes.push(route); } };
try {
var storeModule = await import(pathToFileURL(path.join(root, "lib/public/modules/store.js")).href);
var surface = await import(pathToFileURL(path.join(root, "lib/public/modules/home-surface.js")).href);
var wsRef = await import(pathToFileURL(path.join(root, "lib/public/modules/ws-ref.js")).href);
var boot = await import(pathToFileURL(path.join(root, "lib/public/modules/home-surface-boot.js")).href);
storeModule.createStore({
connected: true,
paneMode: false,
currentSlug: "alpha",
homeSurfaceLoaded: false,
homeDockPreferenceLoaded: false,
homePrimarySurface: null,
homeSurfaceProjectSlug: null,
homeSurfaceIntent: null,
homeChatMateId: null,
homePreferredMateId: null,
homeActiveSessionByMate: {},
homeSidebarCollapsed: false,
homeMatesCollapsed: false,
homeChatScope: "all",
dockOpen: true,
dockFocus: true,
dockActiveToolId: "translator",
dockLibraryOpen: false,
});
boot.initHomeSurfaceBoot();
assert.equal(bodyClasses.has("home-surface-boot-pending"), false);
assert.equal(overlayMessage.textContent, "Restoring your workspace…");
assert.equal(storeModule.store.get('homeSurfaceBootResolved'), true);
assert.equal(storeModule.store.get('homeSurfaceRestoreRequested'), undefined);
assert.deepEqual(routes, ["/p/alpha/"]);
surface.handleHomeSurfaceState({ preference: {
surface: "home",
projectSlug: "alpha",
activeMateId: "mate-a",
activeSessionByMate: { "mate-a": "session-a" },
sidebarCollapsed: true,
matesCollapsed: true,
chatScope: "current",
} });
assert.equal(storeModule.store.get('homeSurfaceRestoreRequested'), undefined);
storeModule.store.set({ homeDockPreferenceLoaded: true });
assert.equal(storeModule.store.get('homeSurfaceBootResolved'), true);
assert.equal(storeModule.store.get('homeSurfaceRestoreRequested'), undefined);
assert.equal(storeModule.store.get('homePreferredMateId'), "mate-a");
assert.deepEqual(storeModule.store.get('homeActiveSessionByMate'), { "mate-a": "session-a" });
assert.equal(storeModule.store.get('homeSidebarCollapsed'), true);
assert.equal(storeModule.store.get('homeMatesCollapsed'), true);
assert.equal(storeModule.store.get('homeChatScope'), "current");
assert.equal(storeModule.store.get('dockOpen'), true);
assert.equal(storeModule.store.get('dockFocus'), true);
assert.equal(storeModule.store.get('dockActiveToolId'), "translator");
var sent = [];
wsRef.setWs({ readyState: 1, send: function (value) { sent.push(JSON.parse(value)); } });
surface.updateHomeSurfacePreference({ matesCollapsed: false });
assert.equal(storeModule.store.get('homeMatesCollapsed'), false);
assert.deepEqual(sent, [{ type: "home_surface_set", preference: { matesCollapsed: false } }]);
assert.equal(bodyClasses.has("home-surface-boot-pending"), false);
assert.deepEqual(routes, ["/p/alpha/"]);
surface.handleHomeSurfaceState({ preference: {
surface: "home", projectSlug: "alpha", activeMateId: "mate-a",
activeSessionByMate: { "mate-a": "session-a" }, sidebarCollapsed: true,
matesCollapsed: true,
chatScope: "current",
} });
assert.equal(storeModule.store.get('homeSurfaceBootResolved'), true);
assert.equal(storeModule.store.get('homeSurfaceRestoreRequested'), undefined);
assert.deepEqual(routes, ["/p/alpha/"]);
} finally {
global.document = originals.document;
global.location = originals.location;
global.history = originals.history;
}
});
test("legacy Home entry points are absent while Capsule runtime and preference migration remain", function () {
var app = fs.readFileSync(path.join(root, "lib/public/app.js"), "utf8");
var hub = fs.readFileSync(path.join(root, "lib/public/modules/app-home-hub.js"), "utf8");
var surface = fs.readFileSync(path.join(root, "lib/public/modules/home-surface.js"), "utf8");
var dock = fs.readFileSync(path.join(root, "lib/public/modules/home-dock.js"), "utf8");
var server = fs.readFileSync(path.join(root, "lib/server.js"), "utf8");
var markup = fs.readFileSync(path.join(root, "lib/public/index.html"), "utf8");
assert.doesNotMatch(markup, /id="home-hub"|id="home-sidebar"|id="home-debates-archive"|id="mobile-home-btn"/);
assert.match(markup, /retained-capsule-host-template[\s\S]*home-tool-workbench/);
assert.doesNotMatch(app, /initHomeHub\(\)|initHomeSidebar\(\)/);
assert.match(app, /initHomeSurfaceBoot\(\);[\s\S]*connect\(\);/);
assert.match(surface, /homeActiveSessionByMate: normalizeSessions\(preference\.activeSessionByMate\)/);
assert.match(surface, /homeChatScope: normalizeChatScope\(preference\.chatScope\)/);
assert.match(dock, /homeDockPreferenceLoaded: true[\s\S]*dockActiveToolId: saved\.activeToolId \|\| null[\s\S]*dockFocus: saved\.dockOpen === true && saved\.dockFocus === true/);
assert.match(server, /getHomeSurfacePreference[\s\S]*preferredContextSlug[\s\S]*isOrdinaryProject\(preferredContextSlug\)[\s\S]*if \(!targetSlug && isOrdinaryProject\(lastProject\)\)/);
assert.match(server, /if \(targetSlug\) \{\s*sendAppShell\(req, res, targetSlug\)/);
assert.match(hub, /export function showHomeHub/);
});