fix: 사령부 모바일 현재 턴과 NPC 대상을 호환
daemon 진행 뒤 국가 명령을 현재 슬롯에 재기준화하고 Ref 명령별 장수 대상 필터를 적용한다. 모바일 고급 편집기 12턴과 500px 8수뇌 행렬을 실제 Chromium 기준으로 복원한다.
This commit is contained in:
@@ -11,6 +11,7 @@ import {
|
||||
setGeneralTurns,
|
||||
setNationTurn,
|
||||
setNationTurns,
|
||||
setNationTurnsAtCurrentPositions,
|
||||
shiftGeneralTurns,
|
||||
shiftNationTurns,
|
||||
ReservedTurnRevisionConflictError,
|
||||
@@ -195,7 +196,7 @@ const buildDb = () => {
|
||||
},
|
||||
} as unknown as DatabaseClient;
|
||||
|
||||
return { db };
|
||||
return { db, nationTurns, nationRevisions };
|
||||
};
|
||||
|
||||
describe('reservedTurns', () => {
|
||||
@@ -339,6 +340,61 @@ describe('reservedTurns', () => {
|
||||
expect(noOpPush).toEqual(repeated);
|
||||
});
|
||||
|
||||
it('rebases stale nation slot input onto the current queue after a turn advances', async () => {
|
||||
const { db, nationTurns, nationRevisions } = buildDb();
|
||||
const seeded = await setNationTurns(
|
||||
db,
|
||||
6,
|
||||
12,
|
||||
[
|
||||
{ turnIndices: [0], action: 'che_증축', args: {} },
|
||||
{ turnIndices: [1], action: 'che_감축', args: {} },
|
||||
{ turnIndices: [2], action: 'che_천도', args: { destCityId: 3 } },
|
||||
],
|
||||
0
|
||||
);
|
||||
expect(seeded.revision).toBe(1);
|
||||
|
||||
// daemon이 한 턴을 소비한 뒤의 현재 큐를 모사한다.
|
||||
nationRevisions.set('6:12', 2);
|
||||
nationTurns.set('6:12', [
|
||||
{
|
||||
id: 1,
|
||||
nationId: 6,
|
||||
officerLevel: 12,
|
||||
turnIdx: 0,
|
||||
actionCode: 'che_감축',
|
||||
arg: {},
|
||||
createdAt: new Date(),
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
nationId: 6,
|
||||
officerLevel: 12,
|
||||
turnIdx: 1,
|
||||
actionCode: 'che_천도',
|
||||
arg: { destCityId: 3 },
|
||||
createdAt: new Date(),
|
||||
},
|
||||
]);
|
||||
|
||||
const result = await setNationTurnsAtCurrentPositions(
|
||||
db,
|
||||
6,
|
||||
12,
|
||||
[{ turnIndices: [2], action: 'che_포상', args: { destGeneralId: 77, amount: 100, isGold: true } }],
|
||||
1
|
||||
);
|
||||
|
||||
expect(result.revision).toBe(3);
|
||||
expect(result.turns[0]?.action).toBe('che_감축');
|
||||
expect(result.turns[1]?.action).toBe('che_천도');
|
||||
expect(result.turns[2]).toMatchObject({
|
||||
action: 'che_포상',
|
||||
args: { destGeneralId: 77, amount: 100, isGold: true },
|
||||
});
|
||||
});
|
||||
|
||||
it('rejects an API writer while the daemon holds the queue lease without touching turns', async () => {
|
||||
const deleteMany = vi.fn(async () => ({}));
|
||||
const createMany = vi.fn(async () => ({}));
|
||||
|
||||
Reference in New Issue
Block a user