Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
155 changes: 18 additions & 137 deletions __tests__/benchmarks-page.test.tsx
Original file line number Diff line number Diff line change
@@ -1,147 +1,28 @@
/** @jest-environment jsdom */

import React from 'react';
import { render, screen, fireEvent } from '@testing-library/react';
import BenchmarksPage from '@/app/benchmarks/page';
import React from "react";
import { render, screen } from "@testing-library/react";

describe('Benchmarks Page', () => {
test('renders main heading', () => {
render(<BenchmarksPage />);

expect(screen.getByRole('heading', { name: /performance benchmarks/i })).toBeInTheDocument();
});

test('renders page description', () => {
render(<BenchmarksPage />);

expect(screen.getByText(/comprehensive performance metrics for top skills/i)).toBeInTheDocument();
});

test('displays environment information', () => {
render(<BenchmarksPage />);

expect(screen.getByText(/hardware:/i)).toBeInTheDocument();
expect(screen.getByText(/model:/i)).toBeInTheDocument();
expect(screen.getByText(/date:/i)).toBeInTheDocument();
});

test('renders category filters', () => {
render(<BenchmarksPage />);

expect(screen.getByText(/all categories/i)).toBeInTheDocument();
expect(screen.getByText(/filter by category/i)).toBeInTheDocument();
});
jest.mock("@/lib/agent-benchmarks", () => ({
agentBenchmarksData: [{ id: "sample-benchmark" }],
}));

test('renders skill cards with benchmark data', () => {
render(<BenchmarksPage />);

// Should render multiple skill cards (using getAllByText since they appear in both cards and table)
expect(screen.getAllByText('Web Search')[0]).toBeInTheDocument();
expect(screen.getAllByText('File Operations')[0]).toBeInTheDocument();
expect(screen.getAllByText('Code Execution')[0]).toBeInTheDocument();
});
jest.mock("@/app/benchmarks/benchmarks-client", () => ({
BenchmarksClient: ({ data }: { data: unknown[] }) => (
<div>
<h1>Agent Benchmark Suite</h1>
<span data-testid="benchmarks-count">{data.length}</span>
</div>
),
}));

test('displays latency metrics', () => {
render(<BenchmarksPage />);

// Check for latency labels
const p50Labels = screen.getAllByText('p50');
const p95Labels = screen.getAllByText('p95');
const p99Labels = screen.getAllByText('p99');

expect(p50Labels.length).toBeGreaterThan(0);
expect(p95Labels.length).toBeGreaterThan(0);
expect(p99Labels.length).toBeGreaterThan(0);
});
import BenchmarksPage from "@/app/benchmarks/page";

test('displays throughput and reliability metrics', () => {
describe("Benchmarks Page", () => {
test("renders benchmarks client", () => {
render(<BenchmarksPage />);

expect(screen.getAllByText(/throughput/i).length).toBeGreaterThan(0);
expect(screen.getAllByText(/reliability/i).length).toBeGreaterThan(0);
});

test('displays resource usage information', () => {
render(<BenchmarksPage />);

expect(screen.getAllByText(/resource usage/i).length).toBeGreaterThan(0);
expect(screen.getAllByText(/avg memory/i).length).toBeGreaterThan(0);
});

test('displays historical trends', () => {
render(<BenchmarksPage />);

expect(screen.getAllByText(/historical trend/i).length).toBeGreaterThan(0);
expect(screen.getAllByText(/last 5 runs/i).length).toBeGreaterThan(0);
});

test('renders detailed comparison table', () => {
render(<BenchmarksPage />);

expect(screen.getByText(/detailed comparison/i)).toBeInTheDocument();
// Use getByRole to target table header specifically
expect(screen.getByRole('columnheader', { name: /skill/i })).toBeInTheDocument();
expect(screen.getByText(/req\/sec/i)).toBeInTheDocument();
expect(screen.getByText(/success %/i)).toBeInTheDocument();
});

test('renders metrics explanation section', () => {
render(<BenchmarksPage />);

expect(screen.getByText(/metrics explained/i)).toBeInTheDocument();
expect(screen.getByText(/latency percentiles/i)).toBeInTheDocument();
expect(screen.getByText(/reliability metrics/i)).toBeInTheDocument();
});

test('category filter buttons are clickable', () => {
render(<BenchmarksPage />);

const allCategoriesButton = screen.getByText(/all categories/i);
expect(allCategoriesButton).toBeInTheDocument();

fireEvent.click(allCategoriesButton);
expect(allCategoriesButton).toBeInTheDocument();
});

test('displays skill descriptions', () => {
render(<BenchmarksPage />);

expect(screen.getByText(/search and retrieve web content/i)).toBeInTheDocument();
expect(screen.getByText(/read, write, and manage files/i)).toBeInTheDocument();
});

test('renders category badges', () => {
render(<BenchmarksPage />);

// Categories should be displayed as badges
const categoryBadges = screen.getAllByText(/research|system|development|integration/i);
expect(categoryBadges.length).toBeGreaterThan(0);
});

test('comparison table has sortable columns', () => {
render(<BenchmarksPage />);

// Check for sort icons or indicators in table header
const skillHeader = screen.getByRole('columnheader', { name: /skill/i });
expect(skillHeader).toBeInTheDocument();
});

test('displays multiple benchmark skills', () => {
render(<BenchmarksPage />);

// Should render at least 8 skills as per requirement (using getAllByText since they appear in both cards and table)
expect(screen.getAllByText('Web Search')[0]).toBeInTheDocument();
expect(screen.getAllByText('File Operations')[0]).toBeInTheDocument();
expect(screen.getAllByText('Code Execution')[0]).toBeInTheDocument();
expect(screen.getAllByText('API Integration')[0]).toBeInTheDocument();
expect(screen.getAllByText('Database Queries')[0]).toBeInTheDocument();
expect(screen.getAllByText('Image Processing')[0]).toBeInTheDocument();
expect(screen.getAllByText('Text Generation')[0]).toBeInTheDocument();
expect(screen.getAllByText('Notifications')[0]).toBeInTheDocument();
});

test('renders without errors', () => {
const { container } = render(<BenchmarksPage />);
expect(container).toBeInTheDocument();
expect(screen.getByRole("heading", { name: /agent benchmark suite/i })).toBeInTheDocument();
expect(screen.getByTestId("benchmarks-count")).toHaveTextContent("1");
});
});
99 changes: 19 additions & 80 deletions __tests__/changelog-content.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,36 +22,31 @@ jest.mock("next/link", () => {

const mockEntries: ChangelogEntry[] = [
{
id: "1",
date: "2026-02-08",
title: "New Feature Release",
description: "Added new feature by @user1",
description: "Added new feature",
category: "feature",
link: "/feature",
pr: "https://github.com/test/pr/1",
prNumber: 11,
prUrl: "https://github.com/test/pr/11",
},
{
id: "2",
date: "2026-02-07",
title: "Bug Fix",
description: "Fixed bug by @user2",
category: "fix",
link: "/fix",
pr: "https://github.com/test/pr/2",
description: "Fixed bug",
category: "bugfix",
prNumber: 12,
prUrl: "https://github.com/test/pr/12",
},
{
id: "3",
date: "2026-02-06",
title: "Documentation Update",
description: "Updated docs by @user3",
description: "Updated docs",
category: "docs",
link: "/docs",
pr: "https://github.com/test/pr/3",
},
{
date: "2026-02-05",
title: "Code Refactor",
description: "Refactored code by @user4",
category: "refactor",
link: "/refactor",
pr: "https://github.com/test/pr/4",
prNumber: 13,
prUrl: "https://github.com/test/pr/13",
},
];

Expand All @@ -61,80 +56,24 @@ describe("ChangelogContent", () => {
expect(screen.getByText("New Feature Release")).toBeInTheDocument();
expect(screen.getByText("Bug Fix")).toBeInTheDocument();
expect(screen.getByText("Documentation Update")).toBeInTheDocument();
expect(screen.getByText("Code Refactor")).toBeInTheDocument();
});

it("displays stats banner", () => {
render(<ChangelogContent entries={mockEntries} />);
expect(screen.getByText("Changes This Month")).toBeInTheDocument();
expect(screen.getByText("Features Shipped")).toBeInTheDocument();
expect(screen.getByText("Bugs Fixed")).toBeInTheDocument();
});

it("displays category filter tabs", () => {
render(<ChangelogContent entries={mockEntries} />);
const buttons = screen.getAllByRole("button");
const buttonTexts = buttons.map(b => b.textContent);
expect(buttonTexts).toContain("All");
expect(buttonTexts).toContain("Features");
expect(buttonTexts).toContain("Fixes");
expect(buttonTexts).toContain("Docs");
expect(buttonTexts).toContain("Refactors");
expect(buttonTexts).toContain("Tests");
const buttonTexts = screen.getAllByRole("button").map((b) => b.textContent);
expect(buttonTexts).toEqual(expect.arrayContaining(["All", "Features", "Bugfixes", "Docs"]));
});

it("filters by feature category", () => {
it("filters by bugfix category", () => {
render(<ChangelogContent entries={mockEntries} />);
const featuresButton = screen.getAllByRole("button").find(b => b.textContent === "Features");
fireEvent.click(featuresButton!);

expect(screen.getByText("New Feature Release")).toBeInTheDocument();
expect(screen.queryByText("Bug Fix")).not.toBeInTheDocument();
expect(screen.queryByText("Documentation Update")).not.toBeInTheDocument();
});
fireEvent.click(screen.getByRole("button", { name: "Bugfixes" }));

it("filters by fix category", () => {
render(<ChangelogContent entries={mockEntries} />);
const fixesButton = screen.getAllByRole("button").find(b => b.textContent === "Fixes");
fireEvent.click(fixesButton!);

expect(screen.getByText("Bug Fix")).toBeInTheDocument();
expect(screen.queryByText("New Feature Release")).not.toBeInTheDocument();
});

it("filters by docs category", () => {
render(<ChangelogContent entries={mockEntries} />);
const docsButton = screen.getAllByRole("button").find(b => b.textContent === "Docs");
fireEvent.click(docsButton!);

expect(screen.getByText("Documentation Update")).toBeInTheDocument();
expect(screen.queryByText("New Feature Release")).not.toBeInTheDocument();
});

it("shows all entries when clicking All filter", () => {
render(<ChangelogContent entries={mockEntries} />);

// First filter by features
const featuresButton = screen.getAllByRole("button").find(b => b.textContent === "Features");
fireEvent.click(featuresButton!);
expect(screen.queryByText("Bug Fix")).not.toBeInTheDocument();

// Then click All
const allButton = screen.getAllByRole("button").find(b => b.textContent === "All");
fireEvent.click(allButton!);
expect(screen.getByText("New Feature Release")).toBeInTheDocument();
expect(screen.getByText("Bug Fix")).toBeInTheDocument();
});

it("displays PR links", () => {
render(<ChangelogContent entries={mockEntries} />);
const prLinks = screen.getAllByText(/View PR/);
expect(prLinks.length).toBeGreaterThan(0);
});

it("renders empty state when no entries match filter", () => {
const emptyEntries: ChangelogEntry[] = [];
render(<ChangelogContent entries={emptyEntries} />);
it("renders empty state when no entries", () => {
render(<ChangelogContent entries={[]} />);
expect(screen.getByText("No updates found for this filter.")).toBeInTheDocument();
});
});
Loading
Loading