vn6295337's picture
Initial commit: Instant SWOT Agent
0c591a7
import { test, expect } from '@playwright/test'
test.describe('Instant SWOT Agent', () => {
test.beforeEach(async ({ page }) => {
await page.goto('/')
})
test('should display the home page', async ({ page }) => {
await expect(page.getByText('Instant SWOT Agent')).toBeVisible()
await expect(page.getByPlaceholder('Search U.S. listed companies...')).toBeVisible()
})
test('should show empty state message', async ({ page }) => {
await expect(page.getByText('Enter a company name to begin')).toBeVisible()
})
test('should toggle between Executive and Full view modes', async ({ page }) => {
const executiveBtn = page.getByRole('button', { name: 'Executive' })
const fullBtn = page.getByRole('button', { name: 'Full' })
await expect(executiveBtn).toBeVisible()
await expect(fullBtn).toBeVisible()
// Click Executive
await executiveBtn.click()
await expect(executiveBtn).toHaveClass(/bg-primary/)
// Click Full
await fullBtn.click()
await expect(fullBtn).toHaveClass(/bg-primary/)
})
test('should toggle dark mode', async ({ page }) => {
const darkModeBtn = page.locator('button').filter({ has: page.locator('svg') }).last()
// Check initial state (dark mode)
await expect(page.locator('html')).toHaveClass(/dark/)
// Toggle to light mode
await darkModeBtn.click()
await expect(page.locator('html')).not.toHaveClass(/dark/)
// Toggle back to dark mode
await darkModeBtn.click()
await expect(page.locator('html')).toHaveClass(/dark/)
})
test('should search for stocks', async ({ page }) => {
const searchInput = page.getByPlaceholder('Search U.S. listed companies...')
await searchInput.fill('AAPL')
// Wait for autocomplete dropdown
await expect(page.getByText('Apple')).toBeVisible({ timeout: 5000 })
})
test('should select a stock and show Generate button', async ({ page }) => {
const searchInput = page.getByPlaceholder('Search U.S. listed companies...')
await searchInput.fill('TSLA')
// Wait for and click the Tesla option
await page.getByText('Tesla').first().click()
// Generate button should appear
await expect(page.getByRole('button', { name: /Generate SWOT/i })).toBeVisible()
})
})
test.describe('SWOT Analysis Workflow', () => {
test('should complete full analysis workflow', async ({ page }) => {
// This test requires the backend to be running
test.skip(!!process.env.CI, 'Skipping in CI - requires backend')
await page.goto('/')
// Search and select a stock
const searchInput = page.getByPlaceholder('Search U.S. listed companies...')
await searchInput.fill('AAPL')
await page.getByText('Apple').first().click()
// Click Generate SWOT
await page.getByRole('button', { name: /Generate SWOT/i }).click()
// Wait for loading state
await expect(page.getByText(/Analyzing/i)).toBeVisible({ timeout: 5000 })
// Wait for results (up to 2 minutes for full analysis)
await expect(page.getByText('Strengths')).toBeVisible({ timeout: 120000 })
await expect(page.getByText('Weaknesses')).toBeVisible()
await expect(page.getByText('Opportunities')).toBeVisible()
await expect(page.getByText('Threats')).toBeVisible()
})
})