import { DEFAULT_SERVER_SETTINGS, ProviderDriverKind, ProviderInstanceId,} from "@t3tools/contracts";import { DEFAULT_CLIENT_SETTINGS } from "@t3tools/contracts/settings";import { describe, expect, it } from "vite-plus/test"; import { selectProjectGroupingSettings } from "../logicalProject";import { areSettingsSelectionsEqual, createSettingsSelectorSnapshotReader, mergeEnvironmentSettings,} from "./useSettings"; describe("mergeEnvironmentSettings", () => { it("combines the selected environment's server settings with client preferences", () => { const serverSettings = { ...DEFAULT_SERVER_SETTINGS, providerInstances: { [ProviderInstanceId.make("codex_remote")]: { driver: ProviderDriverKind.make("codex"), enabled: true, }, }, }; const clientSettings = { ...DEFAULT_CLIENT_SETTINGS, favorites: [ { provider: ProviderInstanceId.make("codex_remote"), model: "gpt-5.4", }, ], }; const settings = mergeEnvironmentSettings(serverSettings, clientSettings); expect(settings.providerInstances).toBe(serverSettings.providerInstances); expect(settings.favorites).toBe(clientSettings.favorites); });}); describe("createSettingsSelectorSnapshotReader", () => { it("reuses the selected reference when unrelated settings change", () => { let settings = DEFAULT_CLIENT_SETTINGS; const readProjectGroupingSettings = createSettingsSelectorSnapshotReader( () => settings, selectProjectGroupingSettings, ); const initialSelection = readProjectGroupingSettings(); settings = { ...settings, favorites: [ { provider: ProviderInstanceId.make("codex_remote"), model: "gpt-5.4", }, ], }; const unrelatedUpdateSelection = readProjectGroupingSettings(); expect(unrelatedUpdateSelection).toBe(initialSelection); settings = { ...settings, sidebarProjectGroupingMode: "repository_path", }; const relatedUpdateSelection = readProjectGroupingSettings(); expect(relatedUpdateSelection).not.toBe(initialSelection); expect(relatedUpdateSelection.sidebarProjectGroupingMode).toBe("repository_path"); });}); describe("areSettingsSelectionsEqual", () => { it("compares selected objects shallowly", () => { expect(areSettingsSelectionsEqual({ a: 1, b: "same" }, { a: 1, b: "same" })).toBe(true); expect(areSettingsSelectionsEqual({ a: 1 }, { a: 2 })).toBe(false); });});
import {
DEFAULT_SERVER_SETTINGS,
ProviderDriverKind,
ProviderInstanceId,
} from "@t3tools/contracts";
import { DEFAULT_CLIENT_SETTINGS } from "@t3tools/contracts/settings";
import { describe, expect, it } from "vite-plus/test";
import { selectProjectGroupingSettings } from "../logicalProject";
import {
areSettingsSelectionsEqual,
createSettingsSelectorSnapshotReader,
mergeEnvironmentSettings,
} from "./useSettings";
describe("mergeEnvironmentSettings", () => {
it("combines the selected environment's server settings with client preferences", () => {
const serverSettings = {
...DEFAULT_SERVER_SETTINGS,
providerInstances: {
[ProviderInstanceId.make("codex_remote")]: {
driver: ProviderDriverKind.make("codex"),
enabled: true,
},
},
};
const clientSettings = {
...DEFAULT_CLIENT_SETTINGS,
favorites: [
{
provider: ProviderInstanceId.make("codex_remote"),
model: "gpt-5.4",
},
],
};
const settings = mergeEnvironmentSettings(serverSettings, clientSettings);
expect(settings.providerInstances).toBe(serverSettings.providerInstances);
expect(settings.favorites).toBe(clientSettings.favorites);
});
});
describe("createSettingsSelectorSnapshotReader", () => {
it("reuses the selected reference when unrelated settings change", () => {
let settings = DEFAULT_CLIENT_SETTINGS;
const readProjectGroupingSettings = createSettingsSelectorSnapshotReader(
() => settings,
selectProjectGroupingSettings,
);
const initialSelection = readProjectGroupingSettings();
settings = {
...settings,
favorites: [
{
provider: ProviderInstanceId.make("codex_remote"),
model: "gpt-5.4",
},
],
};
const unrelatedUpdateSelection = readProjectGroupingSettings();
expect(unrelatedUpdateSelection).toBe(initialSelection);
settings = {
...settings,
sidebarProjectGroupingMode: "repository_path",
};
const relatedUpdateSelection = readProjectGroupingSettings();
expect(relatedUpdateSelection).not.toBe(initialSelection);
expect(relatedUpdateSelection.sidebarProjectGroupingMode).toBe("repository_path");
});
});
describe("areSettingsSelectionsEqual", () => {
it("compares selected objects shallowly", () => {
expect(areSettingsSelectionsEqual({ a: 1, b: "same" }, { a: 1, b: "same" })).toBe(true);
expect(areSettingsSelectionsEqual({ a: 1 }, { a: 2 })).toBe(false);
});
});