test: 실제 transport 권한과 커맨드 내구 행렬을 검증한다

실제 Fastify HTTP, PostgreSQL과 Redis에서 예약 mutation의 인증·sanction·소유권·수뇌 경계, 감사 원장과 무부작용을 검증한다.

장수 55개와 수뇌 35개를 R1/R2/R3으로 전수 분류하고 대표 9개를 Ref/Core 의미 비교부터 lease, 단일 flush와 fresh reload까지 실행한다. 비행위자 revision/lease와 관직 5 수뇌 partition도 exact 보존한다.
This commit is contained in:
2026-08-24 07:41:12 +00:00
parent c82c076b1b
commit 8d966d3152
8 changed files with 3078 additions and 50 deletions
@@ -485,11 +485,33 @@ databaseIntegration('Core PostgreSQL full reserved-turn lifecycle persistence',
}
world.executeGeneralTurn(executableActor);
const createdIds = world
.peekDirtyState()
.createdGenerals.map((general) => general.id)
.sort((left, right) => left - right);
const createdGenerals = world.peekDirtyState().createdGenerals;
const createdIds = createdGenerals.map((general) => general.id).sort((left, right) => left - right);
expect(createdIds).toEqual([102, 103, 104]);
const createdVolunteerIdentity = createdGenerals
.map((general) => ({
id: general.id,
affinity: general.affinity,
npcState: general.npcState,
npcOrg: asRecord(general.meta).npc_org,
expLevel: asRecord(general.meta).explevel,
dedLevel: asRecord(general.meta).dedlevel,
}))
.sort((left, right) => left.id - right.id);
expect(createdVolunteerIdentity).toEqual(
createdIds.map((id) => ({
id,
affinity: expect.any(Number),
npcState: 4,
npcOrg: 4,
expLevel: 0,
dedLevel: 1,
}))
);
for (const volunteer of createdVolunteerIdentity) {
expect(volunteer.affinity).toBeGreaterThanOrEqual(1);
expect(volunteer.affinity).toBeLessThanOrEqual(150);
}
expect(reservedTurns.peekDirtyState().generalInitializationIds.sort((left, right) => left - right)).toEqual(
createdIds
);
@@ -527,6 +549,22 @@ databaseIntegration('Core PostgreSQL full reserved-turn lifecycle persistence',
).toEqual(Array.from({ length: 30 }, (_, turnIdx) => ({ turnIdx, action: '휴식', args: {} })));
}
const persistedVolunteerIdentity = (
await db.general.findMany({
where: { id: { in: createdIds } },
select: { id: true, affinity: true, npcState: true, meta: true },
orderBy: { id: 'asc' },
})
).map((general) => ({
id: general.id,
affinity: general.affinity,
npcState: general.npcState,
npcOrg: asRecord(general.meta).npc_org,
expLevel: asRecord(general.meta).explevel,
dedLevel: asRecord(general.meta).dedlevel,
}));
expect(persistedVolunteerIdentity).toEqual(createdVolunteerIdentity);
const persistedNation = await db.nation.findUnique({ where: { id: nationId }, select: { meta: true } });
expect(persistedNation?.meta).toMatchObject({ gennum: 4 });
@@ -534,9 +572,16 @@ databaseIntegration('Core PostgreSQL full reserved-turn lifecycle persistence',
expect(
reloaded.snapshot.generals
.filter((general) => createdIds.includes(general.id))
.map((general) => general.id)
.sort((left, right) => left - right)
).toEqual(createdIds);
.map((general) => ({
id: general.id,
affinity: general.affinity,
npcState: general.npcState,
npcOrg: asRecord(general.meta).npc_org,
expLevel: asRecord(general.meta).explevel,
dedLevel: asRecord(general.meta).dedlevel,
}))
.sort((left, right) => left.id - right.id)
).toEqual(createdVolunteerIdentity);
expect(reloaded.snapshot.nations.find((nation) => nation.id === nationId)?.meta).toMatchObject({ gennum: 4 });
const reloadedReservedTurns = new InMemoryReservedTurnStore(db, {
maxGeneralTurns: 30,