97 lines
3.3 KiB
TypeScript
97 lines
3.3 KiB
TypeScript
|
|
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()
|
||
|
|
})
|
||
|
|
})
|