mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-07-17 05:43:36 +00:00
feat: refactor rbac/sharing to support new permissions and auth types
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import { ServerStatusStore } from "../../lib/server-status-store";
|
||||
|
||||
describe("ServerStatusStore", () => {
|
||||
it("notifies only listeners for hosts whose status value changed", () => {
|
||||
const store = new ServerStatusStore();
|
||||
store.setEnabledHostIds(new Set([1, 2, 3]));
|
||||
|
||||
const on1 = vi.fn();
|
||||
const on2 = vi.fn();
|
||||
const onAll = vi.fn();
|
||||
store.subscribeHost(1, on1);
|
||||
store.subscribeHost(2, on2);
|
||||
store.subscribeAll(onAll);
|
||||
|
||||
store.applyStatuses(
|
||||
new Map([
|
||||
[1, { status: "online", lastChecked: "t1" }],
|
||||
[2, { status: "offline", lastChecked: "t1" }],
|
||||
[3, { status: "online", lastChecked: "t1" }],
|
||||
]),
|
||||
);
|
||||
expect(on1).toHaveBeenCalledTimes(1);
|
||||
expect(on2).toHaveBeenCalledTimes(1);
|
||||
expect(onAll).toHaveBeenCalledTimes(1);
|
||||
|
||||
on1.mockClear();
|
||||
on2.mockClear();
|
||||
onAll.mockClear();
|
||||
|
||||
// Only host 2 flips; host 1 lastChecked changes but status stays online.
|
||||
store.applyStatuses(
|
||||
new Map([
|
||||
[1, { status: "online", lastChecked: "t2" }],
|
||||
[2, { status: "online", lastChecked: "t2" }],
|
||||
[3, { status: "online", lastChecked: "t2" }],
|
||||
]),
|
||||
);
|
||||
expect(on1).not.toHaveBeenCalled();
|
||||
expect(on2).toHaveBeenCalledTimes(1);
|
||||
expect(onAll).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it("does not notify when the status map is unchanged", () => {
|
||||
const store = new ServerStatusStore();
|
||||
store.setEnabledHostIds(new Set([1]));
|
||||
store.applyStatuses(
|
||||
new Map([[1, { status: "online", lastChecked: "t1" }]]),
|
||||
);
|
||||
|
||||
const on1 = vi.fn();
|
||||
store.subscribeHost(1, on1);
|
||||
store.applyStatuses(
|
||||
new Map([[1, { status: "online", lastChecked: "t9" }]]),
|
||||
);
|
||||
expect(on1).not.toHaveBeenCalled();
|
||||
expect(store.getStatus(1)).toBe("online");
|
||||
});
|
||||
|
||||
it("returns offline for disabled hosts", () => {
|
||||
const store = new ServerStatusStore();
|
||||
store.applyStatuses(new Map([[5, { status: "online", lastChecked: "t" }]]));
|
||||
expect(store.getStatus(5)).toBe("offline");
|
||||
store.setEnabledHostIds(new Set([5]));
|
||||
expect(store.getStatus(5)).toBe("online");
|
||||
});
|
||||
|
||||
it("emits meta listeners when initial load completes", () => {
|
||||
const store = new ServerStatusStore();
|
||||
const onMeta = vi.fn();
|
||||
store.subscribeMeta(onMeta);
|
||||
store.setInitialLoadComplete(true);
|
||||
expect(onMeta).toHaveBeenCalledTimes(1);
|
||||
store.setInitialLoadComplete(true);
|
||||
expect(onMeta).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user