computer-scienceangular-roadmapbackend-roadmapblockchain-roadmapdba-roadmapdeveloper-roadmapdevops-roadmapfrontend-roadmapgo-roadmaphactoberfestjava-roadmapjavascript-roadmapnodejs-roadmappython-roadmapqa-roadmapreact-roadmaproadmapstudy-planvue-roadmapweb3-roadmap
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.4 KiB
85 lines
2.4 KiB
5 years ago
|
const path = require('path');
|
||
|
const fs = require('fs');
|
||
|
const guides = require('../data/guides');
|
||
|
const roadmaps = require('../data/roadmaps');
|
||
|
|
||
|
const {
|
||
|
getPageRoutes,
|
||
|
getGuideRoutes,
|
||
|
getRoadmapRoutes
|
||
|
} = require("../path-map");
|
||
|
|
||
|
describe("Build scripts tests", () => {
|
||
|
test('it should generate valid pathmap for pages', () => {
|
||
|
const pageRoutes = getPageRoutes();
|
||
|
|
||
|
expect(pageRoutes).toEqual({
|
||
|
'/': { page: '/index' },
|
||
|
'/about': { page: '/about' },
|
||
|
'/privacy': { page: '/privacy' },
|
||
|
'/terms': { page: '/terms' },
|
||
|
'/guides': { page: '/guides/index' },
|
||
|
'/roadmaps': { page: '/roadmaps' },
|
||
|
});
|
||
|
});
|
||
|
|
||
|
test('it should generate valid guides pathmap', () => {
|
||
|
const expectedGuideRoutes = guides.reduce((acc, guide) => {
|
||
|
const [,, slug] = guide.url.split('/');
|
||
|
return {
|
||
|
...acc,
|
||
|
[guide.url]: {
|
||
|
page: '/guides/[guide]',
|
||
|
query: slug,
|
||
|
}
|
||
|
};
|
||
|
}, {});
|
||
|
|
||
|
// Valid path map is generated
|
||
|
expect(expectedGuideRoutes).toEqual(getGuideRoutes());
|
||
|
|
||
|
const pageFilePath = path.join(__dirname, '../pages/guides/[guide].js');
|
||
|
const foundFilePath = fs.existsSync(pageFilePath) ? pageFilePath : '';
|
||
|
|
||
|
// Given page component exists
|
||
|
expect(foundFilePath).toEqual(pageFilePath);
|
||
|
});
|
||
|
|
||
|
test('it should have markdown file for each guide', () => {
|
||
|
guides.forEach(guide => {
|
||
|
const [,, slug] = guide.url.split('/');
|
||
|
|
||
|
const expectedFile = path.join(__dirname, `../data/guides/${slug}.md`);
|
||
|
const foundFile = fs.existsSync(expectedFile) ? expectedFile : '';
|
||
|
|
||
|
expect(foundFile).toEqual(expectedFile);
|
||
|
})
|
||
|
});
|
||
|
|
||
|
test('it should generate valid roadmap routes', () => {
|
||
|
const expectedPathMap = roadmaps.reduce((roadmapAcc, roadmap) => {
|
||
|
// Routes for each of the versions of this roadmap
|
||
|
const versionRoutes = roadmap.versions.reduce((versionAcc, version) => ({
|
||
|
...versionAcc,
|
||
|
[`${roadmap.url}/${version}`]: {
|
||
|
page: '/[roadmap]/[version]',
|
||
|
query: `${roadmap.url.split('/')[1]}/${version}`,
|
||
|
}
|
||
|
}), {});
|
||
|
|
||
|
// Route for the route roadmap itself
|
||
|
return {
|
||
|
...roadmapAcc,
|
||
|
[roadmap.url]: {
|
||
|
page: '/[roadmap]/index',
|
||
|
query: roadmap.url.split('/')[1]
|
||
|
},
|
||
|
// Expected roadmap for versions
|
||
|
...versionRoutes
|
||
|
};
|
||
|
}, {});
|
||
|
|
||
|
expect(getRoadmapRoutes()).toEqual(expectedPathMap);
|
||
|
})
|
||
|
});
|