chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { buildBufferedTriggerPayload } from "~/v3/mollifier/bufferedTriggerPayload.server";
|
||||
|
||||
describe("buildBufferedTriggerPayload", () => {
|
||||
const baseInput = {
|
||||
runFriendlyId: "run_abc",
|
||||
taskId: "my-task",
|
||||
envId: "env_1",
|
||||
envType: "DEVELOPMENT",
|
||||
envSlug: "dev",
|
||||
orgId: "org_1",
|
||||
orgSlug: "acme",
|
||||
projectId: "proj_db_id",
|
||||
projectRef: "proj_xyz",
|
||||
body: { payload: { hello: "world" }, options: { tags: ["t1"] } } as any,
|
||||
idempotencyKey: null,
|
||||
idempotencyKeyExpiresAt: null,
|
||||
tags: ["t1"],
|
||||
parentRunFriendlyId: null,
|
||||
traceContext: { traceparent: "00-abc-def-01" },
|
||||
triggerSource: "api" as const,
|
||||
triggerAction: "trigger" as const,
|
||||
serviceOptions: {} as any,
|
||||
createdAt: new Date("2026-05-13T09:00:00.000Z"),
|
||||
};
|
||||
|
||||
it("captures all routing identifiers without losing data", () => {
|
||||
const payload = buildBufferedTriggerPayload(baseInput);
|
||||
|
||||
expect(payload.runFriendlyId).toBe("run_abc");
|
||||
expect(payload.envId).toBe("env_1");
|
||||
expect(payload.envType).toBe("DEVELOPMENT");
|
||||
expect(payload.envSlug).toBe("dev");
|
||||
expect(payload.orgId).toBe("org_1");
|
||||
expect(payload.orgSlug).toBe("acme");
|
||||
expect(payload.projectId).toBe("proj_db_id");
|
||||
expect(payload.projectRef).toBe("proj_xyz");
|
||||
expect(payload.taskId).toBe("my-task");
|
||||
});
|
||||
|
||||
it("serialises idempotencyKeyExpiresAt to ISO string only when key is present", () => {
|
||||
const withKey = buildBufferedTriggerPayload({
|
||||
...baseInput,
|
||||
idempotencyKey: "ik_1",
|
||||
idempotencyKeyExpiresAt: new Date("2026-05-13T10:00:00.000Z"),
|
||||
});
|
||||
expect(withKey.idempotencyKey).toBe("ik_1");
|
||||
expect(withKey.idempotencyKeyExpiresAt).toBe("2026-05-13T10:00:00.000Z");
|
||||
|
||||
const noKey = buildBufferedTriggerPayload(baseInput);
|
||||
expect(noKey.idempotencyKey).toBeNull();
|
||||
expect(noKey.idempotencyKeyExpiresAt).toBeNull();
|
||||
|
||||
// Defensive: an expiresAt without an accompanying key is an impossible
|
||||
// idempotency state — drop the expiresAt rather than serialise it.
|
||||
const orphanExpiry = buildBufferedTriggerPayload({
|
||||
...baseInput,
|
||||
idempotencyKey: null,
|
||||
idempotencyKeyExpiresAt: new Date("2026-05-13T10:00:00.000Z"),
|
||||
});
|
||||
expect(orphanExpiry.idempotencyKey).toBeNull();
|
||||
expect(orphanExpiry.idempotencyKeyExpiresAt).toBeNull();
|
||||
});
|
||||
|
||||
it("preserves customer body byte-equivalent (drainer replay must match Postgres)", () => {
|
||||
const body = {
|
||||
payload: { quotes: 'a"b', newline: "x\ny", unicode: "🚀", nested: { n: 1 } },
|
||||
options: { tags: ["a"], maxAttempts: 3, machine: "small-1x" },
|
||||
} as any;
|
||||
const payload = buildBufferedTriggerPayload({ ...baseInput, body });
|
||||
expect(payload.body).toEqual(body);
|
||||
|
||||
// JSON round-trip is the storage path; verify no information loss.
|
||||
const roundtripped = JSON.parse(JSON.stringify(payload.body));
|
||||
expect(roundtripped).toEqual(body);
|
||||
});
|
||||
|
||||
it("createdAt is serialised to ISO 8601", () => {
|
||||
const payload = buildBufferedTriggerPayload(baseInput);
|
||||
expect(payload.createdAt).toBe("2026-05-13T09:00:00.000Z");
|
||||
});
|
||||
|
||||
it("preserves traceContext (OTel continuity across buffer→drain boundary)", () => {
|
||||
const traceContext = { traceparent: "00-x-y-01", tracestate: "vendor=foo" };
|
||||
const payload = buildBufferedTriggerPayload({ ...baseInput, traceContext });
|
||||
expect(payload.traceContext).toEqual(traceContext);
|
||||
});
|
||||
|
||||
it("nullable parentRunFriendlyId — present and absent", () => {
|
||||
expect(buildBufferedTriggerPayload(baseInput).parentRunFriendlyId).toBeNull();
|
||||
expect(
|
||||
buildBufferedTriggerPayload({ ...baseInput, parentRunFriendlyId: "run_parent" })
|
||||
.parentRunFriendlyId
|
||||
).toBe("run_parent");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user