feat(tickets): contrôle « Trier par… » dans la barre de facettes (#21)

Ajoute le sélecteur de tri dans TicketFacetsBar et propage le critère
via useTicketSearch jusqu'à TicketsPanel et TicketPicker, sur le contrat
de tri backend (e523f44). Couvre le tri par les tests tickets et
TicketPicker.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-07 11:54:28 +02:00
parent e523f44425
commit bd73fd79bd
6 changed files with 179 additions and 5 deletions

View File

@ -267,6 +267,48 @@ describe("TicketsView", () => {
expect(screen.getByText("Alpha")).toBeTruthy();
});
it("sorts via the « Trier par… » control: relays sort + toggles direction (#21)", async () => {
const listSpy = vi.spyOn(ticket, "list");
await ticket.create(PROJECT_ID, { title: "Alpha" });
await ticket.create(PROJECT_ID, { title: "Bravo" });
renderView(ticket, system, agent);
await screen.findByText("Alpha");
// No sort chosen ⇒ the gateway sees no `sort` (historical order preserved).
expect(listSpy.mock.calls.at(-1)?.[1]?.sort).toBeUndefined();
// Choose a field ⇒ ascending by default, relayed in the query.
fireEvent.change(screen.getByLabelText("sort tickets by"), {
target: { value: "title" },
});
await waitFor(() =>
expect(listSpy.mock.calls.at(-1)?.[1]?.sort).toEqual({
field: "title",
direction: "asc",
}),
);
// The direction toggle flips asc → desc.
fireEvent.click(
screen.getByLabelText("sort direction ascending"),
);
await waitFor(() =>
expect(listSpy.mock.calls.at(-1)?.[1]?.sort).toEqual({
field: "title",
direction: "desc",
}),
);
// Back to « Par défaut » ⇒ `sort` dropped from the query again.
fireEvent.change(screen.getByLabelText("sort tickets by"), {
target: { value: "" },
});
await waitFor(() =>
expect(listSpy.mock.calls.at(-1)?.[1]?.sort).toBeUndefined(),
);
});
it("opens the detail and edits status with a version bump", async () => {
const t = await ticket.create(PROJECT_ID, { title: "Editable" });
renderView(ticket, system, agent);