59 lines
2.2 KiB
TypeScript
59 lines
2.2 KiB
TypeScript
// @vitest-environment node
|
|
import { describe, expect, it } from "vitest";
|
|
import { buildDeployMetadata, getDeployAdminSnapshot } from "./deploy-admin.server";
|
|
|
|
describe("admin deploy snapshot service", () => {
|
|
it("builds deploy metadata from runtime env", () => {
|
|
expect(
|
|
buildDeployMetadata({
|
|
NODE_ENV: "production",
|
|
SENTRY_ENVIRONMENT: "staging",
|
|
APP_REVISION: "abc123",
|
|
SENTRY_RELEASE: "rel-1",
|
|
GIT_BRANCH: "main",
|
|
DOCKER_IMAGE: "git.tool-ctrl.de/toolctrl-labs/hivegrid-web:abc123",
|
|
BUILD_TIME: "2026-07-09T00:00:00.000Z",
|
|
})
|
|
).toEqual({
|
|
environment: "staging",
|
|
nodeEnv: "production",
|
|
release: "rel-1",
|
|
revision: "abc123",
|
|
branch: "main",
|
|
image: "git.tool-ctrl.de/toolctrl-labs/hivegrid-web:abc123",
|
|
buildTime: "2026-07-09T00:00:00.000Z",
|
|
});
|
|
});
|
|
|
|
it("merges repo migrations with applied DB state", async () => {
|
|
const snapshot = await getDeployAdminSnapshot({
|
|
env: { NODE_ENV: "production", APP_REVISION: "abc123" },
|
|
listMigrationNames: () => ["20260701000000_init", "20260702000000_next", "20260703000000_failed"],
|
|
listAppliedMigrations: async () => [
|
|
{ migration_name: "20260701000000_init", finished_at: new Date("2026-07-01T00:00:00.000Z"), rolled_back_at: null, logs: null },
|
|
{ migration_name: "20260703000000_failed", finished_at: null, rolled_back_at: null, logs: "failed" },
|
|
],
|
|
});
|
|
|
|
expect(snapshot.migrationDbReachable).toBe(true);
|
|
expect(snapshot.migrations.map((migration) => [migration.name, migration.state])).toEqual([
|
|
["20260703000000_failed", "failed"],
|
|
["20260702000000_next", "pending"],
|
|
["20260701000000_init", "applied"],
|
|
]);
|
|
});
|
|
|
|
it("falls back to unknown migration state when DB is unreachable", async () => {
|
|
const snapshot = await getDeployAdminSnapshot({
|
|
env: { NODE_ENV: "development" },
|
|
listMigrationNames: () => ["20260701000000_init"],
|
|
listAppliedMigrations: async () => {
|
|
throw new Error("db unavailable");
|
|
},
|
|
});
|
|
|
|
expect(snapshot.migrationDbReachable).toBe(false);
|
|
expect(snapshot.migrations).toEqual([{ name: "20260701000000_init", state: "unknown" }]);
|
|
});
|
|
});
|