41 行
1.1 KiB
TypeScript
41 行
1.1 KiB
TypeScript
import type { APIRequestContext } from "@playwright/test";
|
|
|
|
import { apiGetData } from "./auth";
|
|
|
|
type FeatureFlagItem = {
|
|
flagKey: string;
|
|
overrideMode: "inherit" | "force_on" | "force_off";
|
|
rolloutType: "global" | "department_allowlist";
|
|
departmentIds: string[];
|
|
note: string;
|
|
version: number;
|
|
effectiveEnabled: boolean;
|
|
};
|
|
|
|
export async function ensureFeatureFlagOn(
|
|
api: APIRequestContext,
|
|
flagKey: string,
|
|
note = "playwright feature flag setup",
|
|
) {
|
|
const list = await apiGetData<{ items: FeatureFlagItem[] }>(api, "/api/system/feature-flags");
|
|
const item = list.items.find((flag) => flag.flagKey === flagKey);
|
|
if (!item) {
|
|
throw new Error(`Missing feature flag: ${flagKey}`);
|
|
}
|
|
if (item.overrideMode === "force_on" && item.effectiveEnabled) {
|
|
return;
|
|
}
|
|
const response = await api.put(`/api/system/feature-flags/${flagKey}`, {
|
|
data: {
|
|
overrideMode: "force_on",
|
|
rolloutType: "global",
|
|
departmentIds: [],
|
|
note,
|
|
expectedVersion: item.version,
|
|
},
|
|
});
|
|
if (!response.ok()) {
|
|
throw new Error(`Failed to enable feature flag ${flagKey}: ${response.status()} ${await response.text()}`);
|
|
}
|
|
}
|