Land the pre-talk WebUI campaign: first-frame stability (pre-paint theme boot via CSP-safe public/theme-boot.js, self-hosted fonts + OFL license), streaming performance (rAF token batching, throttled flush, streaming markdown with deferred highlight, 160-row windowing, swarm state in its own store slice with per-run coalescing), correctness (FIFO tool matching, retry preserves request semantics, display/request separation, cache-hit session refresh, multi-tab message.received), guided-minimalism welcome (time-aware greeting + brand lockup + 4 quick actions + collapsible library, fill-first affordance), SwarmDashboard rebuild with honest indeterminate progress, five-locale copy de-jargoning with lazy locale chunks, accessibility Level-A fixes (color-blind metric glyphs, aria-live streaming, skip link, focus-visible affordances), robustness (markdown link/table/KaTeX overflow, safe localStorage, portal modal), and '/' now opens the product with marketing moved to /about.
16 lines
555 B
TypeScript
16 lines
555 B
TypeScript
import { render } from "@testing-library/react";
|
|
import { AgentAvatar } from "../AgentAvatar";
|
|
|
|
describe("AgentAvatar", () => {
|
|
it("renders the brand mark as a decorative 32px avatar", () => {
|
|
const { container } = render(<AgentAvatar />);
|
|
const wrapper = container.firstElementChild;
|
|
const mark = wrapper?.querySelector("svg");
|
|
|
|
expect(wrapper).toHaveAttribute("aria-hidden", "true");
|
|
expect(wrapper).toHaveClass("h-8", "w-8");
|
|
expect(mark).toHaveClass("h-8", "w-8");
|
|
expect(container).not.toHaveTextContent("P");
|
|
});
|
|
});
|