## การใช้งาน Playwright ใน LCBP3-DMS

จากการตรวจสอบ spec มี test strategy ที่รองรับ Playwright:

### 1. **Test Strategy** (จาก [05-04-testing-strategy.md](cci:7://file:///e:/np-dms/lcbp3/specs/05-Engineering-Guidelines/05-04-testing-strategy.md:0:0-0:0))

**Stack**:
- **Backend**: Jest (Unit + Integration + E2E)
- **Frontend**: Vitest (Unit) + **Playwright** (E2E)

### 2. **Setup Playwright**

```bash
# ติดตั้ง Playwright browsers
npx playwright install chromium

# หรือติดตั้งทั้งหมด
npx playwright install
```

### 3. **MCP Server สำหรับ Devin**

เพิ่มใน [.windsurfrc](cci:7://file:///e:/np-dms/lcbp3/.windsurfrc:0:0-0:0):

```json
{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": ["-y", "@playwright/mcp@latest"]
    }
  }
}
```

**Restart Devin** แล้วจะเห็น Playwright MCP panel

### 4. **การใช้งานผ่าน Devin Cascade**

เมื่อ MCP พร้อมแล้ว สามารถใช้คำสั่ง:

- **Open browser**: `Navigate to http://localhost:3000`
- **Take screenshot**: `Take a screenshot of the current page`
- **Click element**: `Click the "Submit" button`
- **Fill form**: `Type "test@example.com" into the email field`
- **Verify**: `Check if "Success" message is visible`

### 5. **E2E Test Script Example**

สร้างไฟล์ `e2e/workflow-adr021.spec.ts`:

```typescript
import { test, expect } from '@playwright/test';

test('ADR-021 workflow transition with attachment', async ({ page }) => {
  // 1. Login
  await page.goto('http://localhost:3000/login');
  await page.fill('[name="email"]', 'test@example.com');
  await page.fill('[name="password"]', 'password');
  await page.click('button[type="submit"]');

  // 2. Navigate to RFA detail
  await page.goto('http://localhost:3000/rfas/test-uuid');

  // 3. Verify IntegratedBanner
  await expect(page.locator('[data-testid="integrated-banner"]')).toBeVisible();
  await expect(page.locator('[data-testid="priority-badge"]')).toHaveText('HIGH');

  // 4. Upload attachment
  await page.setInputFiles('[data-testid="file-dropzone"]', 'test.pdf');

  // 5. Submit approval
  await page.click('[data-testid="approve-button"]');

  // 6. Verify success
  await expect(page.locator('[data-testid="success-toast"]')).toBeVisible();
});
```

### 6. **Run E2E Tests**

```bash
cd frontend

# Run all E2E tests
npx playwright test

# Run specific test
npx playwright test e2e/workflow-adr021.spec.ts

# Run with UI mode (debug)
npx playwright test --ui

# Run headed (see browser)
npx playwright test --headed
```

### 7. **Generate Test Report**

```bash
npx playwright show-report
```

### 8. **ถ้าใช้ MCP ผ่าน Devin**

Cascade จะมี tool ให้ใช้:
- `browser_navigate` - เปิด URL
- `browser_click` - คลิก element
- `browser_type` - พิมพ์ข้อความ
- `browser_take_screenshot` - ถ่าย screenshot
- `browser_evaluate` - รัน JavaScript

ต้องการให้ช่วย setup หรือสร้าง E2E test สำหรับ feature ใด feature หนึ่งไหมครับ?
