Ctrl K
ComunidadGuías…

test/capsules-preference.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 fs = require("node:fs");
var path = require("node:path");
var attachExperimentalPreferences = require("../lib/users-experimental-preferences").attachExperimentalPreferences;
var serverTools = require("../lib/server-tools");
var attachSettings = require("../lib/server-settings").attachSettings;

function preferenceHarness() {
  var data = { users: [{ id: "u1" }, { id: "u2", capsulesEnabled: true }] };
  var saves = 0;
  var preferences = attachExperimentalPreferences({
    loadUsers: function () { return data; },
    saveUsers: function (next) { data = next; saves++; },
  });
  return { preferences: preferences, data: function () { return data; }, saves: function () { return saves; } };
}

test("Capsules default off and persist independently per user", function () {
  var fixture = preferenceHarness();
  assert.strictEqual(fixture.preferences.getCapsulesEnabled("u1"), false);
  assert.strictEqual(fixture.preferences.getCapsulesEnabled("u2"), true);
  assert.deepStrictEqual(fixture.preferences.setCapsulesEnabled("u1", true), { ok: true, capsulesEnabled: true });
  assert.strictEqual(fixture.preferences.getCapsulesEnabled("u1"), true);
  assert.strictEqual(fixture.preferences.getCapsulesEnabled("u2"), true);
  assert.strictEqual(fixture.saves(), 1);
});

test("disabled Capsules expose an empty browser catalog and reject direct operations", function () {
  var messages = [];
  var tools = serverTools.attachTools({
    users: { isMultiUser: function () { return false; } },
    projects: new Map(),
    isCapsulesEnabled: function () { return false; },
  });
  var ws = { send: function (payload) { messages.push(JSON.parse(payload)); } };
  assert.strictEqual(tools.handleMessage(ws, { type: "tools_list" }), true);
  assert.deepStrictEqual(messages, [{ type: "tools_state", tools: [] }]);
  assert.deepStrictEqual(tools.installedManifests("default"), []);
  assert.throws(function () {
    tools.controlForMate("default", "mate", "pig", "snapshot", {});
  }, /disabled in User Settings/);
});

test("the multi-user setting route persists the opt-in and refreshes Mate catalogs", function () {
  var saved = null;
  var refreshed = null;
  var user = { id: "u1", profile: { name: "One" } };
  var settings = attachSettings({
    users: {
      isMultiUser: function () { return true; },
      setCapsulesEnabled: function (userId, enabled) {
        saved = { userId: userId, enabled: enabled };
        return { ok: true, capsulesEnabled: enabled };
      },
    },
    mates: {},
    getMultiUserFromReq: function () { return user; },
    projects: new Map(),
    opts: {},
    CONFIG_DIR: "/tmp",
    onCapsulesPreferenceChanged: function (userId) { refreshed = userId; },
  });
  var response = { status: null, body: null, writeHead: function (status) { this.status = status; }, end: function (body) { this.body = JSON.parse(body); } };
  var request = {
    method: "PUT",
    on: function (event, callback) {
      if (event === "data") callback(JSON.stringify({ enabled: true }));
      if (event === "end") callback();
    },
  };
  assert.strictEqual(settings.handleRequest(request, response, "/api/user/capsules-enabled"), true);
  assert.deepStrictEqual(saved, { userId: "u1", enabled: true });
  assert.strictEqual(refreshed, "u1");
  assert.strictEqual(response.status, 200);
  assert.deepStrictEqual(response.body, { ok: true, capsulesEnabled: true });
});

test("User Settings presents Capsules as an opt-in experimental feature", function () {
  var root = path.join(__dirname, "..");
  var html = fs.readFileSync(path.join(root, "lib/public/index.html"), "utf8");
  var client = fs.readFileSync(path.join(root, "lib/public/modules/capsule-preference.js"), "utf8");
  var server = fs.readFileSync(path.join(root, "lib/server-settings.js"), "utf8");
  assert.match(html, /<body class="capsules-disabled">/);
  assert.match(html, /data-section="us-experimental"/);
  assert.match(html, /id="us-capsules-enabled"/);
  assert.match(client, /fetch\('\/api\/user\/capsules-enabled'/);
  assert.match(server, /profile\.capsulesEnabled = users\.getCapsulesEnabled\(mu\.id\)/);
  assert.match(server, /dc\.capsulesEnabled === true/);
});