Files
HeuJung 12968b76ca fix(core): 다중 progressive 데이터소스의 initLocal 유실 수정
_localInit 은 단일 슬롯이고 updateTemplateData 가 얕은 스프레드로 교체했다.
소비부(DynamicRenderer useEffect)는 React commit 이후에 실행되므로,
initLocal 을 가진 progressive 소스가 둘 이상이면 두 payload 가 같은 commit
사이에 도착할 때 먼저 온 것이 한 번도 관측되지 않고 사라졌다.

무조건 누적 병합은 refetchDataSource 시 소비가 끝난 payload 를 재적용해
사용자 폼 편집을 되돌린다. 그래서 아직 관측되지 않은 슬롯만 병합하고,
관측된 슬롯은 종전대로 교체한다. 소비 여부는 소비부가 기록한 슬롯 참조로
판정해 해시 계산식을 생산부에 복제하지 않는다.

레이아웃 전환으로 _local 을 리셋할 때 추적 레지스트리도 함께 비운다.

검증: CPU 6배 스로틀로 경합 창을 강제로 열어 수정 전 0/8 → 수정 후 8/8.
동반: template-engine.test.ts 의 vi.mock 이 공유 런타임 export 를 빠뜨려
스위트가 로드되지 않던 것과, 코어 spec 2개가 없는 fixture 를 import 해
playwright 수집이 실패하던 것을 함께 복구했다.
2026-07-10 19:27:27 +09:00

37 lines
1.2 KiB
TypeScript

/**
* Playwright 이커머스 인증 fixture.
*
* 코어 `auth.ts` 의 `issueToken` / `authenticatePage` 헬퍼를 재사용해
* 이커머스 도메인 spec 이 쓰는 토큰 fixture 를 구성한다.
* 권한 식별자는 임의 string 이므로 코어 헬퍼를 그대로 쓸 수 있다.
*
* 참조: docs/testing/e2e-testing.md "인증 가드"
*/
import { test as base } from '@playwright/test';
import { authenticatePage, issueToken } from './auth';
/**
* 이커머스 spec 용 토큰 fixture.
*
* - memberToken : 일반 회원 (마이페이지 주문/리뷰 등 본인 리소스 접근)
* - ordersUpdateToken : 주문 상태 변경 권한 (관리자 주문 관리)
*
* 토큰은 spec 별로 lazy 발급된다.
*/
type EcommerceAuthFixtures = {
memberToken: string;
ordersUpdateToken: string;
};
export const test = base.extend<EcommerceAuthFixtures>({
memberToken: async ({}, use) => {
await use(issueToken('sirsoft-ecommerce.orders.read'));
},
ordersUpdateToken: async ({}, use) => {
await use(issueToken('sirsoft-ecommerce.orders.update'));
},
});
export { authenticatePage, issueToken };
export { expect } from '@playwright/test';