# 화면 디자이너 E2E 테스트 접근 가이드

## 화면 디자이너 접근 방법 (Playwright)

화면 디자이너는 SPA 탭 기반 시스템이라 URL 직접 접근이 안 된다.
다음 3단계를 반드시 따라야 한다.

### 1단계: 로그인

```typescript
await page.goto('http://localhost:9771/login');
await page.waitForLoadState('networkidle');
await page.getByPlaceholder('사용자 ID를 입력하세요').fill('wace');
await page.getByPlaceholder('비밀번호를 입력하세요').fill('qlalfqjsgh11');
await page.getByRole('button', { name: '로그인' }).click();
await page.waitForTimeout(8000);
```

### 2단계: sessionStorage 탭 상태 주입 + openDesigner 쿼리

```typescript
await page.evaluate(() => {
  sessionStorage.setItem('erp-tab-store', JSON.stringify({
    state: {
      tabs: [{
        id: 'tab-screenmng',
        title: '화면 관리',
        path: '/admin/screenMng/screenMngList',
        isActive: true,
        isPinned: false
      }],
      activeTabId: 'tab-screenmng'
    },
    version: 0
  }));
});

// openDesigner 쿼리 파라미터로 화면 디자이너 자동 열기
await page.goto('http://localhost:9771/admin/screenMng/screenMngList?openDesigner=' + screenId);
await page.waitForTimeout(10000);
```

### 3단계: 컴포넌트 클릭 + 설정 패널 확인

```typescript
// 패널 버튼 클릭 (설정 패널 열기)
const panelBtn = page.locator('button:has-text("패널")');
if (await panelBtn.count() > 0) {
  await panelBtn.first().click();
  await page.waitForTimeout(2000);
}

// 편집 탭 확인
const editTab = page.locator('button:has-text("편집")');
// editTab.count() > 0 이면 설정 패널 열림 확인
```

## 화면 ID 찾기 (API)

특정 컴포넌트를 포함한 화면을 API로 검색:

```typescript
const screenId = await page.evaluate(async () => {
  const token = localStorage.getItem('authToken') || '';
  const h = { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + token };
  
  const resp = await fetch('http://localhost:8080/api/screen-management/screens?page=1&size=50', { headers: h });
  const data = await resp.json();
  const items = data.data || [];
  
  for (const s of items) {
    try {
      const lr = await fetch('http://localhost:8080/api/screen-management/screens/' + s.screenId + '/layout-v2', { headers: h });
      const ld = await lr.json();
      const raw = JSON.stringify(ld);
      // 원하는 컴포넌트 타입 검색
      if (raw.includes('v2-select')) return s.screenId;
    } catch {}
  }
  return items[0]?.screenId || null;
});
```

## 검증 포인트

| 확인 항목 | Locator | 기대값 |
|----------|---------|--------|
| 디자이너 열림 | `button:has-text("패널")` | count > 0 |
| 편집 탭 | `button:has-text("편집")` | count > 0 |
| 카드 선택 | `text=이 필드는 어떤 데이터를 선택하나요?` | visible |
| 고급 설정 | `text=고급 설정` | visible |
| JS 에러 없음 | `page.on('pageerror')` | 0건 |

## 테스트 계정

- ID: `wace`
- PW: `qlalfqjsgh11`
- 권한: SUPER_ADMIN (최고 관리자)
