Files
kandev/apps/web/e2e/helpers/message-queue-settings.ts
2026-08-13 08:43:26 +01:00

60 lines
2.0 KiB
TypeScript

import type { ApiClient } from "./api-client";
import type {
MessageQueueSettingsPatch,
MessageQueueSettingsResponse,
MessageQueueSettingsValue,
} from "../../lib/types/system";
type KandevTest = typeof import("../fixtures/test-base").test;
export const MESSAGE_QUEUE_SETTINGS_PATH = "/api/v1/system/message-queue/settings";
export async function requestMessageQueueSettings(
apiClient: ApiClient,
method: "GET" | "PATCH",
patch?: MessageQueueSettingsPatch,
): Promise<MessageQueueSettingsResponse> {
const response = await apiClient.rawRequest(method, MESSAGE_QUEUE_SETTINGS_PATH, patch);
if (!response.ok) {
throw new Error(
`${method} ${MESSAGE_QUEUE_SETTINGS_PATH} failed (${response.status}): ${await response.text()}`,
);
}
return response.json() as Promise<MessageQueueSettingsResponse>;
}
export async function restoreMessageQueueSettings(
apiClient: ApiClient,
baseline: MessageQueueSettingsValue,
): Promise<void> {
const current = await requestMessageQueueSettings(apiClient, "GET");
const patch: MessageQueueSettingsPatch = {
merge_enabled: baseline.merge_enabled,
auto_merge_enabled: baseline.auto_merge_enabled,
};
if (!current.effective.locked) {
patch.max_per_session = baseline.max_per_session;
}
await requestMessageQueueSettings(apiClient, "PATCH", patch);
}
/**
* Register per-test isolation for specs whose assertions require separate
* compatible queue rows. Captures and restores every install-wide queue field
* so the helper cannot leak a concurrent capacity or manual-merge baseline.
*/
export function registerSeparateQueueRows(test: KandevTest): void {
let baseline: MessageQueueSettingsValue | undefined;
test.beforeEach(async ({ apiClient }) => {
baseline = (await requestMessageQueueSettings(apiClient, "GET")).settings;
await requestMessageQueueSettings(apiClient, "PATCH", { auto_merge_enabled: false });
});
test.afterEach(async ({ apiClient }) => {
if (!baseline) return;
await restoreMessageQueueSettings(apiClient, baseline);
baseline = undefined;
});
}