{"version":3,"names":["test","expect","describe","page","goto","waitForLoadState","toHaveTitle","body","locator","toBeVisible","emailInput","first","passwordInput","request","response","get","toContain","status","routes","path","name","requiresAuth","route","waitForTimeout","isOnLogin","url","includes","hasAccessDenied","isVisible","catch","toBeTruthy","apiEndpoints","endpoint","toBeLessThan","errors","on","msg","type","push","text","criticalErrors","filter","e","length","console","log","toBe","setViewportSize","width","height"],"sources":["test-environment.spec.js"],"sourcesContent":["import { test, expect } from '@playwright/test'\n\n/**\n * E2E Test Suite: Test Environment Validation\n * 测试环境完整性检查 - 针对 http://localhost:5173\n */\n\ntest.describe('测试环境 - 基础功能验证', () => {\n\n  test('首页应该正常加载', async ({ page }) => {\n    await page.goto('/')\n    await page.waitForLoadState('networkidle')\n\n    // 检查页面标题\n    await expect(page).toHaveTitle(/FETCH CHINA/i)\n\n    // 检查页面内容可见\n    const body = page.locator('body')\n    await expect(body).toBeVisible()\n  })\n\n  test('登录页面应该正常显示', async ({ page }) => {\n    await page.goto('/login')\n    await page.waitForLoadState('networkidle')\n\n    // 检查登录页面标题\n    await expect(page.locator('text=📦 FETCH CHINA')).toBeVisible()\n\n    // 检查表单元素\n    const emailInput = page.locator('input[type=\"email\"], input[type=\"text\"]').first()\n    const passwordInput = page.locator('input[type=\"password\"]')\n\n    await expect(emailInput).toBeVisible()\n    await expect(passwordInput).toBeVisible()\n  })\n\n  test('API 健康检查', async ({ request }) => {\n    const response = await request.get('/api/v1/auth/me')\n\n    // 未登录应该返回 401\n    expect([200, 401, 403]).toContain(response.status())\n  })\n})\n\ntest.describe('测试环境 - 路由访问测试', () => {\n\n  const routes = [\n    { path: '/', name: '首页' },\n    { path: '/login', name: '登录页' },\n    { path: '/dashboard', name: '客户仪表板', requiresAuth: true },\n    { path: '/partner', name: '合伙人页面', requiresAuth: true },\n    { path: '/admin', name: '管理员页面', requiresAuth: true }\n  ]\n\n  for (const route of routes) {\n    test(`${route.name} (${route.path}) 应该可访问`, async ({ page }) => {\n      await page.goto(route.path)\n      await page.waitForLoadState('networkidle')\n\n      if (route.requiresAuth) {\n        // 需要认证的页面应该重定向到登录或显示拒绝访问\n        await page.waitForTimeout(1000)\n        const isOnLogin = page.url().includes('login')\n        const hasAccessDenied = await page.locator('text=/403|Forbidden|Access Denied/i').isVisible().catch(() => false)\n\n        expect(isOnLogin || hasAccessDenied).toBeTruthy()\n      } else {\n        // 公开页面应该正常显示\n        const body = page.locator('body')\n        await expect(body).toBeVisible()\n      }\n    })\n  }\n})\n\ntest.describe('测试环境 - API 端点测试', () => {\n\n  const apiEndpoints = [\n    { path: '/api/v1/auth/me', name: '用户信息' },\n    { path: '/api/v1/partner/orders', name: '合伙人订单' },\n    { path: '/api/v1/orders', name: '订单列表' }\n  ]\n\n  for (const endpoint of apiEndpoints) {\n    test(`API: ${endpoint.name} (${endpoint.path})`, async ({ request }) => {\n      const response = await request.get(endpoint.path)\n\n      // 应该返回有效的 HTTP 状态码（不是 500）\n      expect(response.status()).toBeLessThan(500)\n\n      // 应该返回 JSON 或者认证错误\n      expect([200, 401, 403, 404]).toContain(response.status())\n    })\n  }\n})\n\ntest.describe('测试环境 - 控制台错误检查', () => {\n\n  test('首页不应该有严重的控制台错误', async ({ page }) => {\n    const errors = []\n\n    page.on('console', msg => {\n      if (msg.type() === 'error') {\n        errors.push(msg.text())\n      }\n    })\n\n    await page.goto('/')\n    await page.waitForLoadState('networkidle')\n    await page.waitForTimeout(2000)\n\n    // 过滤掉已知的非关键错误\n    const criticalErrors = errors.filter(e =>\n      !e.includes('favicon') &&\n      !e.includes('404') &&\n      !e.includes('manifest') &&\n      !e.includes('sw.js')\n    )\n\n    if (criticalErrors.length > 0) {\n      console.log('发现控制台错误:', criticalErrors)\n    }\n\n    expect(criticalErrors.length).toBe(0)\n  })\n\n  test('登录页不应该有严重的控制台错误', async ({ page }) => {\n    const errors = []\n\n    page.on('console', msg => {\n      if (msg.type() === 'error') {\n        errors.push(msg.text())\n      }\n    })\n\n    await page.goto('/login')\n    await page.waitForLoadState('networkidle')\n    await page.waitForTimeout(2000)\n\n    const criticalErrors = errors.filter(e =>\n      !e.includes('favicon') &&\n      !e.includes('404') &&\n      !e.includes('manifest')\n    )\n\n    expect(criticalErrors.length).toBe(0)\n  })\n})\n\ntest.describe('测试环境 - 响应式设计测试', () => {\n\n  test('移动端视图应该正常显示', async ({ page }) => {\n    // 设置为 iPhone 12 尺寸\n    await page.setViewportSize({ width: 390, height: 844 })\n\n    await page.goto('/')\n    await page.waitForLoadState('networkidle')\n\n    const body = page.locator('body')\n    await expect(body).toBeVisible()\n  })\n\n  test('桌面端视图应该正常显示', async ({ page }) => {\n    // 设置为桌面尺寸\n    await page.setViewportSize({ width: 1920, height: 1080 })\n\n    await page.goto('/')\n    await page.waitForLoadState('networkidle')\n\n    const body = page.locator('body')\n    await expect(body).toBeVisible()\n  })\n})\n"],"mappings":"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","ignoreList":[]}