mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-10-29 06:35:24 +00:00
feat: move desktop, status, import, audit and branding features into plugins
This commit is contained in:
1 parent
9d93fb0893
commit
1cdbfc674c
166 files changed
+21298
-12041
No files matched your search
@@ -0,0 +1,80 @@
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
|
||||
const access = vi.hoisted(() => ({ owned: true, shared: [] as number[] }));
|
||||
|
||||
vi.mock("../../database/repositories/factory.js", () => ({
|
||||
createCurrentHostResolutionRepository: () => ({
|
||||
isHostOwnedByUser: async () => access.owned,
|
||||
}),
|
||||
createCurrentRoleRepository: () => ({ listUserRoleIds: async () => [] }),
|
||||
createCurrentRbacAccessRepository: () => ({
|
||||
listVisibleHostAccessEntries: async () =>
|
||||
access.shared.map((hostId) => ({ hostId })),
|
||||
}),
|
||||
}));
|
||||
|
||||
import {
|
||||
provideActivity,
|
||||
recentActivity,
|
||||
type ActivityProvider,
|
||||
} from "../../plugins/activity-provider.js";
|
||||
|
||||
function fake(): ActivityProvider {
|
||||
return {
|
||||
record: vi.fn(async () => ({ status: "logged" as const, id: 1 })),
|
||||
list: vi.fn(async () => []),
|
||||
deleteByUserId: vi.fn(async () => {}),
|
||||
deleteByHostIds: vi.fn(async () => {}),
|
||||
};
|
||||
}
|
||||
|
||||
const entry = { type: "ssh", hostId: 1, hostName: "h" };
|
||||
|
||||
describe("recent activity provider", () => {
|
||||
it("is unavailable with no provider", async () => {
|
||||
expect(await recentActivity.record("u", entry)).toEqual({
|
||||
status: "unavailable",
|
||||
});
|
||||
expect(await recentActivity.list("u", 5)).toEqual([]);
|
||||
await expect(recentActivity.deleteByUserId("u")).resolves.toBeUndefined();
|
||||
await expect(recentActivity.deleteByHostId(7)).resolves.toBeUndefined();
|
||||
});
|
||||
|
||||
it("routes to the plugin and back to nothing when it goes", async () => {
|
||||
const plugin = fake();
|
||||
const remove = provideActivity("homepage", plugin);
|
||||
await recentActivity.record("u", entry);
|
||||
await recentActivity.deleteByHostId(7);
|
||||
expect(plugin.record).toHaveBeenCalledOnce();
|
||||
expect(plugin.deleteByHostIds).toHaveBeenCalledWith([7]);
|
||||
|
||||
remove();
|
||||
expect(await recentActivity.list("u", 5)).toEqual([]);
|
||||
expect(plugin.list).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("checks host access before the provider records", async () => {
|
||||
const plugin = fake();
|
||||
const remove = provideActivity("homepage", plugin);
|
||||
|
||||
access.owned = false;
|
||||
access.shared = [];
|
||||
expect(await recentActivity.record("u", entry)).toEqual({
|
||||
status: "denied",
|
||||
});
|
||||
expect(plugin.record).not.toHaveBeenCalled();
|
||||
|
||||
access.shared = [1];
|
||||
expect((await recentActivity.record("u", entry)).status).toBe("logged");
|
||||
remove();
|
||||
access.owned = true;
|
||||
});
|
||||
|
||||
it("refuses a second provider", () => {
|
||||
const remove = provideActivity("one", fake());
|
||||
expect(() => provideActivity("two", fake())).toThrow(
|
||||
/already provided by plugin "one"/,
|
||||
);
|
||||
remove();
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user