Files
kandev/apps/web/components/state-provider.test.tsx
T
Carlos Florêncio b9eb6ae058 refactor(web): remove legacy settings migration (#1704)
* refactor(web): remove legacy settings migration

* fix(web): hydrate portable settings from boot state

* fix(web): preserve sidebar sync contracts

* fix(web): retain portable settings filters

* fix(web): retry sidebar settings writes

* fix(web): retain sidebar boot settings

* fix(websocket): avoid shutdown teardown leaks

* fix(boot): normalize sidebar task preferences

* fix(settings): preserve saved views during hydration

* fix(jira): avoid duplicate saved-view syncs

* fix(jira): preserve saved views on fetch failure

* fix(jira): retry saved-view hydration failures

* refactor(jira): simplify hydration request cleanup

* fix(websocket): close late clients after hub shutdown
2026-07-16 00:06:41 +01:00

96 lines
2.6 KiB
TypeScript

import { fireEvent, render, screen } from "@testing-library/react";
import { beforeEach, describe, expect, it, vi } from "vitest";
import { defaultSettingsState } from "@/lib/state/slices/settings/settings-slice";
import {
readQueuedTaskCreateLastUsedState,
resetTaskCreateLastUsedSync,
syncTaskCreateLastUsed,
} from "./task-create-dialog-handlers";
import { StateProvider, useAppStore } from "./state-provider";
function ShowMetricsPreference({ label }: { label: string }) {
const enabled = useAppStore((state) => state.userSettings.systemMetricsDisplay.showInTopbar);
return (
<div>
{label}:{enabled ? "on" : "off"}
</div>
);
}
function EnableMetricsFromNestedProvider() {
const setUserSettings = useAppStore((state) => state.setUserSettings);
const userSettings = useAppStore((state) => state.userSettings);
return (
<button
type="button"
onClick={() =>
setUserSettings({
...userSettings,
systemMetricsDisplay: { showInTopbar: true },
loaded: true,
})
}
>
Enable metrics
</button>
);
}
beforeEach(() => {
window.localStorage.clear();
resetTaskCreateLastUsedSync({ clearQueued: true });
vi.restoreAllMocks();
});
describe("StateProvider", () => {
it("reuses the parent store for nested route providers", async () => {
render(
<StateProvider>
<ShowMetricsPreference label="root" />
<StateProvider
initialState={{
userSettings: {
...defaultSettingsState.userSettings,
systemMetricsDisplay: { showInTopbar: false },
loaded: true,
},
}}
>
<EnableMetricsFromNestedProvider />
</StateProvider>
</StateProvider>,
);
expect(screen.getByText("root:off")).toBeTruthy();
fireEvent.click(screen.getByRole("button", { name: "Enable metrics" }));
expect(await screen.findByText("root:on")).toBeTruthy();
});
});
describe("StateProvider task-create queued overlay", () => {
it("clears the queued overlay when loaded settings catch up", () => {
syncTaskCreateLastUsed({ repository_id: "repo-1", branch: "main" });
render(
<StateProvider
initialState={{
userSettings: {
...defaultSettingsState.userSettings,
loaded: true,
taskCreateLastUsed: {
repositoryId: "repo-1",
branch: "main",
agentProfileId: null,
executorProfileId: null,
},
},
}}
>
<div>ready</div>
</StateProvider>,
);
expect(readQueuedTaskCreateLastUsedState()).toEqual({});
});
});