Files
openagent/dashboard/tests/navigation.spec.ts
Thomas Marchand 3d0b4d19b7 Th0rgal/update branding (#32)
* feat: chroots

* wip

* Update workspace templates and Playwright tests

* Fix thinking panel close button not working during active thinking

The auto-show useEffect was including showThinkingPanel in its dependency
array, causing the panel to immediately reopen when closed since the state
change would trigger the effect while hasActiveThinking was still true.

Changed to use a ref to track previous state and only auto-show on
transition from inactive to active thinking.

* wip

* wip

* wip

* Cleanup web search tool and remove hardcoded OAuth credentials

* Ralph iteration 1: work in progress

* Ralph iteration 2: work in progress

* Ralph iteration 3: work in progress

* Ralph iteration 4: work in progress

* Ralph iteration 5: work in progress

* Ralph iteration 6: work in progress

* Ralph iteration 1: work in progress

* Ralph iteration 2: work in progress

* Ralph iteration 3: work in progress

* Ralph iteration 4: work in progress

* Ralph iteration 5: work in progress

* Ralph iteration 6: work in progress

* Ralph iteration 7: work in progress

* Ralph iteration 1: work in progress

* Ralph iteration 2: work in progress

* improve readme

* fix: remove unused file

* feat: hero screenshot

* Update README with cleaner vision and hero screenshot

Simplified the vision section with "what if" framing, removed
architecture diagram, added hero screenshot showing mission view.
2026-01-12 14:45:05 -08:00

106 lines
4.2 KiB
TypeScript

import { test, expect } from '@playwright/test';
test.describe('Navigation', () => {
test('should navigate to all main pages', async ({ page }) => {
await page.goto('/');
// Check Overview page loads (title is "Global Monitor")
await expect(page.getByRole('heading', { name: /Global Monitor/i })).toBeVisible();
// Navigate directly to each page to test route accessibility
await page.goto('/control');
await expect(page).toHaveURL(/\/control/);
await page.goto('/agents');
await expect(page).toHaveURL(/\/agents/);
await expect(page.locator('button[title="New Agent"]')).toBeVisible();
await page.goto('/workspaces');
await expect(page).toHaveURL(/\/workspaces/);
await expect(page.getByRole('heading', { name: 'Workspaces' })).toBeVisible();
await page.goto('/console');
await expect(page).toHaveURL(/\/console/);
await page.goto('/settings');
await expect(page).toHaveURL(/\/settings/);
});
test('should navigate via sidebar links', async ({ page }) => {
await page.goto('/');
// Use sidebar to navigate to Mission
const sidebar = page.locator('aside');
await sidebar.getByRole('link', { name: 'Mission', exact: true }).click();
await expect(page).toHaveURL(/\/control/);
// Navigate to Agents via sidebar
await sidebar.getByRole('button', { name: /Config/i }).click();
await sidebar.getByRole('link', { name: /Agents/i }).click();
await expect(page).toHaveURL(/\/agents/);
// Navigate to Overview via sidebar
await sidebar.getByRole('link', { name: /Overview/i }).click();
await expect(page).toHaveURL('/');
});
test('should expand Config submenu', async ({ page }) => {
await page.goto('/');
// Click Config button to expand (it's a button, not a link)
await page.getByRole('button', { name: /Config/i }).click();
// Should show submenu items
await expect(page.getByRole('link', { name: /Agents/i })).toBeVisible();
await expect(page.getByRole('link', { name: /Skills/i })).toBeVisible();
await expect(page.getByRole('link', { name: /Commands/i })).toBeVisible();
await expect(page.getByRole('link', { name: /Rules/i })).toBeVisible();
// Click on Skills to navigate
await page.getByRole('link', { name: /Skills/i }).click();
await expect(page).toHaveURL(/\/config\/skills/);
});
test('should expand Extensions submenu', async ({ page }) => {
await page.goto('/');
// Click Extensions button to expand (it's a button, not a link)
await page.getByRole('button', { name: /Extensions/i }).click();
// Should show submenu items
await expect(page.getByRole('link', { name: /MCP Servers/i })).toBeVisible();
await expect(page.getByRole('link', { name: /Plugins/i })).toBeVisible();
await expect(page.getByRole('link', { name: /Tools/i })).toBeVisible();
});
test('sidebar should be visible on all pages', async ({ page }) => {
const pages = ['/', '/agents', '/workspaces', '/control', '/settings'];
for (const pagePath of pages) {
await page.goto(pagePath);
// Sidebar should contain navigation links
await expect(page.getByRole('link', { name: /Overview/i })).toBeVisible();
await expect(page.getByRole('link', { name: 'Mission', exact: true })).toBeVisible();
await expect(page.getByRole('button', { name: /Config/i })).toBeVisible();
}
});
test('should navigate to Config and Extensions subpages', async ({ page }) => {
// Navigate to MCP Servers
await page.goto('/extensions/mcps');
// Wait for page to load (either shows MCP content or "Library unavailable" message)
await expect(page.getByText(/MCP Servers|Library unavailable|Add MCP/i).first()).toBeVisible();
// Navigate to Skills
await page.goto('/config/skills');
// Wait for page to load (either shows Skills content or "Library unavailable" message)
await expect(page.getByText(/Skills|Library unavailable|Select a skill/i).first()).toBeVisible();
// Navigate to Commands
await page.goto('/config/commands');
// Wait for page to load (either shows Commands content or "Library unavailable" message)
await expect(page.getByText(/Commands|Library unavailable|Select a command/i).first()).toBeVisible();
});
});