feat(P19AI1-1,P19AI1-2): 实现AI建议引擎与权限门禁后端

这个提交包含在:
2026-03-10 14:20:59 +08:00
父节点 fdf3c43244
当前提交 6f534e9a3c
共修改 16 个文件,包含 2158 行新增和 5 行删除
@@ -174,17 +174,28 @@ describe("evaluateFeatureFlag", () => {
});
});
describe("leave holiday calendar flag", () => {
it("uses the dedicated env gate", async () => {
describe("feature flag env gates", () => {
it("uses the dedicated leave holiday calendar env gate", async () => {
const result = await evaluateFeatureFlag({
prisma: buildPrisma(),
config: { erpSyncEnabled: true, invoiceVerificationEnabled: true, leaveHolidayCalendarEnabled: false },
config: { aiAssistEnabled: true, erpSyncEnabled: true, invoiceVerificationEnabled: true, leaveHolidayCalendarEnabled: false },
flagKey: FEATURE_FLAG_KEYS.leaveHolidayCalendar,
});
expect(result.enabled).toBe(false);
expect(result.reason).toBe("env_hard_off");
});
it("uses the dedicated ai assist env gate", async () => {
const result = await evaluateFeatureFlag({
prisma: buildPrisma(),
config: { aiAssistEnabled: false, erpSyncEnabled: true, invoiceVerificationEnabled: true, leaveHolidayCalendarEnabled: true },
flagKey: FEATURE_FLAG_KEYS.aiAssist,
});
expect(result.enabled).toBe(false);
expect(result.reason).toBe("env_hard_off");
});
});
describe("listFeatureFlags", () => {
@@ -201,14 +212,15 @@ describe("listFeatureFlags", () => {
invoiceVerificationEnabled: true,
});
expect(items).toHaveLength(3);
expect(items).toHaveLength(4);
expect(items.map((item) => item.flagKey).sort()).toEqual([
FEATURE_FLAG_KEYS.aiAssist,
FEATURE_FLAG_KEYS.erpSync,
FEATURE_FLAG_KEYS.invoiceVerification,
FEATURE_FLAG_KEYS.leaveHolidayCalendar,
]);
const missingItem = items.find((item) => item.flagKey === FEATURE_FLAG_KEYS.leaveHolidayCalendar);
const missingItem = items.find((item) => item.flagKey === FEATURE_FLAG_KEYS.aiAssist);
expect(missingItem.id).toBeNull();
expect(missingItem.effectiveEnabled).toBe(false);
});