1 const {test} = require('node:test')
2 const assert = require('node:assert/strict')
3 const fm = require('front-matter')
4
5 // Stub `cli/lib/gh.js` in require.cache before requiring transform — gh.js
6 // otherwise tries to read process.env.GITHUB_TOKEN / shell out to `gh auth
7 // token` at load time.
8 const ghPath = require.resolve('../lib/gh')
9 require.cache[ghPath] = {
10 id: ghPath,
11 filename: ghPath,
12 exports: {nwo: 'npm/cli'},
13 loaded: true,
14 children: [],
15 paths: [],
16 }
17
18 const Transform = require('../lib/transform')
19
20 const transform = ({id, path}) => {
21 const transformed = Transform.sync('---\n---\n', {
22 release: {
23 id: id,
24 default: id === 'v8',
25 src: 'docs/content',
26 url: `/cli/${id}/${path}`,
27 urlPrefixes: ['/cli'],
28 },
29 path,
30 })
31 return fm(transformed).attributes
32 }
33
34 test('v6 default page', () => {
35 const v6 = transform({id: 'v6', path: 'configuring-npm/package-locks'})
36 const v7 = transform({id: 'v7', path: 'configuring-npm/package-locks'})
37
38 assert.deepEqual(v6.redirect_from, [
39 '/cli/configuring-npm/package-locks',
40 '/cli/files/package-locks',
41 '/cli/v6/configuring-npm/package-locks',
42 '/cli/v6/files/package-locks',
43 '/configuring-npm/package-locks',
44 '/files/package-locks',
45 ])
46 assert.deepEqual(v7.redirect_from, ['/cli/v7/configuring-npm/package-locks', '/cli/v7/files/package-locks'])
47 })
48
49 test('command', () => {
50 const v7 = transform({id: 'v7', path: 'commands/npm-bin'})
51 const v8 = transform({id: 'v8', path: 'commands/npm-bin'})
52
53 assert.deepEqual(v7.redirect_from, [
54 '/cli/v7/bin',
55 '/cli/v7/cli-commands/bin',
56 '/cli/v7/cli-commands/npm-bin',
57 '/cli/v7/commands/bin',
58 '/cli/v7/commands/npm-bin',
59 '/cli/v7/npm-bin',
60 ])
61 assert.deepEqual(v8.redirect_from, [
62 '/cli-commands/bin',
63 '/cli-commands/npm-bin',
64 '/cli/bin',
65 '/cli/cli-commands/bin',
66 '/cli/cli-commands/npm-bin',
67 '/cli/commands/bin',
68 '/cli/commands/npm-bin',
69 '/cli/npm-bin',
70 '/cli/v8/bin',
71 '/cli/v8/cli-commands/bin',
72 '/cli/v8/cli-commands/npm-bin',
73 '/cli/v8/commands/bin',
74 '/cli/v8/commands/npm-bin',
75 '/cli/v8/npm-bin',
76 '/commands/bin',
77 '/commands/npm-bin',
78 ])
79 })
80
81 test('package-json files', () => {
82 const v7 = transform({id: 'v7', path: 'configuring-npm/package-json'})
83 const v8 = transform({id: 'v8', path: 'configuring-npm/package-json'})
84
85 assert.deepEqual(v7.redirect_from, [
86 '/cli/v7/configuring-npm/package-json',
87 '/cli/v7/configuring-npm/package.json',
88 '/cli/v7/files/package-json',
89 '/cli/v7/files/package.json',
90 ])
91 assert.deepEqual(v8.redirect_from, [
92 '/cli/configuring-npm/package-json',
93 '/cli/configuring-npm/package.json',
94 '/cli/files/package-json',
95 '/cli/files/package.json',
96 '/cli/v8/configuring-npm/package-json',
97 '/cli/v8/configuring-npm/package.json',
98 '/cli/v8/files/package-json',
99 '/cli/v8/files/package.json',
100 '/configuring-npm/package-json',
101 '/configuring-npm/package.json',
102 '/files/package-json',
103 '/files/package.json',
104 ])
105 })
106
107 test('registry signatures', () => {
108 assert.deepEqual(
109 transform({
110 id: 'v8',
111 path: 'about-pgp-signatures-for-packages-in-the-public-registry',
112 }).redirect_from,
113 [
114 '/about-registry-signatures',
115 '/cli/about-pgp-signatures-for-packages-in-the-public-registry',
116 '/cli/v8/about-pgp-signatures-for-packages-in-the-public-registry',
117 ],
118 )
119 assert.deepEqual(
120 transform({
121 id: 'v8',
122 path: 'verifying-the-pgp-signature-for-a-package-from-the-npm-public-registry',
123 }).redirect_from,
124 [
125 '/cli/v8/verifying-the-pgp-signature-for-a-package-from-the-npm-public-registry',
126 '/cli/verifying-the-pgp-signature-for-a-package-from-the-npm-public-registry',
127 '/verifying-registry-signatures',
128 ],
129 )
130 })