From baaf42cd22fa797c707d0bf239e16f11dd977545 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 11 May 2026 08:38:20 +0100 Subject: [PATCH] test: tighten memory atomic reindex assertions --- .../src/memory/manager.atomic-reindex.test.ts | 32 +++++++++++++------ 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/extensions/memory-core/src/memory/manager.atomic-reindex.test.ts b/extensions/memory-core/src/memory/manager.atomic-reindex.test.ts index 9912bd533ed8..9e907b0470ef 100644 --- a/extensions/memory-core/src/memory/manager.atomic-reindex.test.ts +++ b/extensions/memory-core/src/memory/manager.atomic-reindex.test.ts @@ -10,7 +10,17 @@ import { } from "./manager-atomic-reindex.js"; async function expectPathMissing(targetPath: string): Promise { - await expect(fs.access(targetPath)).rejects.toMatchObject({ code: "ENOENT" }); + await expectRejectCode(fs.access(targetPath), "ENOENT"); +} + +async function expectRejectCode(promise: Promise, code: string): Promise { + try { + await promise; + } catch (error) { + expect((error as { code?: unknown }).code).toBe(code); + return; + } + throw new Error(`Expected rejection with code ${code}`); } describe("memory manager atomic reindex", () => { @@ -88,13 +98,14 @@ describe("memory manager atomic reindex", () => { const rename = vi.fn().mockRejectedValue(Object.assign(new Error("busy"), { code: "EBUSY" })); const wait = vi.fn().mockResolvedValue(undefined); - await expect( + await expectRejectCode( moveMemoryIndexFiles("index.sqlite.tmp", "index.sqlite", { fileOps: { rename, rm: fs.rm, wait }, maxRenameAttempts: 3, renameRetryDelayMs: 10, }), - ).rejects.toMatchObject({ code: "EBUSY" }); + "EBUSY", + ); expect(rename).toHaveBeenCalledTimes(3); expect(wait).toHaveBeenCalledTimes(2); @@ -126,13 +137,14 @@ describe("memory manager atomic reindex", () => { .mockRejectedValue(Object.assign(new Error("invalid"), { code: "EINVAL" })); const wait = vi.fn().mockResolvedValue(undefined); - await expect( + await expectRejectCode( moveMemoryIndexFiles("index.sqlite.tmp", "index.sqlite", { fileOps: { rename, rm: fs.rm, wait }, maxRenameAttempts: 3, renameRetryDelayMs: 10, }), - ).rejects.toMatchObject({ code: "EINVAL" }); + "EINVAL", + ); expect(rename).toHaveBeenCalledTimes(1); expect(wait).not.toHaveBeenCalled(); @@ -171,13 +183,14 @@ describe("memory manager atomic reindex", () => { const rm = vi.fn().mockRejectedValue(Object.assign(new Error("busy"), { code: "EBUSY" })); const wait = vi.fn().mockResolvedValue(undefined); - await expect( + await expectRejectCode( removeMemoryIndexFiles("index.sqlite.tmp", { fileOps: { rename: fs.rename, rm, wait }, maxRemoveAttempts: 3, removeRetryDelayMs: 10, }), - ).rejects.toMatchObject({ code: "EBUSY" }); + "EBUSY", + ); expect(rm).toHaveBeenCalledTimes(3); expect(wait).toHaveBeenCalledTimes(2); @@ -189,13 +202,14 @@ describe("memory manager atomic reindex", () => { const rm = vi.fn().mockRejectedValue(Object.assign(new Error("invalid"), { code: "EINVAL" })); const wait = vi.fn().mockResolvedValue(undefined); - await expect( + await expectRejectCode( removeMemoryIndexFiles("index.sqlite.tmp", { fileOps: { rename: fs.rename, rm, wait }, maxRemoveAttempts: 3, removeRetryDelayMs: 10, }), - ).rejects.toMatchObject({ code: "EINVAL" }); + "EINVAL", + ); expect(rm).toHaveBeenCalledTimes(1); expect(wait).not.toHaveBeenCalled();