mirror of
https://github.com/johndoe6345789/metabuilder.git
synced 2026-04-25 06:14:59 +00:00
- codegen: Low-code React app with JSON-driven component system - packagerepo: Schema-driven package repository with backend/frontend - postgres: Next.js app with Drizzle ORM and PostgreSQL Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
69 lines
2.5 KiB
TypeScript
69 lines
2.5 KiB
TypeScript
import { test, expect } from '@playwright/test'
|
|
|
|
test.describe('CodeForge - Core Functionality', () => {
|
|
test.beforeEach(async ({ page }) => {
|
|
test.setTimeout(20000)
|
|
await page.goto('/', { waitUntil: 'domcontentloaded', timeout: 10000 })
|
|
await page.waitForLoadState('networkidle', { timeout: 5000 })
|
|
})
|
|
|
|
test('should load the application successfully', async ({ page }) => {
|
|
// Check root has children (content rendered)
|
|
await page.waitForSelector('#root > *', { timeout: 10000 })
|
|
const root = page.locator('#root')
|
|
await expect(root).toHaveCount(1)
|
|
})
|
|
|
|
test('should display main navigation', async ({ page }) => {
|
|
const tabList = page.locator('[role="tablist"]').first()
|
|
await expect(tabList).toBeVisible({ timeout: 5000 })
|
|
})
|
|
|
|
test('should switch between tabs', async ({ page }) => {
|
|
const tabs = page.locator('button[role="tab"]')
|
|
const tabCount = await tabs.count()
|
|
|
|
if (tabCount > 1) {
|
|
await tabs.nth(1).click()
|
|
await expect(page.locator('[role="tabpanel"]:visible')).toBeVisible({ timeout: 3000 })
|
|
}
|
|
})
|
|
})
|
|
|
|
test.describe('CodeForge - Code Editor', () => {
|
|
test('should display Monaco editor', async ({ page }) => {
|
|
test.setTimeout(30000)
|
|
await page.goto('/', { waitUntil: 'domcontentloaded', timeout: 10000 })
|
|
await page.waitForLoadState('networkidle', { timeout: 5000 })
|
|
|
|
const codeEditorTab = page.locator('button[role="tab"]').filter({ hasText: /Code Editor/i }).first()
|
|
if (await codeEditorTab.isVisible({ timeout: 3000 })) {
|
|
await codeEditorTab.click()
|
|
await page.waitForLoadState('networkidle', { timeout: 10000 })
|
|
|
|
const monacoEditor = page.locator('.monaco-editor').first()
|
|
await expect(monacoEditor).toBeVisible({ timeout: 15000 })
|
|
}
|
|
})
|
|
})
|
|
|
|
test.describe('CodeForge - Responsive Design', () => {
|
|
test('should work on mobile viewport', async ({ page }) => {
|
|
test.setTimeout(20000)
|
|
await page.setViewportSize({ width: 375, height: 667 })
|
|
await page.goto('/', { waitUntil: 'domcontentloaded', timeout: 10000 })
|
|
await page.waitForLoadState('networkidle', { timeout: 5000 })
|
|
|
|
await page.waitForSelector('#root > *', { timeout: 10000 })
|
|
})
|
|
|
|
test('should work on tablet viewport', async ({ page }) => {
|
|
test.setTimeout(20000)
|
|
await page.setViewportSize({ width: 768, height: 1024 })
|
|
await page.goto('/', { waitUntil: 'domcontentloaded', timeout: 10000 })
|
|
await page.waitForLoadState('networkidle', { timeout: 5000 })
|
|
|
|
await page.waitForSelector('#root > *', { timeout: 10000 })
|
|
})
|
|
})
|