Files
Gnuboard7/tests/Playwright/specs/admin/settings-identity-policy-search.spec.ts
T
HeuJung ca4834bbb9 fix(release): 7.0.8 사전점검 전수조사 — 릴리즈 차단 2건 포함 결함 7건 수정 및 출시일 정렬
- pay_nhnkcp 1.0.3 분리: 관리자 API 권한 게이트 변경분이 이미 배포된 1.0.2
 섹션에 소급 누적돼 있어 배포본과 어긋나고 업데이트 감지도 불가하던 것을
 manifest/package/composer/lock 동기와 함께 정정
- 공개 시나리오 매니페스트의 내부 경로 참조 제거 — 릴리즈 파일 누출 검사가
 error 로 발행을 차단하던 상태 해소 (내부 정적 검사 연계는 도구 비귀속 서술로 이관)
- 모듈/플러그인/템플릿 수동 설치에서 깨진 zip·manifest 누락 같은 사용자 입력
 오류가 500 으로 위장되던 422 계약 회귀 복원 — 서비스 경계에서 도메인 예외로
 승격해 상태코드와 실패 사유를 함께 보존 (회귀 테스트 동반)
- 본인인증 정책 검색 버튼이 입력 중인 검색어를 반영하지 않고, 초기화 후에도
 입력창에 이전 검색어가 남던 문제 수정 — 폼 자동바인딩 옵트아웃 + 명시 상태
 전환, E2E 회귀 스펙과 트러블슈팅 사례 동반
- 프록시 URL 검증 비문자열 분기의 :schemes 치환 누락 보정 (회귀 테스트 동반)
- 7.0.8 사이클 출시일자를 2026-08-22 로 정렬 (코어·엔진·확장 7종·언어팩 3종,
 버전·콘텐츠 무변경) 및 설치본 언어팩 동기
2026-08-22 10:16:08 +09:00

67 lines
3.0 KiB
TypeScript

/**
* E2E 회귀: 환경설정 > 인증 > 정책 관리 — 검색 버튼/검색 초기화
*
* 결함(2026-08-22 실측): 검색 버튼이 refetchDataSource 만 호출해 입력 중인 검색어가
* URL 쿼리로 실리지 않았다 — Enter 로는 검색되는데 버튼으로는 직전 검색어로만 재조회됐다.
* 검색 초기화는 URL·목록은 비웠지만 입력창 텍스트가 설정 폼 자동바인딩(filter.search)에
* 남아 초기화되지 않은 것처럼 보였다.
*
* 고정 계약:
* 1. 검색 버튼 클릭 = Enter 와 동일하게 입력값을 쿼리로 실어 이동 (재검색 포함)
* 2. 검색 초기화 = URL 쿼리 + 입력창 텍스트 모두 비움
*/
import { test, expect, issueToken, authenticatePage } from '../../fixtures/auth';
const PERMISSIONS = [
'core.settings.read',
'core.settings.update',
'core.admin.identity.policies.read',
] as const;
const SEARCH_INPUT = 'input[name="filter.search"]';
async function gotoPoliciesTab(page: import('@playwright/test').Page): Promise<void> {
await page.goto('/admin/settings?tab=identity&sub_tab=policies');
await page.waitForLoadState('domcontentloaded', { timeout: 30_000 });
await expect(page.locator(SEARCH_INPUT)).toBeAttached({ timeout: 20_000 });
}
test('정책 검색 버튼이 입력 중인 검색어를 반영하고, 검색어를 바꿔 다시 눌러도 재검색된다', async ({ page }) => {
await authenticatePage(page, issueToken(...PERMISSIONS));
await gotoPoliciesTab(page);
const searchButton = page
.locator('#tab_content_identity_policies button', { hasText: '검색' })
.first();
await page.locator(SEARCH_INPUT).fill('회원가입');
await searchButton.click();
await expect(page).toHaveURL(/search=%ED%9A%8C%EC%9B%90%EA%B0%80%EC%9E%85/, { timeout: 15_000 });
// 회귀 축: 검색어를 바꾼 뒤 버튼으로 재검색 — 종전에는 URL 이 그대로였고
// 직전 검색어(회원가입)로만 재조회됐다.
await page.locator(SEARCH_INPUT).fill('주문');
await searchButton.click();
await expect(page).toHaveURL(/search=%EC%A3%BC%EB%AC%B8/, { timeout: 15_000 });
});
test('검색 초기화가 URL 쿼리와 입력창 텍스트를 모두 비운다', async ({ page }) => {
await authenticatePage(page, issueToken(...PERMISSIONS));
await gotoPoliciesTab(page);
await page.locator(SEARCH_INPUT).fill('회원가입');
await page.locator(SEARCH_INPUT).press('Enter');
await expect(page).toHaveURL(/search=/, { timeout: 15_000 });
// 초기화 직전에 다른 검색어를 입력해 둔다 — 종전에는 이 텍스트가
// 설정 폼 자동바인딩에 남아 초기화 후에도 입력창에 되살아났다.
await page.locator(SEARCH_INPUT).fill('주문');
await page
.locator('#tab_content_identity_policies button', { hasText: '검색 초기화' })
.click();
await expect(page).not.toHaveURL(/search=/, { timeout: 15_000 });
await expect(page.locator(SEARCH_INPUT)).toHaveValue('', { timeout: 10_000 });
});