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

97 lines
3.3 KiB
TypeScript
Raw Normal View History

import { test, expect } from '@playwright/test'
test.describe('Trading Page', () => {
test.beforeEach(async ({ page }) => {
await page.goto('/trading')
await page.waitForLoadState('networkidle')
})
test('displays trading page title', async ({ page }) => {
await expect(page.getByRole('heading', { name: /trading/i })).toBeVisible()
})
test('shows order form button', async ({ page }) => {
// Look for new order button or order form
const orderButton = page.getByRole('button', { name: /new order|place order|create order/i })
await expect(orderButton).toBeVisible()
})
test('displays positions section', async ({ page }) => {
// Look for positions area
await expect(page.getByText(/positions/i).first()).toBeVisible()
})
test('displays orders section', async ({ page }) => {
// Look for orders area
await expect(page.getByText(/orders/i).first()).toBeVisible()
})
test('paper trading toggle is visible', async ({ page }) => {
// Look for paper trading switch
const paperToggle = page.getByRole('switch', { name: /paper/i }).or(
page.getByText(/paper trading/i)
)
await expect(paperToggle.first()).toBeVisible()
})
})
test.describe('Trading - Order Form', () => {
test.beforeEach(async ({ page }) => {
await page.goto('/trading')
await page.waitForLoadState('networkidle')
})
test('opens order form dialog', async ({ page }) => {
// Click new order button
const orderButton = page.getByRole('button', { name: /new order|place order|create order/i })
await orderButton.click()
// Check dialog opens
await expect(page.getByRole('dialog')).toBeVisible()
})
test('order form has required fields', async ({ page }) => {
// Open order form
const orderButton = page.getByRole('button', { name: /new order|place order|create order/i })
await orderButton.click()
await expect(page.getByRole('dialog')).toBeVisible()
// Check for symbol field
await expect(page.getByLabel(/symbol/i)).toBeVisible()
// Check for quantity field
await expect(page.getByLabel(/quantity|amount/i)).toBeVisible()
// Check for side selection (buy/sell)
await expect(page.getByText(/buy|sell/i).first()).toBeVisible()
// Check for order type
await expect(page.getByLabel(/order type|type/i)).toBeVisible()
})
test('can close order form', async ({ page }) => {
// Open order form
const orderButton = page.getByRole('button', { name: /new order|place order|create order/i })
await orderButton.click()
await expect(page.getByRole('dialog')).toBeVisible()
// Close dialog
await page.getByRole('button', { name: /cancel|close/i }).click()
await expect(page.getByRole('dialog')).not.toBeVisible()
})
})
test.describe('Trading - Balance Display', () => {
test('shows balance information', async ({ page }) => {
await page.goto('/trading')
await page.waitForLoadState('networkidle')
// Look for balance display
const balanceText = page.getByText(/balance|total|available/i)
await expect(balanceText.first()).toBeVisible()
})
})