test/home-notification-suppression.test.js
Rama main · réplica de lectura del repositorio original.
var assert = require("node:assert/strict");
var fs = require("node:fs");
var path = require("node:path");
var test = require("node:test");
var attachHomeChat = require("../lib/server-home-chat").attachHomeChat;
var shouldSuppressHomeResponse = require("../lib/home-response-notifications").shouldSuppressHomeResponse;
function projectsWith(ws) {
return new Map([["shell", {
forEachClient: function (fn) { fn(ws); },
}]]);
}
test("only a visibly presented exact Home Mate session suppresses its response notification", function () {
var ws = {
_clayUser: { id: "u1" },
_homeChatPresented: true,
_homeChatTap: { mateId: "builtin:clay", mateSlug: "mate-clay", sessionId: 7, sessionReference: "local:7" },
};
var projects = projectsWith(ws);
var session = { localId: 7, cliSessionId: null, ownerId: "u1" };
assert.equal(shouldSuppressHomeResponse(projects, "mate-clay", session), true);
ws._homeChatTap.sessionId = 8;
ws._homeChatTap.sessionReference = "local:8";
assert.equal(shouldSuppressHomeResponse(projects, "mate-clay", session), false);
ws._homeChatTap = { mateId: "builtin:clay", mateSlug: "mate-another", sessionId: 7, sessionReference: "local:7" };
assert.equal(shouldSuppressHomeResponse(projects, "mate-clay", session), false);
ws._homeChatTap = { mateId: "builtin:clay", mateSlug: "mate-clay", sessionId: 7, sessionReference: "local:7" };
ws._clayUser.id = "u2";
assert.equal(shouldSuppressHomeResponse(projects, "mate-clay", session), false);
ws._clayUser.id = "u1";
ws._homeChatPresented = false;
assert.equal(shouldSuppressHomeResponse(projects, "mate-clay", session), false);
});
test("promoted Home session identity remains an exact suppression match", function () {
var ws = {
_clayUser: { id: "u1" },
_homeChatPresented: true,
_homeChatTap: { mateId: "mate-a", mateSlug: "mate-mate-a", sessionId: 7, sessionReference: "durable-7" },
};
var session = { localId: 7, cliSessionId: "durable-7", ownerId: "u1" };
assert.equal(shouldSuppressHomeResponse(projectsWith(ws), "mate-mate-a", session), true);
ws._homeChatTap.sessionReference = "another-session";
assert.equal(shouldSuppressHomeResponse(projectsWith(ws), "mate-mate-a", session), false);
});
test("project context delegates Home presentation on the response WebSocket", function () {
var projectSource = fs.readFileSync(path.join(__dirname, "../lib/project.js"), "utf8");
var delegation = projectSource.slice(projectSource.indexOf("// --- DM messages"), projectSource.indexOf("// --- @Mention"));
assert.match(delegation, /msg\.type === "home_mate_present"/);
assert.match(delegation, /home_mate_present[\s\S]*opts\.onDmMessage\(ws, msg, slug\)/);
var handler = attachHomeChat({
users: { isMultiUser: function () { return true; } },
mates: {},
projects: new Map(),
addProject: function () {},
});
var ws = { readyState: 1 };
assert.equal(handler.handleMessage(ws, { type: "home_mate_present", visible: true }), true);
assert.equal(ws._homeChatPresented, true);
ws._clayUser = { id: "u1" };
ws._homeChatTap = { mateId: "builtin:clay", mateSlug: "mate-clay", sessionId: 7, sessionReference: "local:7" };
assert.equal(shouldSuppressHomeResponse(projectsWith(ws), "mate-clay", { localId: 7, ownerId: "u1" }), true);
assert.equal(handler.handleMessage(ws, { type: "home_mate_close" }), true);
assert.equal(ws._homeChatPresented, false);
});
test("Home reports only visible-document presentation and resyncs lifecycle changes", function () {
var source = fs.readFileSync(path.join(__dirname, "../lib/public/modules/app-home-hub.js"), "utf8");
assert.match(source, /type: "home_mate_present", visible: homeHubVisible && !document\.hidden/);
assert.match(source, /document\.addEventListener\("visibilitychange", syncHomePresentation\)/);
assert.match(source, /state\.connected !== prev\.connected && state\.connected && homeHubVisible/);
assert.match(source, /homeHub\.classList\.remove\("hidden"\);[\s\S]{0,120}syncHomePresentation\(\)/);
assert.match(source, /homeHub\.classList\.add\("hidden"\);\s*syncHomePresentation\(\)/);
});