Files
TJWaterAgent/tests/utils/fileStore.test.ts
T

34 lines
1.1 KiB
TypeScript

import { afterEach, beforeEach, describe, expect, it } from "bun:test";
import { mkdtemp, readdir, rm } from "node:fs/promises";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { atomicWriteFile, readTextFile } from "../../src/utils/fileStore.js";
describe("fileStore", () => {
const originalDateNow = Date.now;
let tempDir: string;
beforeEach(async () => {
tempDir = await mkdtemp(join(tmpdir(), "tjwater-file-store-"));
});
afterEach(async () => {
Date.now = originalDateNow;
await rm(tempDir, { force: true, recursive: true });
});
it("uses unique temp paths for concurrent writes in the same millisecond", async () => {
Date.now = () => 1_801_578_600_000;
const path = join(tempDir, "state.json");
const values = Array.from({ length: 24 }, (_, index) => `value-${index}`);
await Promise.all(values.map((value) => atomicWriteFile(path, value)));
const written = await readTextFile(path);
expect(written).not.toBeNull();
expect(values).toContain(written as string);
expect((await readdir(tempDir)).filter((name) => name.endsWith(".tmp"))).toEqual([]);
});
});