Ctrl K
ComunidadGuías…

test/home-dock-preferences.test.js

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

Archivo original ↗Preguntar a KiBot
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" },
  });
});