76 lines
3.5 KiB
TypeScript
76 lines
3.5 KiB
TypeScript
import { test, expect } from "@playwright/test";
|
|
|
|
const adminId = process.env.TEST_ADMIN_ID || "admin1gmail";
|
|
const adminPassword = process.env.TEST_ADMIN_PW || "test1234!";
|
|
|
|
test.describe("세션 연장 확인 팝업 (useSessionExtendConfirm) E2E 테스트", () => {
|
|
|
|
test("1. 세션 만료 5분(버퍼 시간) 전 도달 시 컨펌 다이얼로그가 자동 노출되고, 승인 시 연장 처리가 수행되어야 함", async ({ page }) => {
|
|
// 1. 로그인 수행하여 정상 세션 획득
|
|
await page.goto("/auth/login");
|
|
await page.fill("input#id", adminId);
|
|
await page.fill("input#password", adminPassword);
|
|
await page.click("button.login_btn");
|
|
await page.waitForURL("**/dashboard");
|
|
// 내비게이션 및 세션 적재의 미세 안정화를 위해 짧은 대기 추가
|
|
await page.waitForTimeout(500);
|
|
|
|
// 2. 로그인된 상태에서 격리 테스팅 라우트로 이동
|
|
await page.goto("/test-session");
|
|
await page.waitForURL("**/test-session");
|
|
|
|
// 3. 2초 뒤 만료 버퍼 도달 시점에 노출되는 리액트 HTML 모달 텍스트 대기
|
|
const messageLocator = page.locator("p", { hasText: "로그인을 연장하시겠습니까?" });
|
|
await expect(messageLocator).toBeVisible({ timeout: 5000 });
|
|
|
|
// 4. 모달 내부의 "확인" 버튼 클릭
|
|
const confirmButton = page.locator("button", { hasText: "확인" });
|
|
await confirmButton.click();
|
|
|
|
// 5. 모달이 정상적으로 닫혔는지 검증
|
|
await expect(messageLocator).toBeHidden();
|
|
|
|
// 6. silentRefresh 성공 시 나타나는 엘리먼트 텍스트 검증
|
|
const statusText = page.locator("[data-testid='refresh-status']");
|
|
await expect(statusText).toHaveText("Refresh Successful");
|
|
|
|
// 7. 세션 연장 처리 완료 후 추가 시간이 흐르더라도 다음 팝업이 즉시 중복 재호출되지 않아야 함
|
|
await page.waitForTimeout(2000);
|
|
await expect(messageLocator).toBeHidden();
|
|
});
|
|
|
|
test("2. 컨펌 다이얼로그를 거절(Dismiss)한 경우 세션 연장 처리가 취소되고 재차 팝업이 노출되지 않아야 함", async ({ page }) => {
|
|
// 1. 로그인 수행하여 정상 세션 획득
|
|
await page.goto("/auth/login");
|
|
await page.fill("input#id", adminId);
|
|
await page.fill("input#password", adminPassword);
|
|
await page.click("button.login_btn");
|
|
await page.waitForURL("**/dashboard");
|
|
// 내비게이션 및 세션 적재의 미세 안정화를 위해 짧은 대기 추가
|
|
await page.waitForTimeout(500);
|
|
|
|
// 2. 로그인된 상태에서 격리 테스팅 라우트로 이동
|
|
await page.goto("/test-session");
|
|
await page.waitForURL("**/test-session");
|
|
|
|
// 3. 컨펌 모달 대기
|
|
const messageLocator = page.locator("p", { hasText: "로그인을 연장하시겠습니까?" });
|
|
await expect(messageLocator).toBeVisible({ timeout: 5000 });
|
|
|
|
// 4. 모달 내부의 "취소" 버튼 클릭
|
|
const cancelButton = page.locator("button", { hasText: "취소" });
|
|
await cancelButton.click();
|
|
|
|
// 5. 모달이 정상적으로 닫혔는지 확인
|
|
await expect(messageLocator).toBeHidden();
|
|
|
|
// 6. declineSessionExtend 성공 시 나타나는 엘리먼트 텍스트 검증
|
|
const statusText = page.locator("[data-testid='decline-status']");
|
|
await expect(statusText).toHaveText("Decline Successful");
|
|
|
|
// 7. 거절 이후 추가 시간이 흘러도 모달이 중복 재노출되지 않아야 함
|
|
await page.waitForTimeout(2000);
|
|
await expect(messageLocator).toBeHidden();
|
|
});
|
|
});
|