Files
crypto_trader/frontend/e2e/strategies.spec.ts

80 lines
2.9 KiB
TypeScript
Raw Normal View History

import { test, expect } from '@playwright/test'
test.describe('Strategies Page', () => {
test.beforeEach(async ({ page }) => {
await page.goto('/strategies')
await page.waitForLoadState('networkidle')
})
test('displays strategies page title', async ({ page }) => {
await expect(page.getByRole('heading', { name: /strateg/i })).toBeVisible()
})
test('shows create strategy button', async ({ page }) => {
const createButton = page.getByRole('button', { name: /create|new|add/i }).first()
await expect(createButton).toBeVisible()
})
test('displays strategy list or empty state', async ({ page }) => {
// Either show strategies or empty state message
const content = page.getByText(/no strategies|create your first|strategy/i).first()
await expect(content).toBeVisible()
})
})
test.describe('Strategies - Create Strategy Flow', () => {
test.beforeEach(async ({ page }) => {
await page.goto('/strategies')
await page.waitForLoadState('networkidle')
})
test('opens strategy creation dialog', async ({ page }) => {
const createButton = page.getByRole('button', { name: /create|new|add/i }).first()
await createButton.click()
// Dialog should open
await expect(page.getByRole('dialog')).toBeVisible()
})
test('strategy dialog has required fields', async ({ page }) => {
const createButton = page.getByRole('button', { name: /create|new|add/i }).first()
await createButton.click()
await expect(page.getByRole('dialog')).toBeVisible()
// Check for strategy name field
await expect(page.getByLabel(/name/i)).toBeVisible()
// Check for strategy type selector
await expect(page.getByLabel(/type|strategy type/i).or(page.getByText(/select.*strategy/i).first())).toBeVisible()
})
test('shows available strategy types', async ({ page }) => {
const createButton = page.getByRole('button', { name: /create|new|add/i }).first()
await createButton.click()
await expect(page.getByRole('dialog')).toBeVisible()
// Open strategy type dropdown
const typeSelector = page.getByLabel(/type|strategy type/i).or(
page.locator('[data-testid="strategy-type-select"]')
)
await typeSelector.click()
// Should see strategy options like RSI, MACD, etc.
await expect(page.getByRole('option').first()).toBeVisible({ timeout: 5000 })
})
test('can cancel strategy creation', async ({ page }) => {
const createButton = page.getByRole('button', { name: /create|new|add/i }).first()
await createButton.click()
await expect(page.getByRole('dialog')).toBeVisible()
// Cancel
await page.getByRole('button', { name: /cancel/i }).click()
await expect(page.getByRole('dialog')).not.toBeVisible()
})
})