Files
WRNexusJS/packages/test/test/platform.test.ts
T
Clintchiz 586a6db8ff
Quality / quality (ubuntu-latest) (push) Failing after 21s
Quality / quality (windows-latest) (push) Canceled after 0s
release: WRNexusJS 0.8.0
2026-08-02 23:18:51 +05:30

64 lines
1.9 KiB
TypeScript

import { expect, test } from "bun:test";
import { captureBrowserArtifacts, createFactory, withDatabaseRollback } from "../src/index.ts";
import { mkdtempSync, rmSync } from "node:fs";
import { tmpdir } from "node:os";
import { join } from "node:path";
test("factories are deterministic, bounded and override-safe", () => {
const users = createFactory((sequence) => ({
id: sequence,
email: `user${sequence}@test.local`,
}));
expect(users.build().id).toBe(1);
expect(users.build({ email: "custom@test.local" }).email).toBe("custom@test.local");
users.reset();
expect(users.buildMany(2).map((user) => user.id)).toEqual([1, 2]);
expect(() => users.buildMany(10_001)).toThrow();
});
test("database isolation always rolls back while returning the test value", async () => {
let rolledBack = false;
const db = {
async tx<T>(run: (transaction: any) => Promise<T>): Promise<T> {
try {
return await run(db);
} catch (error) {
rolledBack = true;
throw error;
}
},
};
expect(await withDatabaseRollback(db, async () => 42)).toBe(42);
expect(rolledBack).toBeTrue();
});
test("browser artifact helper writes safe screenshot and trace paths", async () => {
const root = mkdtempSync(join(tmpdir(), "wrnexus-browser-artifacts-"));
const calls: string[] = [];
try {
const result = await captureBrowserArtifacts(
{
async screenshot({ path }) {
calls.push(path);
},
context() {
return {
tracing: {
async stop({ path }) {
calls.push(path);
},
},
};
},
},
"user / unsafe name",
{ root, trace: true },
);
expect(result.screenshot).toEndWith("user-unsafe-name.png");
expect(result.trace).toEndWith("user-unsafe-name.zip");
expect(calls).toHaveLength(2);
} finally {
rmSync(root, { recursive: true, force: true });
}
});