Files
kandev/apps/web/components/gitlab/my-gitlab/presets-sidebar.test.tsx
T
João Salavisa 5ee5161166 feat(ui): confirm saved view deletion (#3461)
Co-authored-by: Kandev Agent <agent@kandev.dev>
2026-09-07 16:14:58 +01:00

55 lines
1.9 KiB
TypeScript

import { cleanup, fireEvent, render, screen, waitFor, within } from "@testing-library/react";
import { afterEach, describe, expect, it, vi } from "vitest";
import type { SavedPreset } from "./use-saved-presets";
import { PresetsSidebar } from "./presets-sidebar";
const SAVED: SavedPreset = {
id: "saved-mr",
kind: "mr",
label: "Ready MRs",
customQuery: "state=opened",
projectFilter: "kdlbs/kandev",
milestone: "",
preset: "",
createdAt: "2026-09-07T00:00:00Z",
};
describe("GitLab PresetsSidebar", () => {
afterEach(cleanup);
it("uses visible touch controls and deletes without selecting only after confirmation", async () => {
const onDeleteSaved = vi.fn();
const onSelect = vi.fn();
render(
<PresetsSidebar
selected={{ kind: "mr", source: "saved", id: SAVED.id }}
onSelect={onSelect}
savedPresets={[SAVED]}
onDeleteSaved={onDeleteSaved}
canSaveCurrent={false}
onSaveCurrent={vi.fn()}
mrPresets={[]}
issuePresets={[]}
/>,
);
const deleteButton = screen.getByRole("button", { name: "Delete Ready MRs saved query" });
expect(deleteButton.className).toContain("h-12");
expect(deleteButton.className).not.toContain("opacity-0");
fireEvent.click(deleteButton);
expect(onDeleteSaved).not.toHaveBeenCalled();
expect(onSelect).not.toHaveBeenCalled();
const confirmation = screen.getByRole("group", { name: "Delete Ready MRs?" });
fireEvent.click(within(confirmation).getByRole("button", { name: "Cancel" }));
fireEvent.click(screen.getByRole("button", { name: "Delete Ready MRs saved query" }));
fireEvent.click(screen.getByRole("button", { name: "Delete Ready MRs" }));
await waitFor(() => expect(onDeleteSaved).toHaveBeenCalledWith(SAVED.id));
expect(onDeleteSaved).toHaveBeenCalledOnce();
expect(onSelect).not.toHaveBeenCalled();
});
});