memos/web/tests/hoist-new-memo.test.ts

33 lines
1.3 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { hoistMemoToFront } from "@/hooks/useMemoSorting";
import type { Memo } from "@/types/proto/api/v1/memo_service_pb";
const memo = (name: string) => ({ name }) as Memo;
describe("hoistMemoToFront", () => {
it("moves the named memo to the front, above everything else", () => {
const list = [memo("memos/pin1"), memo("memos/pin2"), memo("memos/new")];
expect(hoistMemoToFront(list, "memos/new").map((m) => m.name)).toEqual(["memos/new", "memos/pin1", "memos/pin2"]);
});
it("returns the list unchanged when the name is null", () => {
const list = [memo("memos/a"), memo("memos/b")];
expect(hoistMemoToFront(list, null)).toBe(list);
});
it("returns the list unchanged when the name is absent", () => {
const list = [memo("memos/a"), memo("memos/b")];
expect(hoistMemoToFront(list, "memos/missing")).toBe(list);
});
it("returns the list unchanged when the memo is already first", () => {
const list = [memo("memos/a"), memo("memos/b")];
expect(hoistMemoToFront(list, "memos/a")).toBe(list);
});
it("does not mutate the input list", () => {
const list = [memo("memos/a"), memo("memos/new")];
hoistMemoToFront(list, "memos/new");
expect(list.map((m) => m.name)).toEqual(["memos/a", "memos/new"]);
});
});