25 lines
1.2 KiB
TypeScript
25 lines
1.2 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
||
import type { WikiChange } from "../api/queries.ts";
|
||
import { authorName, deltaText, groupByPage } from "./group.ts";
|
||
|
||
const c = (page_code: string, version: string): WikiChange => ({
|
||
at: "2026-10-28T09:00:00+00:00", page_code, title: page_code, path: null, version,
|
||
author: { login: null, name: null }, added: 1, removed: 0,
|
||
});
|
||
|
||
describe("группировка правок вики", () => {
|
||
it("по странице, по первому появлению; правки — в порядке ответа", () => {
|
||
const g = groupByPage([c("DOC-3", "V3"), c("DOC-2", "V2"), c("DOC-3", "V1")]);
|
||
expect(g.map((x) => x.code)).toEqual(["DOC-3", "DOC-2"]);
|
||
expect(g[0].changes.map((x) => x.version)).toEqual(["V3", "V1"]);
|
||
});
|
||
it("deltaText: плюс, косая черта, минус U+2212", () => {
|
||
expect(deltaText({ added: 40, removed: 12 })).toBe("+40 / −12");
|
||
});
|
||
it("authorName: имя, иначе логин, иначе «—»", () => {
|
||
expect(authorName({ login: "x", name: null })).toBe("x");
|
||
expect(authorName({ login: "x", name: "Икс" })).toBe("Икс");
|
||
expect(authorName({ login: null, name: null })).toBe("—");
|
||
});
|
||
});
|