-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathextension.test.js
More file actions
101 lines (95 loc) · 2.98 KB
/
Copy pathextension.test.js
File metadata and controls
101 lines (95 loc) · 2.98 KB
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
const assert = require('node:assert/strict');
const test = require('node:test');
const { buildDirectoryHierarchy, buildRouteHierarchy, normalizedRoute, routeSegments } = require('./routeHierarchy');
test('buildRouteHierarchy groups pages by declared route segments', () => {
const tree = buildRouteHierarchy([
{ id: 'admin.users.detail', route: '/admin/users/{id}' },
{ id: 'home', route: '/' },
{ id: 'admin.index', route: '/admin' },
{ id: 'admin.users', route: '/admin/users' }
]);
assert.deepEqual(summarize(tree), [
{ type: 'page', label: 'home', route: '/' },
{
type: 'group',
label: 'admin',
path: '/admin',
children: [
{ type: 'page', label: 'admin.index', route: '/admin' },
{
type: 'group',
label: 'users',
path: '/admin/users',
children: [
{ type: 'page', label: 'admin.users', route: '/admin/users' },
{
type: 'group',
label: '{id}',
path: '/admin/users/{id}',
children: [
{ type: 'page', label: 'admin.users.detail', route: '/admin/users/{id}' }
]
}
]
}
]
}
]);
});
test('normalizedRoute keeps route hierarchy independent of file paths', () => {
assert.equal(normalizedRoute('admin/settings'), '/admin/settings');
assert.equal(normalizedRoute(''), '/');
assert.deepEqual(routeSegments('/admin/users/'), ['admin', 'users']);
});
test('buildDirectoryHierarchy groups pages by source directories', () => {
const tree = buildDirectoryHierarchy([
{ id: 'home', route: '/', source: '/workspace/home.page.gwdk' },
{ id: 'admin.users', route: '/admin/users', source: '/workspace/pages/admin/users.page.gwdk' },
{ id: 'admin.index', route: '/admin', source: '/workspace/pages/admin/index.page.gwdk' },
{ id: 'blog.post', route: '/blog/{slug}', source: '/workspace/pages/blog/post.page.gwdk' }
], '/workspace');
assert.deepEqual(summarize(tree), [
{
type: 'directory',
label: 'pages',
path: 'pages',
children: [
{
type: 'directory',
label: 'admin',
path: 'pages/admin',
children: [
{ type: 'page', label: 'admin.index', route: '/admin' },
{ type: 'page', label: 'admin.users', route: '/admin/users' }
]
},
{
type: 'directory',
label: 'blog',
path: 'pages/blog',
children: [
{ type: 'page', label: 'blog.post', route: '/blog/{slug}' }
]
}
]
},
{ type: 'page', label: 'home', route: '/' }
]);
});
function summarize(nodes) {
return nodes.map((node) => {
if (node.type === 'page') {
return {
type: 'page',
label: node.label,
route: node.page.route
};
}
return {
type: node.type,
label: node.label,
path: node.path,
children: summarize(node.children)
};
});
}