fix(path-map): Refactor pathMigrationMap for new curriculum package

This commit is contained in:
Bouncey
2018-10-07 08:52:41 +01:00
committed by mrugesh mohapatra
parent bc9b3b4ddd
commit d52ba8c6fd
3 changed files with 143 additions and 0 deletions

View File

@ -0,0 +1,86 @@
{
"super-block-a": {
"blocks": {
"block-one": {
"meta": {},
"challenges": [
{
"title": "Challenge One",
"block": "Block One",
"superBlock": "super-block-a"
},
{
"title": "Challenge Two",
"block": "Block One",
"superBlock": "super-block-a"
},
{
"title": "Challenge Three",
"block": "Block One",
"superBlock": "super-block-a"
},
{
"title": "Challenge Four",
"block": "Block One",
"superBlock": "super-block-a"
}
]
},
"block-two": {
"meta": {},
"challenges": [
{
"title": "Challenge Five",
"block": "Block Two",
"superBlock": "super-block-a"
},
{
"title": "Challenge Six",
"block": "Block Two",
"superBlock": "super-block-a"
},
{
"title": "Challenge Seven",
"block": "Block Two",
"superBlock": "super-block-a"
},
{
"title": "Challenge Eight",
"block": "Block Two",
"superBlock": "super-block-a"
}
]
}
}
},
"super-block-b": {
"blocks": {
"block-one": {
"meta": {},
"challenges": [
{
"title": "Challenge Nine",
"block": "Block One",
"superBlock": "super-block-b",
"isPrivate": true
},
{
"title": "Challenge Ten",
"block": "Block One",
"superBlock": "super-block-b"
},
{
"title": "Challenge Eleven",
"block": "Block One",
"superBlock": "super-block-b"
},
{
"title": "Challenge Twelve",
"block": "Block One",
"superBlock": "super-block-b"
}
]
}
}
}
}

View File

@ -0,0 +1,25 @@
const { flatten } = require('lodash');
const { dasherize } = require('../../../api-server/server/utils');
function createPathMigrationMap(curriculum) {
return Object.keys(curriculum)
.map(key => curriculum[key].blocks)
.reduce((challenges, current) => {
const superChallenges = Object.keys(current).map(
key => current[key].challenges
);
return challenges.concat(flatten(superChallenges));
}, [])
.filter(({ isPrivate }) => !isPrivate)
.reduce((map, challenge) => {
const { title, block, superBlock } = challenge;
const dashedTitle = dasherize(title);
map[dashedTitle] = `/learn/${dasherize(superBlock)}/${dasherize(
block
)}/${dashedTitle}`;
return map;
}, {});
}
exports.createPathMigrationMap = createPathMigrationMap;

View File

@ -0,0 +1,32 @@
/* global describe expect */
const { isPlainObject } = require('lodash');
const { createPathMigrationMap } = require('./createPathMigrationMap');
const mockCurriculum = require('./__mocks__/curriculum.json');
describe('createPathMigrationMap', () => {
const pathMap = createPathMigrationMap(mockCurriculum);
it('is a function', () => {
expect(typeof createPathMigrationMap).toEqual('function');
});
it('returns an object', () => {
expect(isPlainObject(pathMap)).toBe(true);
});
it('maps a challenge title to the correct uri slug', () => {
expect.assertions(3);
const slugOne = '/learn/super-block-b/block-one/challenge-ten';
const slugTwo = '/learn/super-block-a/block-two/challenge-five';
const slugThree = '/learn/super-block-a/block-one/challenge-three';
expect(pathMap['challenge-ten']).toEqual(slugOne);
expect(pathMap['challenge-five']).toEqual(slugTwo);
expect(pathMap['challenge-three']).toEqual(slugThree);
});
it('does not add uri migrations for private challenges', () => {
expect(pathMap['challenge-nine']).toBeUndefined();
});
});