Skip to content

Commit 1d88a91

Browse files
authored
Merge pull request #1246 from fturmel/PR/improve-content-tests
Improved content tests
2 parents 9ed622c + d569667 commit 1d88a91

File tree

49 files changed

+918
-1349
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+918
-1349
lines changed

content-testing/content-structure.js

Lines changed: 9 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,3 @@
1-
const {
2-
video: videoFormat,
3-
track: trackFormat,
4-
trackOrder: trackOrderFormat,
5-
contribution: contributionFormat,
6-
faqPage: faqPageFormat,
7-
faq: faqFormat
8-
} = require('./file-formats.js');
9-
10-
const {
11-
video: videoSlugReferences,
12-
track: trackSlugReference,
13-
trackOrder: trackOrderSlugReference,
14-
faqsOrder: faqsOrderSlugReference
15-
} = require('./slug-references.js');
16-
171
const contentStructure = {
182
folders: {
193
videos: {
@@ -24,7 +8,7 @@ const contentStructure = {
248
folders: {
259
showcase: {
2610
files: {
27-
'': { isRequired: false, jsonFormat: contributionFormat }
11+
'': { isRequired: false }
2812
},
2913
folder: {},
3014
isRequired: false,
@@ -41,9 +25,7 @@ const contentStructure = {
4125
},
4226
files: {
4327
'index.json': {
44-
isRequired: true,
45-
jsonFormat: videoFormat,
46-
slugReferences: videoSlugReferences
28+
isRequired: true
4729
},
4830
'index.jpg': { isRequired: false },
4931
'index.png': { isRequired: false }
@@ -72,7 +54,7 @@ const contentStructure = {
7254
folders: {
7355
showcase: {
7456
files: {
75-
'': { isRequired: false, jsonFormat: contributionFormat }
57+
'': { isRequired: false }
7658
},
7759
folder: {},
7860
isRequired: false,
@@ -89,9 +71,7 @@ const contentStructure = {
8971
},
9072
files: {
9173
'index.json': {
92-
isRequired: true,
93-
jsonFormat: videoFormat,
94-
slugReferences: videoSlugReferences
74+
isRequired: true
9575
},
9676
'index.jpg': { isRequired: false },
9777
'index.png': { isRequired: false }
@@ -124,9 +104,7 @@ const contentStructure = {
124104
folders: {},
125105
files: {
126106
'index.json': {
127-
isRequired: true,
128-
jsonFormat: trackFormat,
129-
slugReferences: trackSlugReference
107+
isRequired: true
130108
},
131109
'index.jpg': { isRequired: false },
132110
'index.png': { isRequired: false }
@@ -156,9 +134,7 @@ const contentStructure = {
156134
folders: {},
157135
files: {
158136
'index.json': {
159-
isRequired: true,
160-
jsonFormat: trackFormat,
161-
slugReferences: trackSlugReference
137+
isRequired: true
162138
},
163139
'index.jpg': { isRequired: false },
164140
'index.png': { isRequired: false }
@@ -185,9 +161,7 @@ const contentStructure = {
185161
},
186162
files: {
187163
'index.json': {
188-
isRequired: false,
189-
jsonFormat: trackOrderFormat,
190-
slugReferences: trackOrderSlugReference
164+
isRequired: false
191165
}
192166
},
193167
isFileSensitive: true,
@@ -199,13 +173,10 @@ const contentStructure = {
199173
faqs: {
200174
files: {
201175
'index.json': {
202-
isRequired: true,
203-
jsonFormat: faqPageFormat,
204-
slugReferences: faqsOrderSlugReference
176+
isRequired: true
205177
},
206178
'': {
207-
isRequired: false,
208-
jsonFormat: { ...faqFormat, exceptions: 'index.json' }
179+
isRequired: false
209180
}
210181
},
211182
folder: {},

content-testing/content.js

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
const { globSync } = require('glob');
2+
const { readFileSync } = require('node:fs');
3+
const path = require('node:path');
4+
5+
/**
6+
* Paths to content files
7+
* @type {Object.<string, string[]>}
8+
*/
9+
const paths = {
10+
// collections
11+
guides: globSync('content/pages/guides/*.md'),
12+
tracks: globSync('content/tracks/*/*/index.json'),
13+
showcases: globSync('content/videos/**/showcase/*.json'),
14+
faqs: globSync('content/pages/faqs/*.json', {
15+
ignore: '**/index.json'
16+
}),
17+
videosAndChallenges: globSync('content/videos/**/index.json'),
18+
videos: globSync('content/videos/**/index.json', {
19+
ignore: 'content/videos/challenges/**'
20+
}),
21+
challenges: globSync('content/videos/challenges/*/index.json'),
22+
23+
// single pages
24+
pageGuides: ['content/pages/guides/index.json'],
25+
pageHome: ['content/pages/homepage/index.json'],
26+
pageFaqs: ['content/pages/faqs/index.json'],
27+
pageAbout: ['content/pages/about/index.json'],
28+
tracksIndex: ['content/tracks/index.json']
29+
};
30+
31+
/**
32+
* Path to slug conversion functions
33+
* @type {Object.<string, function(string): string>}
34+
*/
35+
const toSlug = {
36+
guides: (p) => path.parse(p).name,
37+
tracks: (p) => p.split('/').at(-2),
38+
showcases: (p) => p.split('/').slice(2).join('/'),
39+
faqs: (p) => path.parse(p).name,
40+
videosAndChallenges: (p) => p.split('/').slice(2, -1).join('/'),
41+
challenges: (p) => p.split('/').at(-2)
42+
};
43+
44+
/**
45+
* Slug sets
46+
* @type {Object.<string, Set<string>>}
47+
*/
48+
const slugs = {
49+
guides: new Set(
50+
paths.guides
51+
// only keep markdown files with frontmatter, the other ones are internal documentation
52+
.filter((p) => readFileSync(p).toString('utf-8').startsWith('---\n'))
53+
.map(toSlug.guides)
54+
),
55+
tracks: (() => {
56+
const slugs = new Set();
57+
for (const p of paths.tracks) {
58+
const slug = toSlug.tracks(p);
59+
if (slugs.has(slug)) {
60+
throw new Error(
61+
`A main and side track share the slug "${slug}". Rename one of their content directories to resolve the conflict.`
62+
);
63+
}
64+
slugs.add(slug);
65+
}
66+
return slugs;
67+
})(),
68+
showcases: new Set(paths.showcases.map(toSlug.showcases)),
69+
faqs: new Set(paths.faqs.map(toSlug.faqs)),
70+
challenges: new Set(paths.challenges.map(toSlug.challenges)),
71+
videosAndChallenges: new Set(
72+
paths.videosAndChallenges.map(toSlug.videosAndChallenges)
73+
)
74+
};
75+
76+
module.exports = {
77+
paths,
78+
toSlug,
79+
slugs
80+
};

content-testing/errors.js

Lines changed: 0 additions & 43 deletions
This file was deleted.

0 commit comments

Comments
 (0)