fix: 특수 유저 커맨드의 Ref 호환 경계를 보강한다
수뇌 국가 설정과 NPC 정책을 actor-bound ENGINE mutation으로 옮기고, 추방·등용·점령·멸망·아이템 폐기의 특수 분기를 Ref와 맞춘다. 요청 ID를 사용자·프로필별로 격리하고 토너먼트 손상 projection을 fail-closed하며 실제 DB 및 Ref 차등 회귀를 보강한다.
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
|
||||
import { scopeHttpIdempotencyKey } from '../src/requestId.js';
|
||||
|
||||
describe('HTTP idempotency request IDs', () => {
|
||||
it('is stable for one principal and isolated across users and profiles', () => {
|
||||
const first = scopeHttpIdempotencyKey({ rawKey: 'same-client-key', profileId: 'hwe', userId: 'user-a' });
|
||||
expect(first).toBe(scopeHttpIdempotencyKey({ rawKey: 'same-client-key', profileId: 'hwe', userId: 'user-a' }));
|
||||
expect(first).not.toBe(
|
||||
scopeHttpIdempotencyKey({ rawKey: 'same-client-key', profileId: 'hwe', userId: 'user-b' })
|
||||
);
|
||||
expect(first).not.toBe(
|
||||
scopeHttpIdempotencyKey({ rawKey: 'same-client-key', profileId: 'che', userId: 'user-a' })
|
||||
);
|
||||
});
|
||||
|
||||
it('bounds and neutralizes untrusted header content while omitting blank keys', () => {
|
||||
expect(scopeHttpIdempotencyKey({ rawKey: ' \n\t ', profileId: 'hwe', userId: 'user-a' })).toBeUndefined();
|
||||
const scoped = scopeHttpIdempotencyKey({
|
||||
rawKey: `${'x'.repeat(10_000)}:../../unexpected`,
|
||||
profileId: 'hwe',
|
||||
userId: null,
|
||||
});
|
||||
expect(scoped).toMatch(/^http:[0-9a-f]{64}$/u);
|
||||
expect(scoped).toHaveLength(69);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user