feat(FN-2611): merge fusion/fn-2611 (auto-resolved)

- feat(FN-2611): complete Step 4 — add changeset and docs
- test(FN-2611): complete Step 2 — cover legacy alias cleanup payload
- feat(FN-2611): complete Step 1 — normalize legacy experimental aliases
This commit is contained in:
Fusion
2026-04-26 14:19:18 -07:00
committed by gsxdsm
parent fc32aacb33
commit cb3a08e246
3 changed files with 38 additions and 4 deletions

View File

@@ -1191,7 +1191,7 @@ describe("SettingsModal", () => {
});
});
it("normalizes legacy devServer flag to canonical devServerView on save", async () => {
it("sends canonical devServerView=false and devServer=null when disabling legacy dev server flag", async () => {
mockFetchSettings.mockResolvedValue({
...defaultSettings,
experimentalFeatures: { devServer: true },
@@ -1204,6 +1204,9 @@ describe("SettingsModal", () => {
const devServerToggle = screen.getByLabelText("Dev Server") as HTMLInputElement;
expect(devServerToggle).toBeChecked();
await userEvent.click(devServerToggle);
expect(devServerToggle).not.toBeChecked();
await userEvent.click(screen.getByText("Save"));
await waitFor(() => {
@@ -1211,7 +1214,27 @@ describe("SettingsModal", () => {
});
const payload = mockUpdateSettings.mock.calls[0][0];
expect(payload.experimentalFeatures).toEqual({ devServerView: true });
expect(payload.experimentalFeatures).toEqual({ devServerView: false, devServer: null });
});
it("does not emit legacy alias null deletes when canonical key is absent", async () => {
mockFetchSettings.mockResolvedValue({
...defaultSettings,
experimentalFeatures: { insights: true },
});
renderModal();
await openExperimentalFeaturesSection();
await userEvent.click(screen.getByText("Save"));
await waitFor(() => {
expect(mockUpdateSettings).toHaveBeenCalledTimes(1);
});
const payload = mockUpdateSettings.mock.calls[0][0];
expect(payload.experimentalFeatures).toEqual({ insights: true });
expect(payload.experimentalFeatures.devServer).toBeUndefined();
});