Files
kandev/apps/web/lib/tasks/tasks-list-options.test.ts
Alassane 0700911e05 feat(plugins): plugin task list facets for sort and group (#2932)
Co-authored-by: ayattara <alassane.yattara@savoirfairelinux.com>
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-08-25 06:59:14 +00:00

58 lines
1.9 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
GROUP_OPTION_LABEL_KEYS,
SORT_OPTION_LABEL_KEYS,
TASKS_LIST_GROUP_OPTIONS,
TASKS_LIST_SORT_OPTIONS,
sortTasksByFacet,
} from "./tasks-list-options";
describe("SORT_OPTION_LABEL_KEYS", () => {
it("maps every sort option to a tasks: translation key", () => {
for (const option of TASKS_LIST_SORT_OPTIONS) {
const key = SORT_OPTION_LABEL_KEYS[option.value];
expect(key).toBeDefined();
expect(key).toMatch(/^tasks:/);
}
});
it("has no stray keys beyond the configured sort options", () => {
const optionValues = new Set(TASKS_LIST_SORT_OPTIONS.map((option) => option.value));
expect(Object.keys(SORT_OPTION_LABEL_KEYS).sort()).toEqual([...optionValues].sort());
});
});
describe("sortTasksByFacet", () => {
it("sorts by the first label, keeps ties stable, and leaves untagged tasks last", () => {
const tasks = [
{ id: "one", title: "one" },
{ id: "two", title: "two" },
{ id: "three", title: "three" },
] as never[];
expect(
sortTasksByFacet(tasks, "facet:plugin:tags", {
"facet:plugin:tags:one": [{ value: "z", label: "Zulu" }],
"facet:plugin:tags:two": [
{ value: "a", label: "alpha" },
{ value: "z", label: "Zulu" },
],
}).map((task) => task.id),
).toEqual(["two", "one", "three"]);
});
});
describe("GROUP_OPTION_LABEL_KEYS", () => {
it("maps every group option to a tasks: translation key", () => {
for (const option of TASKS_LIST_GROUP_OPTIONS) {
const key = GROUP_OPTION_LABEL_KEYS[option.value];
expect(key).toBeDefined();
expect(key).toMatch(/^tasks:/);
}
});
it("has no stray keys beyond the configured group options", () => {
const optionValues = new Set(TASKS_LIST_GROUP_OPTIONS.map((option) => option.value));
expect(Object.keys(GROUP_OPTION_LABEL_KEYS).sort()).toEqual([...optionValues].sort());
});
});