lib/board-columns.test.ts
Rama main · réplica de lectura del repositorio original.
import { describe, expect, it } from "vitest";
import { buildBoardColumns, createBoardColumnsBuilder } from "./board-columns";
import type { StatusMeta } from "./issue-constants";
import type { Issue } from "./types";
const statuses = [
{ value: "todo" },
{ value: "in_progress" },
] as StatusMeta[];
function issue(id: string, status: Issue["status"], position: number) {
return { id, status, position } as Issue;
}
describe("buildBoardColumns", () => {
it("groups in status order and sorts each populated column", () => {
const columns = buildBoardColumns(
statuses,
[
issue("doing", "in_progress", 5),
issue("later", "todo", 20),
issue("first", "todo", 10),
],
(_columnIssues) => (a, b) => a.position - b.position
);
expect(columns.map((column) => column.status.value)).toEqual([
"todo",
"in_progress",
]);
expect(columns.map((column) => column.items.map((item) => item.id))).toEqual([
["first", "later"],
["doing"],
]);
});
it("does not mutate the source issue order", () => {
const issues = [issue("later", "todo", 20), issue("first", "todo", 10)];
buildBoardColumns(statuses, issues, (_columnIssues) => (a, b) => a.position - b.position);
expect(issues.map((item) => item.id)).toEqual(["later", "first"]);
});
it("reuses an unaffected column across issue updates", () => {
const build = createBoardColumnsBuilder();
const todo = issue("todo", "todo", 10);
const doing = issue("doing", "in_progress", 10);
const first = build(statuses, [todo, doing], (_columnIssues) => (a, b) => a.position - b.position);
const second = build(
statuses,
[{ ...todo, title: "Updated" }, doing],
(_columnIssues) => (a, b) => a.position - b.position
);
expect(second[0]).not.toBe(first[0]);
expect(second[1]).toBe(first[1]);
});
});