90 lines
3.0 KiB
TypeScript
90 lines
3.0 KiB
TypeScript
|
|
import { test, expect } from '@playwright/test'
|
||
|
|
|
||
|
|
test.describe('Dashboard Page', () => {
|
||
|
|
test.beforeEach(async ({ page }) => {
|
||
|
|
await page.goto('/')
|
||
|
|
})
|
||
|
|
|
||
|
|
test('loads dashboard page', async ({ page }) => {
|
||
|
|
await expect(page).toHaveTitle(/FXQ One|Crypto Trader/i)
|
||
|
|
})
|
||
|
|
|
||
|
|
test('displays main sections', async ({ page }) => {
|
||
|
|
// Check for main dashboard elements
|
||
|
|
await expect(page.getByRole('heading', { level: 4 })).toBeVisible()
|
||
|
|
|
||
|
|
// Wait for content to load
|
||
|
|
await page.waitForLoadState('networkidle')
|
||
|
|
|
||
|
|
// Check for navigation elements
|
||
|
|
await expect(page.getByRole('navigation')).toBeVisible()
|
||
|
|
})
|
||
|
|
|
||
|
|
test('displays autopilot configuration section', async ({ page }) => {
|
||
|
|
await page.waitForLoadState('networkidle')
|
||
|
|
|
||
|
|
// Look for autopilot related elements
|
||
|
|
await expect(page.getByText(/autopilot/i).first()).toBeVisible()
|
||
|
|
})
|
||
|
|
|
||
|
|
test('navigation works correctly', async ({ page }) => {
|
||
|
|
// Navigate to different pages
|
||
|
|
await page.click('text=Trading')
|
||
|
|
await expect(page).toHaveURL(/.*trading/i)
|
||
|
|
|
||
|
|
await page.click('text=Portfolio')
|
||
|
|
await expect(page).toHaveURL(/.*portfolio/i)
|
||
|
|
|
||
|
|
await page.click('text=Strategies')
|
||
|
|
await expect(page).toHaveURL(/.*strateg/i)
|
||
|
|
|
||
|
|
await page.click('text=Settings')
|
||
|
|
await expect(page).toHaveURL(/.*settings/i)
|
||
|
|
|
||
|
|
// Go back to dashboard
|
||
|
|
await page.click('text=Dashboard')
|
||
|
|
await expect(page).toHaveURL(/.*\/$/)
|
||
|
|
})
|
||
|
|
|
||
|
|
test('displays real-time status indicators', async ({ page }) => {
|
||
|
|
await page.waitForLoadState('networkidle')
|
||
|
|
|
||
|
|
// Look for status indicators (chips, badges, etc.)
|
||
|
|
const statusChips = page.locator('.MuiChip-root')
|
||
|
|
await expect(statusChips.first()).toBeVisible({ timeout: 10000 })
|
||
|
|
})
|
||
|
|
})
|
||
|
|
|
||
|
|
test.describe('Dashboard - Autopilot Controls', () => {
|
||
|
|
test.beforeEach(async ({ page }) => {
|
||
|
|
await page.goto('/')
|
||
|
|
await page.waitForLoadState('networkidle')
|
||
|
|
})
|
||
|
|
|
||
|
|
test('shows autopilot start button', async ({ page }) => {
|
||
|
|
const startButton = page.getByRole('button', { name: /start.*autopilot/i })
|
||
|
|
// Button should be visible
|
||
|
|
await expect(startButton).toBeVisible({ timeout: 10000 })
|
||
|
|
})
|
||
|
|
|
||
|
|
test('symbol selection is available', async ({ page }) => {
|
||
|
|
// Look for symbol selector (autocomplete or select)
|
||
|
|
const symbolInput = page.locator('[data-testid="autopilot-symbols"], .MuiAutocomplete-root, input[placeholder*="symbol" i]').first()
|
||
|
|
await expect(symbolInput).toBeVisible({ timeout: 10000 })
|
||
|
|
})
|
||
|
|
})
|
||
|
|
|
||
|
|
test.describe('Dashboard - Charts', () => {
|
||
|
|
test('chart grid displays', async ({ page }) => {
|
||
|
|
await page.goto('/')
|
||
|
|
await page.waitForLoadState('networkidle')
|
||
|
|
|
||
|
|
// Wait for charts to potentially load
|
||
|
|
await page.waitForTimeout(2000)
|
||
|
|
|
||
|
|
// Look for chart container
|
||
|
|
const chartArea = page.locator('[class*="chart"], canvas, svg').first()
|
||
|
|
await expect(chartArea).toBeVisible({ timeout: 15000 })
|
||
|
|
})
|
||
|
|
})
|