{"version":3,"names":["test","expect","describe","beforeEach","page","goto","fill","click","waitForURL","nav","locator","toBeVisible","toHaveClass","not","toHaveURL","reload","currentUrl","url","includes","toBeTruthy","adminPages","pages","keyboard","press","focusedElement","evaluate","document","activeElement","getAttribute","toBe","setViewportSize","width","height","headerCount","count","navCount","logoutCount","hasOrders","isVisible","catch","hasLoading","hasEmpty","hasUsers","hasUserLoading","hasUserEmpty","window","scrollTo","scrollY","headerBg","el","getComputedStyle","backgroundColor","navBorder","borderBottom","mainPadding","padding","navLinks","toBeGreaterThan","links","i","text","nth","textContent","trim","length","focusableElements","focused","tagName","push","some","tag","linkColor","first","color","activeColor"],"sources":["admin-navigation.spec.js"],"sourcesContent":["import { test, expect } from '@playwright/test'\n\n/**\n * 管理员导航测试套件\n * 验证统一的 AdminLayout 在所有管理员页面正常工作\n */\n\ntest.describe('Admin Navigation', () => {\n  // 在每个测试前登录为管理员\n  test.beforeEach(async ({ page }) => {\n    await page.goto('/admin/login')\n\n    // 使用测试管理员账号登录\n    await page.fill('input[type=\"email\"]', 'e2e_test_admin@fetch.com')\n    await page.fill('input[type=\"password\"]', 'e2eadmin123')\n    await page.click('button[type=\"submit\"]')\n\n    // 等待跳转到管理员仪表盘\n    await page.waitForURL('/admin')\n  })\n\n  test('should display navigation menu on all admin pages', async ({ page }) => {\n    // 验证导航菜单存在\n    const nav = page.locator('nav')\n    await expect(nav).toBeVisible()\n\n    // 验证四个主要导航链接存在\n    await expect(page.locator('a[href=\"/admin\"]')).toBeVisible()\n    await expect(page.locator('a[href=\"/admin/orders\"]')).toBeVisible()\n    await expect(page.locator('a[href=\"/admin/users\"]')).toBeVisible()\n    await expect(page.locator('a[href=\"/admin/parcels\"]')).toBeVisible()\n  })\n\n  test('should highlight current page in navigation', async ({ page }) => {\n    // Dashboard 应该高亮\n    await expect(page.locator('a[href=\"/admin\"]')).toHaveClass(/border-fetch-orange/)\n\n    // 点击 Orders\n    await page.click('a[href=\"/admin/orders\"]')\n    await page.waitForURL('/admin/orders')\n\n    // Orders 应该高亮，Dashboard 不应该高亮\n    await expect(page.locator('a[href=\"/admin/orders\"]')).toHaveClass(/border-fetch-orange/)\n    await expect(page.locator('a[href=\"/admin\"]')).not.toHaveClass(/border-fetch-orange/)\n\n    // 点击 Users\n    await page.click('a[href=\"/admin/users\"]')\n    await page.waitForURL('/admin/users')\n\n    // Users 应该高亮\n    await expect(page.locator('a[href=\"/admin/users\"]')).toHaveClass(/border-fetch-orange/)\n    await expect(page.locator('a[href=\"/admin/orders\"]')).not.toHaveClass(/border-fetch-orange/)\n\n    // 点击 Parcels\n    await page.click('a[href=\"/admin/parcels\"]')\n    await page.waitForURL('/admin/parcels')\n\n    // Parcels 应该高亮\n    await expect(page.locator('a[href=\"/admin/parcels\"]')).toHaveClass(/border-fetch-orange/)\n    await expect(page.locator('a[href=\"/admin/users\"]')).not.toHaveClass(/border-fetch-orange/)\n  })\n\n  test('should navigate between pages correctly', async ({ page }) => {\n    // 从 Dashboard 到 Orders\n    await page.click('a[href=\"/admin/orders\"]')\n    await expect(page).toHaveURL('/admin/orders')\n\n    // 从 Orders 到 Users\n    await page.click('a[href=\"/admin/users\"]')\n    await expect(page).toHaveURL('/admin/users')\n\n    // 从 Users 到 Parcels\n    await page.click('a[href=\"/admin/parcels\"]')\n    await expect(page).toHaveURL('/admin/parcels')\n\n    // 从 Parcels 回到 Dashboard\n    await page.click('a[href=\"/admin\"]')\n    await expect(page).toHaveURL('/admin')\n  })\n\n  test('should display admin header elements', async ({ page }) => {\n    // 验证 Admin Dashboard 标题\n    await expect(page.locator('text=Admin Dashboard')).toBeVisible()\n\n    // 验证 Logout 按钮存在\n    await expect(page.locator('button:has-text(\"Logout\")')).toBeVisible()\n\n    // 验证 Top-up 按钮存在\n    await expect(page.locator('button:has-text(\"Top-up\")')).toBeVisible()\n  })\n\n  test('should logout correctly', async ({ page }) => {\n    // 点击登出按钮\n    await page.click('button:has-text(\"Logout\")')\n\n    // 应该跳转到登录页\n    await page.waitForURL('/admin/login')\n\n    // 尝试访问管理员页面应该被重定向\n    await page.goto('/admin')\n    await expect(page).toHaveURL('/admin/login')\n  })\n\n  test('should maintain navigation state after page refresh', async ({ page }) => {\n    // 导航到 Orders\n    await page.click('a[href=\"/admin/orders\"]')\n    await page.waitForURL('/admin/orders')\n\n    // 刷新页面\n    await page.reload()\n\n    // 应该仍然在 Orders 页面（如果会话保持），或被重定向到登录页\n    // 由于测试环境可能不保持会话，我们只验证页面加载成功\n    const currentUrl = page.url()\n    expect(currentUrl.includes('/admin') || currentUrl.includes('/login')).toBeTruthy()\n  })\n\n  test('should work with direct URL access', async ({ page }) => {\n    // 直接访问 Users 页面\n    await page.goto('/admin/users')\n\n    // 导航应该存在且 Users 高亮\n    await expect(page.locator('nav')).toBeVisible()\n    await expect(page.locator('a[href=\"/admin/users\"]')).toHaveClass(/border-fetch-orange/)\n\n    // 直接访问 Parcels 页面\n    await page.goto('/admin/parcels')\n\n    // 导航应该存在且 Parcels 高亮\n    await expect(page.locator('nav')).toBeVisible()\n    await expect(page.locator('a[href=\"/admin/parcels\"]')).toHaveClass(/border-fetch-orange/)\n  })\n\n  test('should display navigation on all admin pages', async ({ page }) => {\n    const adminPages = [\n      '/admin',\n      '/admin/orders',\n      '/admin/users',\n      '/admin/parcels'\n    ]\n\n    for (const url of adminPages) {\n      await page.goto(url)\n\n      // 验证导航存在\n      await expect(page.locator('nav')).toBeVisible()\n\n      // 验证所有导航链接存在\n      await expect(page.locator('a[href=\"/admin\"]')).toBeVisible()\n      await expect(page.locator('a[href=\"/admin/orders\"]')).toBeVisible()\n      await expect(page.locator('a[href=\"/admin/users\"]')).toBeVisible()\n      await expect(page.locator('a[href=\"/admin/parcels\"]')).toBeVisible()\n\n      // 验证登出按钮存在\n      await expect(page.locator('button:has-text(\"Logout\")')).toBeVisible()\n    }\n  })\n\n  test('should have consistent header across pages', async ({ page }) => {\n    const pages = ['/admin', '/admin/orders', '/admin/users', '/admin/parcels']\n\n    for (const url of pages) {\n      await page.goto(url)\n\n      // 验证 header 存在\n      await expect(page.locator('header')).toBeVisible()\n\n      // 验证 Admin Dashboard 标题\n      await expect(page.locator('text=Admin Dashboard')).toBeVisible()\n\n      // 验证 Logout 按钮\n      await expect(page.locator('button:has-text(\"Logout\")')).toBeVisible()\n    }\n  })\n\n  test('should handle navigation keyboard shortcuts', async ({ page }) => {\n    // 测试 Tab 键导航\n    await page.keyboard.press('Tab')\n\n    // 第一个可聚焦元素应该是 Dashboard 链接\n    const focusedElement = await page.evaluate(() => document.activeElement.getAttribute('href'))\n    expect(focusedElement).toBe('/admin')\n  })\n\n  test('should be responsive on mobile', async ({ page }) => {\n    // 设置移动设备视口\n    await page.setViewportSize({ width: 375, height: 667 })\n\n    // 导航应该仍然可见（可能需要汉堡菜单）\n    await expect(page.locator('nav')).toBeVisible()\n\n    // 导航链接应该可点击\n    await page.click('a[href=\"/admin/orders\"]')\n    await expect(page).toHaveURL('/admin/orders')\n  })\n\n  test('should not show duplicate headers', async ({ page }) => {\n    // 验证只有一个 header\n    const headerCount = await page.locator('header').count()\n    expect(headerCount).toBe(1)\n\n    // 验证只有一个导航\n    const navCount = await page.locator('nav').count()\n    expect(navCount).toBe(1)\n\n    // 验证只有一个登出按钮\n    const logoutCount = await page.locator('button:has-text(\"Logout\")').count()\n    expect(logoutCount).toBe(1)\n  })\n\n  test('should preserve page functionality after layout change', async ({ page }) => {\n    // 测试 Orders 页面功能\n    await page.click('a[href=\"/admin/orders\"]')\n    await page.waitForURL('/admin/orders')\n\n    // 应该能看到订单列表或加载状态\n    const hasOrders = await page.locator('table').isVisible().catch(() => false)\n    const hasLoading = await page.locator('text=Loading').isVisible().catch(() => false)\n    const hasEmpty = await page.locator('text=No orders').isVisible().catch(() => false)\n\n    expect(hasOrders || hasLoading || hasEmpty).toBeTruthy()\n\n    // 测试 Users 页面功能\n    await page.click('a[href=\"/admin/users\"]')\n    await page.waitForURL('/admin/users')\n\n    // 应该能看到用户列表或加载状态\n    const hasUsers = await page.locator('table').isVisible().catch(() => false)\n    const hasUserLoading = await page.locator('text=Loading').isVisible().catch(() => false)\n    const hasUserEmpty = await page.locator('text=No users').isVisible().catch(() => false)\n\n    expect(hasUsers || hasUserLoading || hasUserEmpty).toBeTruthy()\n  })\n\n  test('should handle navigation errors gracefully', async ({ page }) => {\n    // 尝试访问不存在的管理员页面\n    await page.goto('/admin/nonexistent')\n\n    // 应该显示 404 或重定向到 dashboard\n    const url = page.url()\n    expect(url.includes('/admin')).toBeTruthy()\n  })\n\n  test('should maintain scroll position on navigation', async ({ page }) => {\n    // 导航到 Orders 页面\n    await page.click('a[href=\"/admin/orders\"]')\n    await page.waitForURL('/admin/orders')\n\n    // 滚动页面\n    await page.evaluate(() => window.scrollTo(0, 500))\n\n    // 导航到其他页面\n    await page.click('a[href=\"/admin/users\"]')\n    await page.waitForURL('/admin/users')\n\n    // 新页面应该从顶部开始\n    const scrollY = await page.evaluate(() => window.scrollY)\n    expect(scrollY).toBe(0)\n  })\n})\n\ntest.describe('Admin Layout Visual Consistency', () => {\n  test.beforeEach(async ({ page }) => {\n    await page.goto('/admin/login')\n    await page.fill('input[type=\"email\"]', 'e2e_test_admin@fetch.com')\n    await page.fill('input[type=\"password\"]', 'e2eadmin123')\n    await page.click('button[type=\"submit\"]')\n    await page.waitForURL('/admin')\n  })\n\n  test('should have consistent styling across pages', async ({ page }) => {\n    const pages = ['/admin', '/admin/orders', '/admin/users', '/admin/parcels']\n\n    for (const url of pages) {\n      await page.goto(url)\n\n      // 验证 header 背景色\n      const headerBg = await page.locator('header').evaluate(el =>\n        window.getComputedStyle(el).backgroundColor\n      )\n      expect(headerBg).toBeTruthy()\n\n      // 验证导航样式\n      const navBorder = await page.locator('nav').evaluate(el =>\n        window.getComputedStyle(el).borderBottom\n      )\n      expect(navBorder).toBeTruthy()\n    }\n  })\n\n  test('should have proper spacing and layout', async ({ page }) => {\n    // 验证内容区域有适当的 padding\n    const mainPadding = await page.locator('main').evaluate(el =>\n      window.getComputedStyle(el).padding\n    )\n    expect(mainPadding).toBeTruthy()\n\n    // 验证导航链接之间有间距\n    const navLinks = page.locator('nav a')\n    const count = await navLinks.count()\n    expect(count).toBeGreaterThan(0)\n  })\n})\n\ntest.describe('Admin Layout Accessibility', () => {\n  test.beforeEach(async ({ page }) => {\n    await page.goto('/admin/login')\n    await page.fill('input[type=\"email\"]', 'e2e_test_admin@fetch.com')\n    await page.fill('input[type=\"password\"]', 'e2eadmin123')\n    await page.click('button[type=\"submit\"]')\n    await page.waitForURL('/admin')\n  })\n\n  test('should have proper ARIA labels', async ({ page }) => {\n    // 验证导航有适当的语义标签\n    const nav = page.locator('nav')\n    await expect(nav).toBeVisible()\n\n    // 验证链接有可访问的文本\n    const links = page.locator('nav a')\n    const count = await links.count()\n\n    for (let i = 0; i < count; i++) {\n      const text = await links.nth(i).textContent()\n      expect(text.trim().length).toBeGreaterThan(0)\n    }\n  })\n\n  test('should be keyboard navigable', async ({ page }) => {\n    // 使用 Tab 键遍历所有可聚焦元素\n    const focusableElements = []\n\n    for (let i = 0; i < 10; i++) {\n      await page.keyboard.press('Tab')\n      const focused = await page.evaluate(() => document.activeElement.tagName)\n      focusableElements.push(focused)\n    }\n\n    // 应该能聚焦到链接和按钮\n    expect(focusableElements.some(tag => tag === 'A' || tag === 'BUTTON')).toBeTruthy()\n  })\n\n  test('should have sufficient color contrast', async ({ page }) => {\n    // 验证导航链接的颜色对比度\n    const linkColor = await page.locator('nav a').first().evaluate(el =>\n      window.getComputedStyle(el).color\n    )\n    expect(linkColor).toBeTruthy()\n\n    // 验证活动链接的颜色\n    const activeColor = await page.locator('nav a[class*=\"border-fetch-orange\"]').evaluate(el =>\n      window.getComputedStyle(el).color\n    )\n    expect(activeColor).toBeTruthy()\n  })\n})\n"],"mappings":"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","ignoreList":[]}