Some checks failed
CI Docker Mining Proof / Linux agent hashrate proof (push) Has been cancelled
POST /api/v1/recon/scan probes fleet ports from the server host, crawls owned HTTP targets, maps findings to spread lanes, and records optional oath ledger rows.
91 lines
4.5 KiB
TypeScript
91 lines
4.5 KiB
TypeScript
import { expect, test } from '@playwright/test';
|
|
import { loginToDashboard } from './fixtures';
|
|
|
|
test.describe('Page smoke', () => {
|
|
test.beforeEach(async ({ page }) => {
|
|
await loginToDashboard(page);
|
|
});
|
|
|
|
test('Dashboard renders Command Deck', async ({ page }) => {
|
|
await expect(page.getByRole('heading', { name: 'Command Deck' })).toBeVisible();
|
|
await expect(page.getByText('Fleet Pipeline')).toBeVisible();
|
|
await expect(page.getByText('Machine Roster')).toBeVisible();
|
|
});
|
|
|
|
test('Crucible renders node roster', async ({ page }) => {
|
|
await page.getByRole('link', { name: /Crucible/i }).click();
|
|
await expect(page.getByRole('heading', { name: 'Crucible' })).toBeVisible({ timeout: 10_000 });
|
|
await expect(page.getByText(/NODE ROSTER/i)).toBeVisible();
|
|
});
|
|
|
|
test('/agents redirects to Crucible', async ({ page }) => {
|
|
await page.goto('/agents');
|
|
await expect(page.getByRole('heading', { name: 'Crucible' })).toBeVisible({ timeout: 10_000 });
|
|
});
|
|
|
|
test('Settings renders Calibrate', async ({ page }) => {
|
|
await page.getByRole('navigation').getByRole('link', { name: 'Calibrate', exact: true }).click();
|
|
await expect(page.getByRole('heading', { name: 'Calibrate' })).toBeVisible({ timeout: 10_000 });
|
|
await expect(page.getByRole('button', { name: 'Save Calibration' })).toBeVisible();
|
|
});
|
|
|
|
test('Settings shows Calibration Control mode toggle', async ({ page }) => {
|
|
await page.getByRole('navigation').getByRole('link', { name: 'Calibrate', exact: true }).click();
|
|
await expect(page.getByRole('heading', { name: 'Calibrate' })).toBeVisible({ timeout: 10_000 });
|
|
await expect(page.getByRole('group', { name: 'Calibration control mode' })).toBeVisible({
|
|
timeout: 10_000,
|
|
});
|
|
await expect(page.getByRole('button', { name: /Logic gates/i })).toBeVisible();
|
|
await expect(page.getByRole('button', { name: /AI Control/i })).toBeVisible();
|
|
await page.getByRole('button', { name: /AI Control/i }).click();
|
|
await expect(page.locator('#cal-ai-endpoint')).toBeVisible();
|
|
await expect(page.getByRole('button', { name: 'Refresh models' })).toBeVisible();
|
|
});
|
|
|
|
test('Builder renders The Forge', async ({ page }) => {
|
|
await page.getByRole('link', { name: /Forge/i }).click();
|
|
await expect(page.getByRole('heading', { level: 1, name: 'Forge', exact: true })).toBeVisible({ timeout: 10_000 });
|
|
await expect(page.getByRole('heading', { name: 'Quick Forge' })).toBeVisible();
|
|
await expect(page.locator('.forge-mode-toggle').getByRole('button', { name: 'Simple', exact: true }).first()).toBeVisible();
|
|
});
|
|
|
|
test('Deploy Recon renders scan form', async ({ page }) => {
|
|
await page.goto('/deploy-recon');
|
|
await expect(page.getByRole('heading', { level: 1, name: /Deploy Recon/i })).toBeVisible({
|
|
timeout: 10_000,
|
|
});
|
|
await expect(page.getByTestId('dr-scan-btn')).toBeVisible();
|
|
});
|
|
|
|
test('Emberwake Cloud Ecosystem panel expands', async ({ page }) => {
|
|
await page.goto('/emberwake');
|
|
await expect(page.getByRole('heading', { level: 1, name: /Emberwake/i })).toBeVisible({ timeout: 10_000 });
|
|
await page.getByText('Cloud ecosystem').click();
|
|
await expect(page.getByTestId('cloud-spread-panel')).toBeVisible({ timeout: 10_000 });
|
|
await expect(page.getByTestId('cloud-method-s3-cloudfront')).toBeVisible();
|
|
await expect(page.getByTestId('cloud-method-minio')).toBeVisible();
|
|
await expect(page.getByText('AWS ecosystem')).toBeVisible();
|
|
});
|
|
|
|
test('Seer page is read-only stream', async ({ page }) => {
|
|
await page.goto('/seer');
|
|
await expect(page.getByRole('heading', { name: /The Seer/i })).toBeVisible({ timeout: 10_000 });
|
|
await expect(page.getByText(/FLEET AI STREAM/i)).toBeVisible();
|
|
await expect(page.getByText(/SEER NOTES/i)).toBeVisible();
|
|
await expect(page.getByRole('link', { name: /Oath Ledger/i })).toBeVisible();
|
|
await expect(page.getByRole('textbox')).toHaveCount(0);
|
|
await expect(page.getByRole('searchbox')).toHaveCount(0);
|
|
});
|
|
|
|
test('Oath ledger renders accountability table', async ({ page }) => {
|
|
await page.goto('/oath');
|
|
await expect(page.getByRole('heading', { name: /Operator Oath Ledger/i })).toBeVisible({
|
|
timeout: 10_000,
|
|
});
|
|
await expect(page.getByRole('columnheader', { name: 'Time' })).toBeVisible();
|
|
await expect(page.getByRole('columnheader', { name: 'Action' })).toBeVisible();
|
|
await expect(page.getByRole('link', { name: /Seer reasoning/i })).toBeVisible();
|
|
await expect(page.getByText(/No oath rows yet|Loading…/)).toBeVisible({ timeout: 15_000 });
|
|
});
|
|
});
|