First Release of Claw3D (#11)
Co-authored-by: iamlukethedev <iamlukethedev@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,135 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
|
||||
import {
|
||||
resolveGatewayConfigRecord,
|
||||
resolveGatewayModelsSyncIntent,
|
||||
resolveSandboxRepairAgentIds,
|
||||
resolveSandboxRepairIntent,
|
||||
shouldRefreshGatewayConfigForSettingsRoute,
|
||||
} from "@/features/agents/operations/gatewayConfigSyncWorkflow";
|
||||
import type { GatewayModelPolicySnapshot } from "@/lib/gateway/models";
|
||||
|
||||
describe("gatewayConfigSyncWorkflow", () => {
|
||||
it("resolves config record only when snapshot config is an object", () => {
|
||||
expect(resolveGatewayConfigRecord(null)).toBeNull();
|
||||
expect(resolveGatewayConfigRecord({ config: [] } as unknown as GatewayModelPolicySnapshot)).toBeNull();
|
||||
|
||||
const snapshot: GatewayModelPolicySnapshot = {
|
||||
config: {
|
||||
agents: {
|
||||
list: [{ id: "agent-1" }],
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
expect(resolveGatewayConfigRecord(snapshot)).toEqual(snapshot.config);
|
||||
});
|
||||
|
||||
it("finds sandbox repair candidates with sandbox all mode and empty sandbox allowlist", () => {
|
||||
const snapshot = {
|
||||
config: {
|
||||
agents: {
|
||||
list: [
|
||||
{
|
||||
id: "agent-broken",
|
||||
sandbox: { mode: "all" },
|
||||
tools: { sandbox: { tools: { allow: [] } } },
|
||||
},
|
||||
{
|
||||
id: "agent-ok-mode",
|
||||
sandbox: { mode: "off" },
|
||||
tools: { sandbox: { tools: { allow: [] } } },
|
||||
},
|
||||
{
|
||||
id: "agent-ok-allow",
|
||||
sandbox: { mode: "all" },
|
||||
tools: { sandbox: { tools: { allow: ["*"] } } },
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
} as unknown as GatewayModelPolicySnapshot;
|
||||
|
||||
expect(resolveSandboxRepairAgentIds(snapshot)).toEqual(["agent-broken"]);
|
||||
});
|
||||
|
||||
it("builds sandbox repair intent from status, attempt guard, and candidate list", () => {
|
||||
const snapshot = {
|
||||
config: {
|
||||
agents: {
|
||||
list: [
|
||||
{
|
||||
id: "agent-broken",
|
||||
sandbox: { mode: "all" },
|
||||
tools: { sandbox: { tools: { allow: [] } } },
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
} as unknown as GatewayModelPolicySnapshot;
|
||||
|
||||
expect(
|
||||
resolveSandboxRepairIntent({
|
||||
status: "disconnected",
|
||||
attempted: false,
|
||||
snapshot,
|
||||
})
|
||||
).toEqual({ kind: "skip", reason: "not-connected" });
|
||||
|
||||
expect(
|
||||
resolveSandboxRepairIntent({
|
||||
status: "connected",
|
||||
attempted: true,
|
||||
snapshot,
|
||||
})
|
||||
).toEqual({ kind: "skip", reason: "already-attempted" });
|
||||
|
||||
expect(
|
||||
resolveSandboxRepairIntent({
|
||||
status: "connected",
|
||||
attempted: false,
|
||||
snapshot,
|
||||
})
|
||||
).toEqual({ kind: "repair", agentIds: ["agent-broken"] });
|
||||
});
|
||||
|
||||
it("gates settings-route refresh on route flag, inspect agent id, and connected status", () => {
|
||||
expect(
|
||||
shouldRefreshGatewayConfigForSettingsRoute({
|
||||
status: "connected",
|
||||
settingsRouteActive: false,
|
||||
inspectSidebarAgentId: "agent-1",
|
||||
})
|
||||
).toBe(false);
|
||||
|
||||
expect(
|
||||
shouldRefreshGatewayConfigForSettingsRoute({
|
||||
status: "connected",
|
||||
settingsRouteActive: true,
|
||||
inspectSidebarAgentId: null,
|
||||
})
|
||||
).toBe(false);
|
||||
|
||||
expect(
|
||||
shouldRefreshGatewayConfigForSettingsRoute({
|
||||
status: "connecting",
|
||||
settingsRouteActive: true,
|
||||
inspectSidebarAgentId: "agent-1",
|
||||
})
|
||||
).toBe(false);
|
||||
|
||||
expect(
|
||||
shouldRefreshGatewayConfigForSettingsRoute({
|
||||
status: "connected",
|
||||
settingsRouteActive: true,
|
||||
inspectSidebarAgentId: "agent-1",
|
||||
})
|
||||
).toBe(true);
|
||||
});
|
||||
|
||||
it("returns model sync load intent only when connected", () => {
|
||||
expect(resolveGatewayModelsSyncIntent({ status: "connected" })).toEqual({ kind: "load" });
|
||||
expect(resolveGatewayModelsSyncIntent({ status: "connecting" })).toEqual({ kind: "clear" });
|
||||
expect(resolveGatewayModelsSyncIntent({ status: "disconnected" })).toEqual({ kind: "clear" });
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user