R66 A1-A6:小团队试点收敛与上线验收
这个提交包含在:
@@ -328,6 +328,8 @@ async function buildApp(options = {}) {
|
||||
|
||||
describe("portal routes", () => {
|
||||
beforeEach(() => {
|
||||
vi.useFakeTimers();
|
||||
vi.setSystemTime(new Date("2026-04-12T02:00:00.000Z"));
|
||||
featureFlagState.portalHome = true;
|
||||
featureFlagState.announcements = false;
|
||||
featureFlagState.presenceBoard = false;
|
||||
@@ -342,6 +344,10 @@ describe("portal routes", () => {
|
||||
buildTeamPresenceSummary.mockClear();
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
vi.useRealTimers();
|
||||
});
|
||||
|
||||
it("extends /portal/home with normalized recentActivities and teamStatusBoard", async () => {
|
||||
const recentWorkflowRows = Array.from({ length: 8 }, (_, index) =>
|
||||
buildWorkflowRow({
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
const {
|
||||
DEFAULT_MODULE_VISIBILITY,
|
||||
buildDefaultWorkspaceSetting,
|
||||
normalizeModuleVisibilityJson,
|
||||
} = require("../../src/services/workspaceSettings");
|
||||
|
||||
describe("workspace small-team navigation defaults", () => {
|
||||
it("keeps only the R66 daily path in default main navigation", () => {
|
||||
const mainModules = Object.entries(DEFAULT_MODULE_VISIBILITY)
|
||||
.filter(([, placement]) => placement === "main")
|
||||
.map(([key]) => key);
|
||||
|
||||
expect(mainModules).toEqual([
|
||||
"portal",
|
||||
"team",
|
||||
"leaveRequests",
|
||||
"reimbursements",
|
||||
"assets",
|
||||
"weeklyReports",
|
||||
"todos",
|
||||
"announcements",
|
||||
"projects",
|
||||
]);
|
||||
expect(DEFAULT_MODULE_VISIBILITY.attendance).toBe("hidden");
|
||||
});
|
||||
|
||||
it("normalizes unknown or invalid module visibility back to the R66 defaults", () => {
|
||||
const normalized = normalizeModuleVisibilityJson({
|
||||
attendance: "main",
|
||||
purchaseRequests: "hidden",
|
||||
unknownModule: "main",
|
||||
budgets: "invalid",
|
||||
});
|
||||
|
||||
expect(normalized.attendance).toBe("main");
|
||||
expect(normalized.purchaseRequests).toBe("hidden");
|
||||
expect(normalized.budgets).toBe(DEFAULT_MODULE_VISIBILITY.budgets);
|
||||
expect(normalized.unknownModule).toBeUndefined();
|
||||
});
|
||||
|
||||
it("builds a small-team internal workspace by default", () => {
|
||||
const workspace = buildDefaultWorkspaceSetting();
|
||||
|
||||
expect(workspace.profile).toBe("small_team_internal");
|
||||
expect(workspace.moduleVisibility.attendance).toBe("hidden");
|
||||
});
|
||||
});
|
||||
在新工单中引用
屏蔽一个用户