93 lines
4.1 KiB
TypeScript
93 lines
4.1 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
|
|
test.describe('EdgeNet Dashboard', () => {
|
|
test.beforeEach(async ({ page }) => {
|
|
await page.goto('/');
|
|
// Wait for loading to complete
|
|
await page.waitForSelector('text=Network Overview', { timeout: 15000 });
|
|
});
|
|
|
|
test('loads successfully with Network Overview', async ({ page }) => {
|
|
await expect(page.locator('text=Network Overview')).toBeVisible();
|
|
await expect(page.locator('text=Credits Earned').first()).toBeVisible();
|
|
});
|
|
|
|
test('displays credits summary cards', async ({ page }) => {
|
|
await expect(page.locator('text=Credits Earned').first()).toBeVisible();
|
|
await expect(page.locator('text=Available').first()).toBeVisible();
|
|
await expect(page.locator('text=Peers Online').first()).toBeVisible();
|
|
await expect(page.locator('text=Status').first()).toBeVisible();
|
|
});
|
|
|
|
test('navigates to AI Agents page', async ({ page }) => {
|
|
await page.click('text=AI Agents');
|
|
await expect(page.locator('h1:has-text("AI Agents")')).toBeVisible({ timeout: 10000 });
|
|
// Shows real MCP agents only (no demos)
|
|
// If no MCP tools connected, shows empty state with "No agents" message
|
|
});
|
|
|
|
test('navigates to Workers page and shows local worker', async ({ page }) => {
|
|
await page.click('text=Workers');
|
|
await expect(page.locator('h1:has-text("Compute Workers")')).toBeVisible({ timeout: 10000 });
|
|
// Should show local worker
|
|
await expect(page.locator('text=Local Node')).toBeVisible({ timeout: 10000 });
|
|
await expect(page.locator('text=Active Workers')).toBeVisible();
|
|
});
|
|
|
|
test('navigates to Plugins page and shows WASM plugins', async ({ page }) => {
|
|
await page.click('text=Plugins');
|
|
await expect(page.locator('h1:has-text("Plugin Manager")')).toBeVisible({ timeout: 10000 });
|
|
// Should show real WASM plugins
|
|
await expect(page.locator('text=@ruvector/edge-net').first()).toBeVisible({ timeout: 10000 });
|
|
await expect(page.locator('text=RuVector Team').first()).toBeVisible();
|
|
});
|
|
|
|
test('navigates to Network & Communities page', async ({ page }) => {
|
|
await page.click('text=Network');
|
|
await expect(page.locator('h1:has-text("Network & Communities")')).toBeVisible({ timeout: 10000 });
|
|
await expect(page.locator('text=Credits Earned').first()).toBeVisible();
|
|
});
|
|
|
|
test('navigates to Activity page and shows activity log', async ({ page }) => {
|
|
await page.click('text=Activity');
|
|
await expect(page.locator('h1:has-text("Activity Log")')).toBeVisible({ timeout: 10000 });
|
|
await expect(page.locator('text=Total Events')).toBeVisible();
|
|
});
|
|
|
|
test('navigates to Settings page and shows settings', async ({ page }) => {
|
|
await page.click('text=Settings');
|
|
await expect(page.locator('h1:has-text("Settings")')).toBeVisible({ timeout: 10000 });
|
|
await expect(page.locator('text=Contribution Settings')).toBeVisible({ timeout: 10000 });
|
|
await expect(page.locator('text=Enable Contribution')).toBeVisible();
|
|
});
|
|
|
|
test('navigates to Credits page', async ({ page }) => {
|
|
await page.click('text=Credits');
|
|
await expect(page.locator('h1:has-text("Credit Economy")')).toBeVisible({ timeout: 10000 });
|
|
});
|
|
|
|
test('consent widget is visible', async ({ page }) => {
|
|
// Consent widget should be visible at bottom
|
|
const consentWidget = page.locator('.fixed.bottom-4');
|
|
await expect(consentWidget).toBeVisible({ timeout: 10000 });
|
|
});
|
|
|
|
test('Identity & Networks modal shows correctly', async ({ page }) => {
|
|
await page.click('text=Identity');
|
|
await expect(page.locator('h1:has-text("Identity & Networks")')).toBeVisible({ timeout: 10000 });
|
|
// Click on a network to join
|
|
const joinButton = page.locator('text=Join Network').first();
|
|
if (await joinButton.isVisible()) {
|
|
await joinButton.click();
|
|
// Modal should be visible and centered
|
|
const modal = page.locator('.fixed.left-1\\/2.top-1\\/2');
|
|
await expect(modal).toBeVisible({ timeout: 5000 });
|
|
}
|
|
});
|
|
|
|
test('Genesis page loads', async ({ page }) => {
|
|
await page.click('text=Genesis');
|
|
await expect(page.locator('text=Genesis')).toBeVisible({ timeout: 15000 });
|
|
});
|
|
});
|