Keep companywide channel view visible
This commit is contained in:
1 parent
26c933fad7
commit
b84162246a
5 files changed
+155
-52
No files matched your search
@@ -0,0 +1,93 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import type { AgentMessageRecord, AgentRecord } from "../../src/shared/types";
|
||||
import {
|
||||
DEFAULT_MESSAGE_FILTERS,
|
||||
filterChannelMessages,
|
||||
hasActiveMessageFilters,
|
||||
} from "../../src/renderer/components/communication/message-filters";
|
||||
|
||||
function agent(id: string, name: string): AgentRecord {
|
||||
return {
|
||||
id,
|
||||
companyId: "company-1",
|
||||
name,
|
||||
role: name,
|
||||
title: name,
|
||||
department: null,
|
||||
status: "active",
|
||||
reportsTo: null,
|
||||
connectorId: "openai-codex",
|
||||
workspaceId: null,
|
||||
model: null,
|
||||
capabilities: "",
|
||||
budgetMonthlyUsd: 0,
|
||||
spentMonthlyUsd: 0,
|
||||
metadataJson: "{}",
|
||||
heartbeatEnabled: false,
|
||||
heartbeatIntervalSec: 300,
|
||||
lastHeartbeatAt: null,
|
||||
createdAt: "2026-04-22T00:00:00.000Z",
|
||||
updatedAt: "2026-04-22T00:00:00.000Z",
|
||||
};
|
||||
}
|
||||
|
||||
function message(input: Partial<AgentMessageRecord>): AgentMessageRecord {
|
||||
return {
|
||||
id: input.id ?? "msg-1",
|
||||
companyId: "company-1",
|
||||
fromAgentId: input.fromAgentId ?? "agent-ceo",
|
||||
toAgentId: input.toAgentId ?? null,
|
||||
senderKind: input.senderKind ?? "agent",
|
||||
channel: input.channel ?? "company",
|
||||
channelTargetId: input.channelTargetId ?? null,
|
||||
subject: input.subject ?? "Subject",
|
||||
body: input.body ?? "Body",
|
||||
priority: input.priority ?? "normal",
|
||||
parentMessageId: input.parentMessageId ?? null,
|
||||
attachmentsJson: input.attachmentsJson ?? "[]",
|
||||
createdAt: input.createdAt ?? "2026-04-22T00:00:00.000Z",
|
||||
readAt: input.readAt ?? null,
|
||||
};
|
||||
}
|
||||
|
||||
describe("message filters", () => {
|
||||
it("keeps read and unread channel messages in the default channel view", () => {
|
||||
const read = message({ id: "read", readAt: "2026-04-22T00:00:01.000Z" });
|
||||
const unread = message({ id: "unread", readAt: null });
|
||||
|
||||
const result = filterChannelMessages(
|
||||
[read, unread],
|
||||
DEFAULT_MESSAGE_FILTERS,
|
||||
new Map(),
|
||||
"",
|
||||
);
|
||||
|
||||
expect(result.map((entry) => entry.id)).toEqual(["read", "unread"]);
|
||||
});
|
||||
|
||||
it("filters by text and sender inside the selected channel", () => {
|
||||
const ceo = agent("agent-ceo", "Ada CEO");
|
||||
const cto = agent("agent-cto", "Grace CTO");
|
||||
const messages = [
|
||||
message({ id: "ceo", fromAgentId: ceo.id, subject: "Launch", body: "Board update" }),
|
||||
message({ id: "cto", fromAgentId: cto.id, subject: "Infra", body: "Runtime ready" }),
|
||||
];
|
||||
|
||||
const result = filterChannelMessages(
|
||||
messages,
|
||||
{ ...DEFAULT_MESSAGE_FILTERS, search: "grace" },
|
||||
new Map([
|
||||
[ceo.id, ceo],
|
||||
[cto.id, cto],
|
||||
]),
|
||||
"",
|
||||
);
|
||||
|
||||
expect(result.map((entry) => entry.id)).toEqual(["cto"]);
|
||||
});
|
||||
|
||||
it("detects active message filters", () => {
|
||||
expect(hasActiveMessageFilters(DEFAULT_MESSAGE_FILTERS)).toBe(false);
|
||||
expect(hasActiveMessageFilters({ ...DEFAULT_MESSAGE_FILTERS, priority: "urgent" })).toBe(true);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user