Align host settings with the 1.0 lifecycle

This commit is contained in:
vorotamoroz
2026-07-20 13:20:48 +00:00
parent 52e7bd25da
commit 80d1416a81
28 changed files with 360 additions and 57 deletions
@@ -39,7 +39,10 @@ function createFixture(
if (options.legacyMarker !== undefined && options.legacyMarker !== null) {
local.set(legacyKey, options.legacyMarker);
}
const settings = { versionUpFlash: options.versionUpFlash ?? "" };
const settings: {
versionUpFlash: string;
handleFilenameCaseSensitive?: boolean;
} = { versionUpFlash: options.versionUpFlash ?? "" };
const saveSettingData = vi.fn().mockResolvedValue(undefined);
const applySettings = vi.fn().mockResolvedValue(true);
const setting = {
@@ -106,6 +109,61 @@ describe("compatibility review controller", () => {
expect(fixture.ui.clearReminder).toHaveBeenCalled();
});
it("requires an explicit legacy-compatible filename-case decision before resuming", async () => {
const fixture = createFixture({
marker: "12",
migration: {
sourceVersion: 10,
targetVersion: 10,
requiresSyncReview: true,
reviewReasons: [
{
code: "filename-case-sensitivity-unresolved",
fromVersion: 10,
toVersion: 10,
},
],
},
});
vi.mocked(fixture.ui.showSummary).mockResolvedValue("use-case-sensitive" as never);
await fixture.controller.initialise();
await fixture.controller.openReview();
expect(fixture.settings.handleFilenameCaseSensitive).toBe(true);
expect(fixture.local.get(DATABASE_COMPATIBILITY_VERSION_KEY)).toBe("12");
expect(fixture.saveSettingData).toHaveBeenCalledTimes(2);
expect(fixture.applySettings).toHaveBeenCalledOnce();
expect(fixture.controller.pendingPause).toBeUndefined();
});
it("does not let a generic resume action bypass an unresolved filename-case decision", async () => {
const fixture = createFixture({
marker: "12",
migration: {
sourceVersion: 10,
targetVersion: 10,
requiresSyncReview: true,
reviewReasons: [
{
code: "filename-case-sensitivity-unresolved",
fromVersion: 10,
toVersion: 10,
},
],
},
});
vi.mocked(fixture.ui.showSummary).mockResolvedValue("resume");
await fixture.controller.initialise();
await fixture.controller.openReview();
expect(fixture.settings.handleFilenameCaseSensitive).toBeUndefined();
expect(fixture.applySettings).not.toHaveBeenCalled();
expect(fixture.controller.pendingPause).toBeDefined();
expect(fixture.ui.showReminder).toHaveBeenCalledOnce();
});
it("does not allow a downgrade pause to be resumed", async () => {
const fixture = createFixture({ marker: "13" });
vi.mocked(fixture.ui.showSummary).mockResolvedValue("resume");