fix(web): тесты смены метки и сброса, hideDone без флажка (#112)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
3ba8f06637
commit
e79b073180
@ -79,4 +79,38 @@ describe("AgileToolbar", () => {
|
|||||||
render(<Harness page="sprint" />);
|
render(<Harness page="sprint" />);
|
||||||
expect(assignee().value).toBe("");
|
expect(assignee().value).toBe("");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("смена метки и страницы без размонтирования: q сброшен, чужие значения не протекают, прежние данные целы", () => {
|
||||||
|
const r = render(<Harness />);
|
||||||
|
fireEvent.change(assignee(), { target: { value: "ivanov" } });
|
||||||
|
fireEvent.click(screen.getByLabelText("Скрыть выполненные"));
|
||||||
|
fireEvent.change(search(), { target: { value: "abc" } });
|
||||||
|
const before = localStorage.getItem(AGILE_KEY);
|
||||||
|
r.rerender(<Harness label="STOCKS" />);
|
||||||
|
expect(search().value).toBe("");
|
||||||
|
expect(assignee().value).toBe("");
|
||||||
|
expect((screen.getByLabelText("Скрыть выполненные") as HTMLInputElement).checked).toBe(false);
|
||||||
|
expect(localStorage.getItem(AGILE_KEY)).toBe(before);
|
||||||
|
r.rerender(<Harness label="STOCKS" page="kanban" />);
|
||||||
|
expect(assignee().value).toBe("");
|
||||||
|
expect(localStorage.getItem(AGILE_KEY)).toBe(before);
|
||||||
|
r.rerender(<Harness />);
|
||||||
|
expect(assignee().value).toBe("ivanov");
|
||||||
|
expect(search().value).toBe("");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("сброс сохраняет collapsed, hiddenColumns и epicsPanel", () => {
|
||||||
|
localStorage.setItem(AGILE_KEY, JSON.stringify({ AWPCA: { backlog: {
|
||||||
|
assignee: "ivanov", epic: "E-1", hideDone: true, collapsed: ["E-1"], hiddenColumns: ["Done"], epicsPanel: false } } }));
|
||||||
|
render(<Harness />);
|
||||||
|
fireEvent.click(screen.getByText("Сбросить фильтры"));
|
||||||
|
expect(stored().AWPCA.backlog).toEqual({
|
||||||
|
assignee: "", epic: "", hideDone: false, collapsed: ["E-1"], hiddenColumns: ["Done"], epicsPanel: false });
|
||||||
|
});
|
||||||
|
|
||||||
|
it("showHideDone=false: сохранённый hideDone не показывает «Сбросить фильтры»", () => {
|
||||||
|
localStorage.setItem(AGILE_KEY, JSON.stringify({ AWPCA: { backlog: { hideDone: true } } }));
|
||||||
|
render(<Harness showHideDone={false} />);
|
||||||
|
expect(screen.queryByText("Сбросить фильтры")).toBeNull();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -19,7 +19,7 @@ export function AgileToolbar({ filter, setQ, set, onReset, assignees, showHideDo
|
|||||||
<Checkbox label="Скрыть выполненные" checked={filter.hideDone} onChange={(e) => set({ hideDone: e.target.checked })} />
|
<Checkbox label="Скрыть выполненные" checked={filter.hideDone} onChange={(e) => set({ hideDone: e.target.checked })} />
|
||||||
)}
|
)}
|
||||||
{children}
|
{children}
|
||||||
{hasFilters(filter) && <Button variant="ghost" onClick={onReset}>Сбросить фильтры</Button>}
|
{hasFilters({ ...filter, hideDone: filter.hideDone && showHideDone }) && <Button variant="ghost" onClick={onReset}>Сбросить фильтры</Button>}
|
||||||
</Panel>
|
</Panel>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,6 +13,7 @@ export function useAgileView(label: string, page: AgilePage) {
|
|||||||
setState(cur);
|
setState(cur);
|
||||||
}
|
}
|
||||||
const ref = useRef(cur);
|
const ref = useRef(cur);
|
||||||
|
// ref обновляется при рендере: set/reset в одном событии должны видеть актуальный вид, а не замыкание прошлого рендера
|
||||||
ref.current = cur;
|
ref.current = cur;
|
||||||
|
|
||||||
const commit = useCallback((next: typeof state) => {
|
const commit = useCallback((next: typeof state) => {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user