import { defineConfig, devices } from '@playwright/test'

// 이 파일이 하는 일: E2E(End-to-End) 테스트 설정.
//
// 학습 포인트 — E2E는 무엇을 검증하나?
//   단위/컴포넌트 테스트는 "부품 하나"를 본다. E2E는 "다 조립된 앱"을 진짜 브라우저로
//   사용자처럼 눌러 본다 — 프론트+백엔드+DB가 함께 도는 통합 경로(로그인→강좌→퀴즈)를
//   확인해, 부품별 테스트가 못 잡는 "연결 지점의 회귀"를 잡는다.
//
//   스택(프론트+백엔드+DB)은 deploy/e2e.sh 가 격리된 임시 환경으로 띄우고(운영 무오염),
//   이 설정은 그 주소(E2E_BASE_URL)를 브라우저로 연다. 계정/퀴즈 slug도 env로 주입받는다.
export default defineConfig({
  testDir: './e2e',
  timeout: 30_000,
  expect: { timeout: 10_000 },
  // 하나의 임시 DB를 공유하므로 순차 실행(계정/세션이 서로 안 얽히게).
  fullyParallel: false,
  workers: 1,
  // 네트워크 타이밍으로 한 번 실패할 수 있으니 1회 재시도(진짜 회귀는 재시도해도 실패).
  retries: 1,
  reporter: [['list'], ['html', { open: 'never' }]],
  use: {
    baseURL: process.env.E2E_BASE_URL || 'http://localhost:8899',
    trace: 'on-first-retry',   // 재시도 시 추적 파일 남겨 실패 원인 분석
    screenshot: 'only-on-failure',
    actionTimeout: 10_000,
  },
  projects: [{ name: 'chromium', use: { ...devices['Desktop Chrome'] } }],
})
