/
pager-test.ts
127 lines (126 loc) · 5.47 KB
/
pager-test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import assert from "node:assert";
import {normalizeConfig} from "../src/config.js";
import {findLink as pager} from "../src/pager.js";
describe("findLink(path, options)", () => {
it("returns the previous and next links for three pages", () => {
const config = {
pages: [
{name: "a", path: "/a"},
{name: "b", path: "/b"},
{name: "c", path: "/c"}
]
};
assert.deepStrictEqual(pager("/index", config), {prev: undefined, next: {name: "a", path: "/a"}});
assert.deepStrictEqual(pager("/a", config), {prev: {name: "Home", path: "/index"}, next: {name: "b", path: "/b"}});
assert.deepStrictEqual(pager("/b", config), {prev: {name: "a", path: "/a"}, next: {name: "c", path: "/c"}});
assert.deepStrictEqual(pager("/c", config), {prev: {name: "b", path: "/b"}, next: undefined});
});
it("returns the previous and next links for three pages with sections", () => {
const config = {
pages: [
{
name: "section",
open: true,
pages: [
{name: "a", path: "/a"},
{name: "b", path: "/b"},
{name: "c", path: "/c"}
]
}
]
};
assert.deepStrictEqual(pager("/index", config), {prev: undefined, next: {name: "a", path: "/a"}});
assert.deepStrictEqual(pager("/a", config), {prev: {name: "Home", path: "/index"}, next: {name: "b", path: "/b"}});
assert.deepStrictEqual(pager("/b", config), {prev: {name: "a", path: "/a"}, next: {name: "c", path: "/c"}});
assert.deepStrictEqual(pager("/c", config), {prev: {name: "b", path: "/b"}, next: undefined});
});
it("returns the previous and next links for two pages", () => {
const config = {
pages: [
{name: "a", path: "/a"},
{name: "b", path: "/b"}
]
};
assert.deepStrictEqual(pager("/index", config), {prev: undefined, next: {name: "a", path: "/a"}});
assert.deepStrictEqual(pager("/a", config), {prev: {name: "Home", path: "/index"}, next: {name: "b", path: "/b"}});
assert.deepStrictEqual(pager("/b", config), {prev: {name: "a", path: "/a"}, next: undefined});
});
it("returns the previous and next links for one pages", () => {
const config = {pages: [{name: "a", path: "/a"}]};
assert.deepStrictEqual(pager("/index", config), {prev: undefined, next: {name: "a", path: "/a"}});
assert.deepStrictEqual(pager("/a", config), {prev: {name: "Home", path: "/index"}, next: undefined});
});
it("returns undefined for zero pages", () => {
const config = {pages: []};
assert.deepStrictEqual(pager("/index", config), undefined);
});
it("returns undefined for non-referenced pages", () => {
const config = {
pages: [
{name: "a", path: "/a"},
{name: "b", path: "/b"},
{name: "c", path: "/c"}
]
};
assert.deepStrictEqual(pager("/d", config), undefined);
});
it("avoids cycles when a path is listed multiple times", () => {
const config = {
pages: [
{name: "a", path: "/a"},
{name: "b", path: "/b"},
{name: "a", path: "/a"},
{name: "c", path: "/c"}
]
};
assert.deepStrictEqual(pager("/index", config), {prev: undefined, next: {name: "a", path: "/a"}});
assert.deepStrictEqual(pager("/a", config), {prev: {name: "Home", path: "/index"}, next: {name: "b", path: "/b"}});
assert.deepStrictEqual(pager("/b", config), {prev: {name: "a", path: "/a"}, next: {name: "c", path: "/c"}});
assert.deepStrictEqual(pager("/c", config), {prev: {name: "b", path: "/b"}, next: undefined});
});
it("implicitly includes the index page if there is a title", () => {
const config = {
title: "Test",
pages: [
{name: "a", path: "/a"},
{name: "b", path: "/b"},
{name: "c", path: "/c"}
]
};
assert.deepStrictEqual(pager("/index", config), {prev: undefined, next: {name: "a", path: "/a"}});
assert.deepStrictEqual(pager("/a", config), {prev: {name: "Test", path: "/index"}, next: {name: "b", path: "/b"}});
assert.deepStrictEqual(pager("/b", config), {prev: {name: "a", path: "/a"}, next: {name: "c", path: "/c"}});
assert.deepStrictEqual(pager("/c", config), {prev: {name: "b", path: "/b"}, next: undefined});
});
it("normalizes / to /index", async () => {
const config = await normalizeConfig({pages: [{name: "Home", path: "/"}]});
assert.strictEqual(pager("/index", config), undefined);
assert.strictEqual(pager("/", config), undefined);
});
it("normalizes / to /index (2)", async () => {
const config = await normalizeConfig({
pages: [
{name: "Home", path: "/"},
{name: "Second Home", path: "/second"}
]
});
assert.deepStrictEqual(pager("/second", config), {next: undefined, prev: {name: "Home", path: "/index"}});
assert.deepStrictEqual(pager("/index", config), {next: {name: "Second Home", path: "/second"}, prev: undefined});
assert.strictEqual(pager("/", config), undefined);
});
it("normalizes / to /index (3)", async () => {
const config = await normalizeConfig({
pages: [
{name: "Home", path: "/"},
{name: "Second Home", path: "/second"},
{name: "By The Sea", path: "/by-the-sea"}
]
});
assert.deepStrictEqual(pager("/second", config), {
next: {name: "By The Sea", path: "/by-the-sea"},
prev: {name: "Home", path: "/index"}
});
assert.deepStrictEqual(pager("/index", config), {next: {name: "Second Home", path: "/second"}, prev: undefined});
assert.strictEqual(pager("/", config), undefined);
});
});