test/home-dock-preferences.test.js
Rama main · réplica de lectura del repositorio original.
var test = require("node:test");
var assert = require("node:assert/strict");
var attachHomeDockPreferences = require("../lib/users-home-dock-preferences").attachHomeDockPreferences;
var attachHomePreferences = require("../lib/server-home-preferences").attachHomePreferences;
function harness() {
var data = { users: [{ id: "u1" }, { id: "u2" }] };
var saves = 0;
var preferences = attachHomeDockPreferences({
loadUsers: function () { return data; },
saveUsers: function (next) { data = next; saves++; },
});
return { preferences: preferences, getData: function () { return data; }, getSaves: function () { return saves; } };
}
test("home dock preferences default to the closed conversation state", function () {
var fixture = harness();
assert.deepStrictEqual(fixture.preferences.getHomeDockPreference("u1"), {
dockOpen: false,
dockFocus: false,
dockWidth: null,
activeToolId: null,
});
});
test("home dock preferences roundtrip per user and preserve partial updates", function () {
var fixture = harness();
var first = fixture.preferences.setHomeDockPreference("u1", {
dockOpen: true,
dockFocus: true,
dockWidth: 612.4,
activeToolId: "board",
});
assert.deepStrictEqual(first.preference, { dockOpen: true, dockFocus: true, dockWidth: 612, activeToolId: "board" });
var second = fixture.preferences.setHomeDockPreference("u1", { dockOpen: false });
assert.deepStrictEqual(second.preference, { dockOpen: false, dockFocus: false, dockWidth: 612, activeToolId: "board" });
assert.deepStrictEqual(fixture.preferences.getHomeDockPreference("u2"), { dockOpen: false, dockFocus: false, dockWidth: null, activeToolId: null });
assert.strictEqual(fixture.getSaves(), 2);
});
test("home dock preferences normalize unsafe values", function () {
var fixture = harness();
var result = fixture.preferences.setHomeDockPreference("u1", {
dockOpen: "yes",
dockWidth: 9000,
activeToolId: "../../board",
});
assert.deepStrictEqual(result.preference, { dockOpen: false, dockFocus: false, dockWidth: 1600, activeToolId: null });
});
test("home dock WebSocket messages roundtrip and broadcast only to the same user", function () {
var fixture = harness();
var ownerMessages = [];
var secondOwnerMessages = [];
var otherMessages = [];
var owner = { _clayUser: { id: "u1" }, send: function (value) { ownerMessages.push(JSON.parse(value)); } };
var secondOwner = { _clayUser: { id: "u1" }, send: function (value) { secondOwnerMessages.push(JSON.parse(value)); } };
var other = { _clayUser: { id: "u2" }, send: function (value) { otherMessages.push(JSON.parse(value)); } };
var handler = attachHomePreferences({
users: {
isMultiUser: function () { return true; },
getHomeDockPreference: fixture.preferences.getHomeDockPreference,
setHomeDockPreference: fixture.preferences.setHomeDockPreference,
},
projects: new Map([["one", {
forEachClient: function (visit) { visit(owner); visit(secondOwner); visit(other); },
}]]),
});
assert.strictEqual(handler.handleMessage(owner, {
type: "home_dock_set",
preference: { dockOpen: true, dockFocus: true, dockWidth: 640, activeToolId: "board" },
}), true);
assert.deepStrictEqual(ownerMessages[0].preference, { dockOpen: true, dockFocus: true, dockWidth: 640, activeToolId: "board" });
assert.deepStrictEqual(secondOwnerMessages[0].preference, ownerMessages[0].preference);
assert.strictEqual(otherMessages.length, 0);
ownerMessages.length = 0;
assert.strictEqual(handler.handleMessage(owner, { type: "home_dock_get" }), true);
assert.deepStrictEqual(ownerMessages[0], {
type: "home_dock_state",
preference: { dockOpen: true, dockFocus: true, dockWidth: 640, activeToolId: "board" },
});
});