{"version":3,"names":["test","expect","describe","page","goto","locator","toBeVisible","click","waitForTimeout","hasFeedback","isVisible","catch","stillOnLogin","url","includes","toBeTruthy","fill","waitForURL","timeout","isPartnerPage","first","hasError"],"sources":["login.spec.js"],"sourcesContent":["import { test, expect } from '@playwright/test'\n\n/**\n * E2E Test: User Login Flow\n * Tests the authentication system for all user roles\n */\n\ntest.describe('Login Flow', () => {\n\n  test('should show login page correctly', async ({ page }) => {\n    await page.goto('/login')\n\n    // Check page elements\n    await expect(page.locator('text=📦 FETCH CHINA')).toBeVisible()\n    await expect(page.locator('input[type=\"email\"]')).toBeVisible()\n    await expect(page.locator('input[type=\"password\"]')).toBeVisible()\n    await expect(page.locator('button[type=\"submit\"]')).toBeVisible()\n  })\n\n  test('should show validation errors for empty fields', async ({ page }) => {\n    await page.goto('/login')\n\n    // Submit without entering credentials\n    await page.click('button[type=\"submit\"]')\n\n    // Wait a bit for validation to trigger\n    await page.waitForTimeout(500)\n\n    // Should show some feedback (either validation or error message)\n    // If no validation UI, at least the form should still be on login page\n    const hasFeedback = await page.locator('text=/error|invalid|required/i').isVisible().catch(() => false)\n    const stillOnLogin = page.url().includes('/login')\n    expect(hasFeedback || stillOnLogin).toBeTruthy()\n  })\n\n  test('should login as admin and redirect to dashboard', async ({ page }) => {\n    await page.goto('/login')\n\n    // Enter admin credentials\n    await page.fill('input[type=\"email\"]', 'e2e_test_admin@fetch.com')\n    await page.fill('input[type=\"password\"]', 'e2eadmin123')\n\n    await page.click('button[type=\"submit\"]')\n\n    // Wait for navigation to admin dashboard\n    await page.waitForURL('**/admin**', { timeout: 10000 })\n\n    // Should be on admin page with admin dashboard heading\n    await expect(page.locator('h1:has-text(\"Admin Dashboard\")')).toBeVisible()\n  })\n\n  test('should login as partner and show partner dashboard', async ({ page }) => {\n    await page.goto('/login')\n\n    // Use E2E test partner account\n    await page.fill('input[type=\"email\"]', 'e2e_test_partner@fetch.com')\n    await page.fill('input[type=\"password\"]', 'e2etest123')\n\n    await page.click('button[type=\"submit\"]')\n\n    // Wait for navigation\n    await page.waitForURL('**/dashboard**', { timeout: 10000 }).catch(() => {\n      // Partner dashboard might be at /dashboard or similar\n    })\n\n    // Should show partner elements\n    const isPartnerPage = await page.locator('text=/partner|dashboard|orders/i').first().isVisible()\n    expect(isPartnerPage).toBeTruthy()\n  })\n\n  test('should show error for invalid credentials', async ({ page }) => {\n    await page.goto('/login')\n\n    await page.fill('input[type=\"email\"]', 'invalid@example.com')\n    await page.fill('input[type=\"password\"]', 'wrongpassword')\n\n    await page.click('button[type=\"submit\"]')\n\n    // Wait for error message\n    await page.waitForTimeout(2000)\n\n    // Should show error message\n    const hasError = await page.locator('text=/error|invalid|incorrect|failed/i').isVisible().catch(() => false)\n    // Note: API might return 401 without showing UI error in some implementations\n    // This test is lenient - we just check something happens\n    expect(hasError || page.url().includes('login')).toBeTruthy()\n  })\n})\n"],"mappings":"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","ignoreList":[]}