64 lines
4.0 KiB
TypeScript
64 lines
4.0 KiB
TypeScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import { createHttpServer } from "../src/app/http.ts";
|
|
import { createStore } from "../src/store.ts";
|
|
|
|
test("health endpoint exposes the service contract", async () => {
|
|
const server = createHttpServer(createStore(), { host: "127.0.0.1", port: 0, accessTokenSecret: "test", accessTokenTtlSeconds: 900, refreshCookieName: "refresh", adminEmail: "admin@example.com", adminPassword: "change-me-now", adminMfaRequired: true });
|
|
await new Promise<void>((resolve) => server.listen(0, "127.0.0.1", resolve));
|
|
const address = server.address();
|
|
assert.ok(address && typeof address !== "string");
|
|
const response = await fetch(`http://127.0.0.1:${address.port}/api/health`);
|
|
assert.equal(response.status, 200);
|
|
const payload = (await response.json()) as { ok: boolean; data: { service: string } };
|
|
assert.equal(payload.ok, true);
|
|
assert.equal(payload.data.service, "miragenflow-server");
|
|
await new Promise<void>((resolve, reject) => server.close((error) => (error ? reject(error) : resolve())));
|
|
});
|
|
|
|
test("readiness returns 503 when a dependency is unavailable and unknown API routes return 404", async () => {
|
|
const store = createStore();
|
|
store.health = async () => ({ persistence: { adapter: "memory", status: "unavailable", detail: "test failure" }, queue: { adapter: "memory", status: "ready" } });
|
|
const server = createHttpServer(store, { host: "127.0.0.1", port: 0, accessTokenSecret: "test", accessTokenTtlSeconds: 900, refreshCookieName: "refresh", adminEmail: "admin@example.com", adminPassword: "change-me-now", adminMfaRequired: true });
|
|
await new Promise<void>((resolve) => server.listen(0, "127.0.0.1", resolve));
|
|
const address = server.address(); assert.ok(address && typeof address !== "string");
|
|
try {
|
|
const base = `http://127.0.0.1:${address.port}`;
|
|
assert.equal((await fetch(`${base}/api/ready`)).status, 503);
|
|
assert.equal((await fetch(`${base}/api/v1/not-a-real-route`)).status, 404);
|
|
} finally { await new Promise<void>((resolve, reject) => server.close((error) => error ? reject(error) : resolve())); }
|
|
});
|
|
|
|
test("fixture profiles keep mock payment out of normal development and production", async () => {
|
|
const previousNodeEnv = process.env.NODE_ENV;
|
|
const previousTestMode = process.env.MIRAGENFLOW_TEST_MODE;
|
|
let server: ReturnType<typeof createHttpServer> | undefined;
|
|
try {
|
|
process.env.NODE_ENV = "development";
|
|
delete process.env.MIRAGENFLOW_TEST_MODE;
|
|
assert.equal(createStore().paymentProviders.size, 0);
|
|
|
|
process.env.MIRAGENFLOW_TEST_MODE = "true";
|
|
assert.equal(createStore().paymentProviders.size, 1);
|
|
|
|
process.env.NODE_ENV = "production";
|
|
delete process.env.MIRAGENFLOW_TEST_MODE;
|
|
const store = createStore();
|
|
const serverInstance = createHttpServer(store, { host: "127.0.0.1", port: 0, accessTokenSecret: "production-test-secret", accessTokenTtlSeconds: 900, refreshCookieName: "refresh", adminEmail: "admin@example.com", adminPassword: "production-password", adminMfaRequired: false });
|
|
server = serverInstance;
|
|
assert.equal(store.products.length, 0);
|
|
assert.equal(store.paymentProviders.size, 0);
|
|
await new Promise<void>((resolve) => serverInstance.listen(0, "127.0.0.1", resolve));
|
|
const address = serverInstance.address(); assert.ok(address && typeof address !== "string");
|
|
const response = await fetch(`http://127.0.0.1:${address.port}/api/v1/payment/webhooks/mock`, { method: "POST", headers: { "content-type": "application/json" }, body: "{}" });
|
|
assert.equal(response.status, 404);
|
|
} finally {
|
|
const activeServer = server;
|
|
if (activeServer) await new Promise<void>((resolve, reject) => activeServer.close((error) => error ? reject(error) : resolve()));
|
|
if (previousNodeEnv === undefined) delete process.env.NODE_ENV;
|
|
else process.env.NODE_ENV = previousNodeEnv;
|
|
if (previousTestMode === undefined) delete process.env.MIRAGENFLOW_TEST_MODE;
|
|
else process.env.MIRAGENFLOW_TEST_MODE = previousTestMode;
|
|
}
|
|
});
|