AkurAI Build
Menu

popagent

public

Latest change 248b7c0673ea9d544f9e4738ee4d3e8ec2925924 - Add native BifrOSt Navigator browser provider with per-browser status LEDs by AkurAI Build

import { describe, expect, test } from "bun:test";
import { renderToStaticMarkup } from "react-dom/server";
import type { AgentSettings } from "../api-types";
import { AgentIdentityCard, AgentRosterRow, agentRosterGroups, AgentWorkSource, BrowserProviderLeds, RuntimeModelSource, scheduleTimingLabel, scheduleWorkspaceName } from "./AgentSettingsPage";

describe("global schedule view", () => {
  test("labels each schedule with its execution workspace", () => {
    expect(scheduleWorkspaceName("simulation", [
      { id: "default", name: "popagent", repositoryPath: "popagent", createdAt: "", updatedAt: "" },
      { id: "simulation", name: "Market Simulation", repositoryPath: "simulation", createdAt: "", updatedAt: "" },
    ])).toBe("Market Simulation");
    expect(scheduleTimingLabel({ source: "self-update", cron: "0 * * * *", nextRunAt: "2099-01-01T00:00:00Z" })).toBe("When idle");
  });
});

describe("agent work source", () => {
  test("labels user, self-update, and Build maintenance work explicitly", () => {
    expect(renderToStaticMarkup(<AgentWorkSource source="user" />)).toContain("source user");
    expect(renderToStaticMarkup(<AgentWorkSource source="self-update" />)).toContain("source self-update");
    expect(renderToStaticMarkup(<AgentWorkSource source="build-maintenance" />)).toContain("source build-maintenance");
  });
});

describe("runtime model source", () => {
  test("offers configured, local Titan, and OpenRouter free routes", () => {
    const markup = renderToStaticMarkup(
      <RuntimeModelSource value="local" onChange={() => {}} />,
    );
    expect(markup).toContain("Configured model");
    expect(markup).toContain("Titan local 9B");
    expect(markup).toContain("OpenRouter free router");
  });
});

describe("agent identity card", () => {
  test("shows the assigned person's portrait, title, department, and email", () => {
    const markup = renderToStaticMarkup(
      <AgentIdentityCard
        agentId="orchistrator"
        model="cx/gpt-5.6-luna-max"
        delegationEnabled={true}
      />,
    );
    expect(markup).toContain("Embla Náttsól");
    expect(markup).toContain("Operations Coordinator");
    expect(markup).toContain("Operations");
    expect(markup).toContain("mailto:embla@olibuijr.com");
    expect(markup).toContain("/api/company/avatars/6766bf84-a89a-4b01-bf21-94777efb2e7c");
    expect(markup).toContain("cx/gpt-5.6-luna-max");
  });
});

describe("agent roster row", () => {
  test("presents each agent as a compact identity row", () => {
    const markup = renderToStaticMarkup(
      <AgentRosterRow
        agent={{
          id: "researcher",
          name: "Researcher",
          description: "Evidence investigator",
          instructions: "Investigate.",
          model: "codex/gpt-5.6-luna-medium",
          sourceUrls: [],
          workspaceAccess: "read-only",
          browserAccess: "read-only",
          delegationEnabled: true,
          tools: [],
          createdAt: "",
          updatedAt: "",
        }}
        selected={true}
        onChoose={() => {}}
      />,
    );
    expect(markup).toContain("Salka Valgerðardóttir");
    expect(markup).toContain("Technical Documentation Lead");
    expect(markup).not.toContain("Evidence investigator");
    expect(markup).toContain("size-8");
    expect(markup).toContain('aria-pressed="true"');
  });

  test("does not repeat generated role copy beneath the staff title", () => {
    const markup = renderToStaticMarkup(
      <AgentRosterRow
        agent={{
          id: "staff-soley",
          name: "Mail API Engineer",
          description: "Mail API Engineer for AkurAI Communications, responsible for evidence-backed work within that specialty.",
          instructions: "Own mail API work.",
          model: "codex/gpt-5.6-luna-medium",
          sourceUrls: [],
          workspaceAccess: "read-write",
          browserAccess: "read-only",
          delegationEnabled: true,
          tools: [],
          createdAt: "",
          updatedAt: "",
        }}
        selected={false}
        onChoose={() => {}}
      />,
    );
    expect(markup).toContain("Sóley Hvannberg");
    expect(markup).toContain("Mail API Engineer");
    expect(markup).not.toContain("responsible for evidence-backed work");
  });
});

describe("agent roster groups", () => {
  const agent = (id: string, name: string): AgentSettings => ({
    id,
    name,
    description: "",
    instructions: "",
    model: null,
    sourceUrls: [],
    workspaceAccess: "none",
    browserAccess: "none",
    delegationEnabled: true,
    tools: [],
    createdAt: "",
    updatedAt: "",
  });

  test("groups agents by department and filters by name, role, or department", () => {
    const agents = [agent("orchistrator", "Orchistrator"), agent("staff-soley", "Mail API Engineer"), agent("custom", "Custom agent")];
    expect(agentRosterGroups(agents).map((group) => group.name)).toEqual(["Communications", "Operations", "Other agents"]);
    expect(agentRosterGroups(agents, "sóley")).toEqual([{ name: "Communications", members: [agents[1]!] }]);
    expect(agentRosterGroups(agents, "operations")).toEqual([{ name: "Operations", members: [agents[0]!] }]);
    expect(agentRosterGroups(agents, "nobody")).toEqual([]);
  });
});

describe("browser provider LEDs", () => {
  test("shows a green LED for working browsers, red for unavailable, and marks the selected provider", () => {
    const markup = renderToStaticMarkup(
      <BrowserProviderLeds selected="bifrost-navigator" health={{
        provider: "BifrOSt Navigator", healthy: false, headless: false, selected: "bifrost-navigator",
        providers: [
          { id: "agent-browser", label: "Headless AgentBrowser", healthy: true, headless: true, detail: "Chromium installed" },
          { id: "bifrost-navigator", label: "BifrOSt Navigator", healthy: false, headless: false, detail: "MCP socket unreachable" },
        ],
        enabled: true, scope: "thread", activeSessions: 0, profileConfigured: false, screencastEnabled: true, recordingEnabled: false,
      }} />,
    );
    expect(markup).toContain('aria-label="Headless AgentBrowser: working"');
    expect(markup).toContain("bg-emerald-500");
    expect(markup).toContain('aria-label="BifrOSt Navigator: unavailable"');
    expect(markup).toContain("bg-red-500");
    expect(markup).toContain("Selected");
    expect(markup).toContain("MCP socket unreachable");
  });

  test("pulses amber while health is still loading", () => {
    const markup = renderToStaticMarkup(<BrowserProviderLeds selected="agent-browser" />);
    expect(markup).toContain("bg-amber-400");
    expect(markup).toContain('aria-label="BifrOSt Navigator: checking"');
  });
});