From 626786e4602aae5cbc3b1dc86722728f9ec7b79a Mon Sep 17 00:00:00 2001 From: hided62 Date: Mon, 17 Aug 2026 10:49:35 +0000 Subject: [PATCH] =?UTF-8?q?test:=20=EA=B5=AD=EA=B0=80=20=ED=84=B4=20lease?= =?UTF-8?q?=20=EC=9E=AC=EA=B8=B0=EC=A4=80=ED=99=94=20=EA=B2=BD=EA=B3=84?= =?UTF-8?q?=EB=A5=BC=20=EA=B3=A0=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit daemon이 같은 revision의 lease를 보유한 동안 current-position 입력이 큐를 덮어쓰지 않는 회귀를 추가한다. --- app/game-api/test/reservedTurns.test.ts | 32 +++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/app/game-api/test/reservedTurns.test.ts b/app/game-api/test/reservedTurns.test.ts index c5066ddc..6fc5bca6 100644 --- a/app/game-api/test/reservedTurns.test.ts +++ b/app/game-api/test/reservedTurns.test.ts @@ -10,6 +10,7 @@ import { setGeneralTurn, setGeneralTurns, setNationTurn, + setNationTurnAtCurrentPosition, setNationTurns, setNationTurnsAtCurrentPositions, shiftGeneralTurns, @@ -423,4 +424,35 @@ describe('reservedTurns', () => { expect(deleteMany).not.toHaveBeenCalled(); expect(createMany).not.toHaveBeenCalled(); }); + + it('does not rebase a current-position nation write while the daemon lease holds the same revision', async () => { + const deleteMany = vi.fn(async () => ({})); + const createMany = vi.fn(async () => ({})); + const db = { + nationTurnRevision: { + updateMany: vi.fn(async () => ({ count: 0 })), + createMany: vi.fn(async () => ({ count: 0 })), + findUnique: vi.fn(async () => ({ + nationId: 6, + officerLevel: 12, + revision: 4, + leaseOwner: 'daemon-1', + leaseExpiresAt: new Date(Date.now() + 60_000), + updatedAt: new Date(), + })), + }, + nationTurn: { + findMany: vi.fn(async () => []), + deleteMany, + createMany, + }, + } as unknown as DatabaseClient; + + await expect(setNationTurnAtCurrentPosition(db, 6, 12, 2, 'che_증축', {}, 4)).rejects.toMatchObject({ + expectedRevision: 4, + currentRevision: 4, + }); + expect(deleteMany).not.toHaveBeenCalled(); + expect(createMany).not.toHaveBeenCalled(); + }); });