MAESTRO: improve keyboard access for test selector

This commit is contained in:
Mariusz Banach
2026-02-18 01:32:17 +01:00
parent 997056ad4f
commit 561fed5860
4 changed files with 89 additions and 2 deletions

View File

@@ -178,4 +178,42 @@ describe("AnalysisControls", () => {
expect.objectContaining({ resolve: true, decodeAll: true }),
);
});
it("updates toggles on Space key presses", async () => {
setupFetchMock(sampleTests);
const handleChange = vi.fn();
const AnalysisControlsHarness = () => {
const [config, setConfig] = useState<AnalysisConfig>({
testIds: [],
resolve: false,
decodeAll: false,
});
const updateConfig = (next: AnalysisConfig) => {
setConfig(next);
handleChange(next);
};
return <AnalysisControls config={config} onChange={updateConfig} />;
};
const { container } = render(<AnalysisControlsHarness />);
await act(async () => {
await flushPromises();
});
const resolveToggle = getToggle(container, "toggle-resolve");
act(() => {
resolveToggle.dispatchEvent(
new KeyboardEvent("keydown", { key: " ", bubbles: true }),
);
});
expect(resolveToggle.getAttribute("aria-checked")).toBe("true");
expect(handleChange).toHaveBeenLastCalledWith(
expect.objectContaining({ resolve: true }),
);
});
});

View File

@@ -164,6 +164,43 @@ describe("TestSelector", () => {
});
});
it("supports keyboard activation for select and deselect", async () => {
setupFetchMock(sampleTests);
const TestSelectorHarness = () => {
const [selected, setSelected] = useState<number[]>([]);
return <TestSelector selectedTestIds={selected} onSelectionChange={setSelected} />;
};
const { container } = render(<TestSelectorHarness />);
await act(async () => {
await flushPromises();
});
const selectAllButton = getSelectAllButton(container);
act(() => {
selectAllButton.dispatchEvent(
new KeyboardEvent("keydown", { key: "Enter", bubbles: true }),
);
});
sampleTests.forEach((test) => {
expect(getCheckbox(container, test.id).checked).toBe(true);
});
const deselectAllButton = getDeselectAllButton(container);
act(() => {
deselectAllButton.dispatchEvent(
new KeyboardEvent("keydown", { key: " ", bubbles: true }),
);
});
sampleTests.forEach((test) => {
expect(getCheckbox(container, test.id).checked).toBe(false);
});
});
it("filters tests by search text", async () => {
setupFetchMock(sampleTests);