- 최대 40일 범위 제한 및 1년 조회 가능 기간 검증 - Date-range Picker UI 추가 및 서버 동기화 로직 구현 - Controller, DTO 유효성 테스트 및 Playwright 테스트 작성
Moment.js 호환성 테스트
Node.js 20 이상에서 실행한다.
npm ci
npx playwright install chromium
npm run test:moment
Linux CI에서 브라우저 시스템 라이브러리도 설치해야 한다면
npx playwright install --with-deps chromium을 사용한다.
Spring 서버, DB, 외부 CDN 없이 저장소의 실제 jQuery, Moment.js, daterangepicker.js, front2.js와 달력 CSS를 Chromium에 로드한다. 초기화와 콜백은 제품 코드를 그대로 실행하며, 테스트에서 복제하거나 모킹하지 않는다. HTML fixture는 공통 스크립트에 필요한 레이아웃과 날짜 입력 필드를 제공한다.
서울과 뉴욕 시간대 각각에서 날짜 표시, 윤년, 월/연도 경계 이동, 선택 적용,
취소, 같은 날 선택, 서머타임 경계의 직접 입력을 검증한다.
CommonJS 격리 실행에서는 CVE-2022-24785의 경로 탐색 로케일이
require까지 도달하지 않는지 검사한다. 브라우저의 정상 사용과 별도의 보안 회귀 검사다.
실패 시 스크린샷과 trace는 build/playwright에 저장된다.
실제 서버 통합과 전체 페이지의 시각적 배치는 이 테스트 범위에 포함되지 않는다.
APP 통계 페이지
statistics-date-range.spec.js는 apiStatistics.html의 실제 DOM과 인라인 스크립트를
실행한다. Thymeleaf가 주입할 초기 데이터와 통계 검색 API 응답만 테스트 값으로 대체한다.
일별 기간 선택/조회, 취소 및 바깥 클릭, 서버 기준 1년 전~오늘 제한,
시작일·종료일을 포함한 최대 40일 제한, 범위를 벗어난 세션 조건 폐기 및 요청 차단,
월별 전환, 앱 선택 유지, ISO 날짜와 CSRF 헤더 전송, 모바일 표시를 검증한다.
서버의 Thymeleaf 렌더링과 실제 통계 집계는 별도 통합 검증 대상이다.
통계 페이지만 실행: npm run test:moment -- --grep 'statistics:'
배포 파일 출처
- 버전: 2.30.1 (이전 버전 2.24.0)
- 공식 파일: https://raw.githubusercontent.com/moment/moment/2.30.1/min/moment.min.js
- SHA-256:
845c524969edd5b3af9aa6d8718d29fe92e8dbe25b955214a8e064a05a9a5027 - 배포 경로:
src/main/resources/static/js/moment.min.js - MIT 라이선스: 동일 디렉터리의
moment.LICENSE(공식 태그의 LICENSE 원문) - 보안 공지: https://github.com/moment/moment/security/advisories/GHSA-8hfj-j24r-96c4
버전 업그레이드 시 공식 배포 파일과 해시를 확인하고 버전 assertion도 갱신한다.