49 lines
1.6 KiB
TypeScript
49 lines
1.6 KiB
TypeScript
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
import { verifyDeployedRelease } from "../../scripts/verify-deployed-release.mjs";
|
|
|
|
const sha = "a".repeat(40);
|
|
afterEach(() => vi.unstubAllGlobals());
|
|
describe("deployed HTTP release readiness", () => {
|
|
it("waits through an old response and startup failure until the exact release is ready", async () => {
|
|
const fetch = vi
|
|
.fn()
|
|
.mockResolvedValueOnce(Response.json({ database: true }))
|
|
.mockRejectedValueOnce(new Error("connection refused"))
|
|
.mockResolvedValueOnce(Response.json({ database: true, release: sha }));
|
|
vi.stubGlobal("fetch", fetch);
|
|
const report = vi.fn();
|
|
await verifyDeployedRelease("http://localhost:3002/api/health", sha, {
|
|
attempts: 3,
|
|
interval: 0,
|
|
report,
|
|
});
|
|
expect(fetch).toHaveBeenCalledTimes(3);
|
|
expect(report).toHaveBeenCalledTimes(2);
|
|
expect(JSON.parse(report.mock.calls[0][0]).observed.release).toBeNull();
|
|
});
|
|
it.each([
|
|
[200, { database: true, release: "old" }],
|
|
[200, { database: true }],
|
|
[429, { status: "rate_limited" }],
|
|
[200, { database: false, release: sha }],
|
|
])(
|
|
"rejects HTTP %s without the expected healthy release",
|
|
async (status, body) => {
|
|
vi.stubGlobal(
|
|
"fetch",
|
|
vi.fn().mockResolvedValue(Response.json(body, { status })),
|
|
);
|
|
const report = vi.fn();
|
|
await expect(
|
|
verifyDeployedRelease("http://localhost:3002/api/health", sha, {
|
|
attempts: 2,
|
|
interval: 0,
|
|
report,
|
|
}),
|
|
).rejects.toThrow("never became healthy");
|
|
expect(report).toHaveBeenCalledTimes(2);
|
|
expect(JSON.parse(report.mock.calls[0][0]).observed.http).toBe(status);
|
|
},
|
|
);
|
|
});
|