FN-6322: validate settings scopes workflow payload
Clarify and cover the settings scopes response shape including workflow settings. - Document that GET /api/settings/scopes returns workflowSettings with global and project scopes. - Assert workflowSettings is always a non-null object for default and project-scoped route tests. - Preserve exact workflow setting payload coverage when workflow overrides are present. Files changed: docs/settings-reference.md | 2 +- packages/dashboard/src/__tests__/routes-settings.test.ts | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) Fusion-Task-Id: FN-6322 Fusion-Task-Lineage: 08796f9d-be99-46a1-8326-251a8d79dda4
This commit is contained in:
@@ -21,7 +21,7 @@ At runtime, settings are merged. **Project settings override global settings** w
|
||||
| `PUT /api/settings` | Update project settings only. |
|
||||
| `GET /api/settings/global` | Get global settings only. |
|
||||
| `PUT /api/settings/global` | Update global settings only. |
|
||||
| `GET /api/settings/scopes` | Get separated `{ global, project }` view. |
|
||||
| `GET /api/settings/scopes` | Get separated `{ global, project, workflowSettings }` view. |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1376,6 +1376,10 @@ describe("GET /settings/scopes", () => {
|
||||
expect(res.body.global.persistAgentThinkingLog).toBe(false);
|
||||
expect(res.body.project.maxConcurrent).toBe(4);
|
||||
expect(res.body.project.autoMerge).toBe(false);
|
||||
expect(res.body.workflowSettings).toEqual({});
|
||||
expect(res.body.workflowSettings).not.toBeNull();
|
||||
expect(typeof res.body.workflowSettings).toBe("object");
|
||||
expect(Array.isArray(res.body.workflowSettings)).toBe(false);
|
||||
expect(res.body.project.persistAgentToolOutput).toBeUndefined();
|
||||
expect(res.body.project.persistAgentThinkingLogPermanent).toBeUndefined();
|
||||
expect(res.body.project.persistAgentThinkingLogEphemeral).toBeUndefined();
|
||||
@@ -1398,6 +1402,9 @@ describe("GET /settings/scopes", () => {
|
||||
expect(res.body).toHaveProperty("global");
|
||||
expect(res.body).toHaveProperty("project");
|
||||
expect(res.body).toHaveProperty("workflowSettings");
|
||||
expect(res.body.workflowSettings).not.toBeNull();
|
||||
expect(typeof res.body.workflowSettings).toBe("object");
|
||||
expect(Array.isArray(res.body.workflowSettings)).toBe(false);
|
||||
// No unexpected top-level keys
|
||||
const keys = Object.keys(res.body);
|
||||
expect(keys).toHaveLength(3);
|
||||
@@ -1587,6 +1594,10 @@ describe("GET /settings/scopes with projectId scoping", () => {
|
||||
expect(projectStoreResolver.getOrCreateProjectStore).toHaveBeenCalledWith(projectId);
|
||||
expect(scopedStore.getSettingsByScopeFast).toHaveBeenCalled();
|
||||
expect(defaultStore.getSettingsByScopeFast).not.toHaveBeenCalled();
|
||||
expect(res.body.workflowSettings).toEqual({});
|
||||
expect(res.body.workflowSettings).not.toBeNull();
|
||||
expect(typeof res.body.workflowSettings).toBe("object");
|
||||
expect(Array.isArray(res.body.workflowSettings)).toBe(false);
|
||||
expect(res.body.project.maxConcurrent).toBe(8);
|
||||
expect(res.body.project.planningProvider).toBe("anthropic");
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user