| ... | ... | @@ -7,6 +7,7 @@ import { reactHookHarness as hooks } from "../../test/reactHookHarness"; |
| 7 | 7 | const state = vi.hoisted(() => ({ |
| 8 | 8 | canOperate: false, |
| 9 | 9 | canWriteSettings: true, |
| 10 | connected: true, |
| 10 | 11 | openEditor: vi.fn(), |
| 11 | 12 | upsert: vi.fn(), |
| 12 | 13 | remove: vi.fn(), |
| ... | ... | @@ -57,7 +58,9 @@ vi.mock("./SettingsScopeContext", () => ({ |
| 57 | 58 | availableEditors: [], |
| 58 | 59 | }, |
| 59 | 60 | }; |
| 60 | | return { environment, connectedEnvironments: [environment] }; |
| 61 | return state.connected |
| 62 | ? { environment, connectedEnvironments: [environment] } |
| 63 | : { environment: null, connectedEnvironments: [] }; |
| 61 | 64 | }, |
| 62 | 65 | })); |
| 63 | 66 | |
| ... | ... | @@ -104,6 +107,7 @@ describe("KeybindingsSettings editor permission", () => { |
| 104 | 107 | hooks.reset(); |
| 105 | 108 | state.canOperate = false; |
| 106 | 109 | state.canWriteSettings = true; |
| 110 | state.connected = true; |
| 107 | 111 | state.openEditor.mockReset().mockResolvedValue({ _tag: "Success", value: undefined }); |
| 108 | 112 | state.upsert.mockReset().mockResolvedValue({ _tag: "Success", value: undefined }); |
| 109 | 113 | state.remove.mockReset().mockResolvedValue({ _tag: "Success", value: undefined }); |
| ... | ... | @@ -141,3 +145,30 @@ describe("KeybindingsSettings editor permission", () => { |
| 141 | 145 | expect(openButton(renderPanel()).props.disabled).toBe(true); |
| 142 | 146 | }); |
| 143 | 147 | }); |
| 148 | |
| 149 | function noticeText(panel: unknown) { |
| 150 | const notice = visitElements(panel, (element) => element.type === "p"); |
| 151 | return notice?.props.children; |
| 152 | } |
| 153 | |
| 154 | describe("KeybindingsSettings write notice", () => { |
| 155 | beforeEach(() => { |
| 156 | hooks.reset(); |
| 157 | state.canWriteSettings = true; |
| 158 | state.connected = true; |
| 159 | }); |
| 160 | |
| 161 | // The hosted app has no environment until one is paired, so the editor is |
| 162 | // locked for a missing connection, not a missing permission. |
| 163 | it("asks for a connected environment when none is connected", () => { |
| 164 | state.connected = false; |
| 165 | expect(noticeText(renderPanel())).toBe("Connect an environment to change keybindings."); |
| 166 | }); |
| 167 | |
| 168 | it("names the permission when the connection cannot write settings", () => { |
| 169 | state.canWriteSettings = false; |
| 170 | expect(noticeText(renderPanel())).toBe( |
| 171 | "This connection can view keybindings but cannot change them.", |
| 172 | ); |
| 173 | }); |
| 174 | }); |