mirror of
https://github.com/freeCodeCamp/freeCodeCamp.git
synced 2026-10-24 12:13:31 +08:00
fix: skip upcoming superblocks in normal builds (#62263)
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const { isEmpty } = require('lodash');
|
||||
const { isEmpty, isUndefined } = require('lodash');
|
||||
const debug = require('debug')('fcc:build-curriculum');
|
||||
|
||||
const {
|
||||
@@ -11,7 +11,7 @@ const {
|
||||
} = require('./build-superblock');
|
||||
|
||||
const { buildCertification } = require('./build-certification');
|
||||
const { applyFilters, closestFilters } = require('./utils');
|
||||
const { applyFilters, closestFilters, getSuperOrder } = require('./utils');
|
||||
const {
|
||||
getContentDir,
|
||||
getLanguageConfig,
|
||||
@@ -330,7 +330,18 @@ async function buildCurriculum(lang, filters) {
|
||||
|
||||
const fullCurriculum = { certifications: { blocks: {} } };
|
||||
|
||||
for (const superblock of fullSuperblockList) {
|
||||
const liveSuperblocks = fullSuperblockList.filter(({ name }) => {
|
||||
const superOrder = getSuperOrder(name);
|
||||
const upcomingSuperOrder = getSuperOrder(name, true);
|
||||
|
||||
// If a superblock is not in either order list it should not exist.
|
||||
if (isUndefined(superOrder) && isUndefined(upcomingSuperOrder)) {
|
||||
throw Error(`Invalid superBlock: ${name}`);
|
||||
}
|
||||
return !isUndefined(superOrder);
|
||||
});
|
||||
|
||||
for (const superblock of liveSuperblocks) {
|
||||
fullCurriculum[superblock.name] =
|
||||
await builder.processSuperblock(superblock);
|
||||
}
|
||||
|
||||
+10
-25
@@ -2,10 +2,7 @@ const path = require('path');
|
||||
|
||||
const comparison = require('string-similarity');
|
||||
|
||||
const {
|
||||
SuperBlocks,
|
||||
generateSuperBlockList
|
||||
} = require('../shared-dist/config/curriculum');
|
||||
const { generateSuperBlockList } = require('../shared-dist/config/curriculum');
|
||||
|
||||
require('dotenv').config({ path: path.resolve(__dirname, '../.env') });
|
||||
|
||||
@@ -27,15 +24,6 @@ exports.testedLang = function testedLang() {
|
||||
};
|
||||
|
||||
function createSuperOrder(superBlocks) {
|
||||
if (!Array.isArray(superBlocks)) {
|
||||
throw Error(`superBlocks must be an Array`);
|
||||
}
|
||||
superBlocks.forEach(superBlock => {
|
||||
if (!Object.values(SuperBlocks).includes(superBlock)) {
|
||||
throw Error(`Invalid superBlock: ${superBlock}`);
|
||||
}
|
||||
});
|
||||
|
||||
const superOrder = {};
|
||||
|
||||
superBlocks.forEach((superBlock, i) => {
|
||||
@@ -45,19 +33,16 @@ function createSuperOrder(superBlocks) {
|
||||
return superOrder;
|
||||
}
|
||||
|
||||
const flatSuperBlockMap = generateSuperBlockList({
|
||||
showUpcomingChanges: process.env.SHOW_UPCOMING_CHANGES === 'true'
|
||||
});
|
||||
const superOrder = createSuperOrder(flatSuperBlockMap);
|
||||
function getSuperOrder(
|
||||
superblock,
|
||||
showUpcomingChanges = process.env.SHOW_UPCOMING_CHANGES === 'true'
|
||||
) {
|
||||
const flatSuperBlockMap = generateSuperBlockList({
|
||||
showUpcomingChanges
|
||||
});
|
||||
|
||||
// gets the superOrder of a superBlock from the object created above
|
||||
function getSuperOrder(superblock) {
|
||||
if (typeof superblock !== 'string')
|
||||
throw Error(`superblock ${JSON.stringify(superblock)} must be a string`);
|
||||
const order = superOrder[superblock];
|
||||
if (typeof order === 'undefined')
|
||||
throw Error(`${superblock} is not a valid superblock`);
|
||||
return order;
|
||||
const superOrder = createSuperOrder(flatSuperBlockMap);
|
||||
return superOrder[superblock];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+21
-42
@@ -67,62 +67,41 @@ describe('createSuperOrder', () => {
|
||||
});
|
||||
|
||||
it('throws when not given an array of SuperBlocks', () => {
|
||||
expect.assertions(4);
|
||||
expect(() => getSuperOrder()).toThrow();
|
||||
expect(() => getSuperOrder(null)).toThrow();
|
||||
expect(() => getSuperOrder('')).toThrow();
|
||||
expect(() => getSuperOrder(['respansive-wib-desoin'])).toThrow();
|
||||
expect(() => createSuperOrder()).toThrow();
|
||||
expect(() => createSuperOrder(null)).toThrow();
|
||||
expect(() => createSuperOrder('')).toThrow();
|
||||
});
|
||||
});
|
||||
|
||||
describe('getSuperOrder', () => {
|
||||
it('returns a number for valid curriculum', () => {
|
||||
expect.assertions(1);
|
||||
expect(typeof getSuperOrder('responsive-web-design')).toBe('number');
|
||||
});
|
||||
|
||||
it('throws for unknown curriculum', () => {
|
||||
expect.assertions(4);
|
||||
expect(() => getSuperOrder()).toThrow();
|
||||
expect(() => getSuperOrder(null)).toThrow();
|
||||
expect(() => getSuperOrder('')).toThrow();
|
||||
expect(() => getSuperOrder('respansive-wib-desoin')).toThrow();
|
||||
it('returns undefined for unknown curriculum', () => {
|
||||
expect(getSuperOrder()).toBeUndefined();
|
||||
expect(getSuperOrder(null)).toBeUndefined();
|
||||
expect(getSuperOrder('')).toBeUndefined();
|
||||
expect(getSuperOrder('respansive-wib-desoin')).toBeUndefined();
|
||||
expect(getSuperOrder('certifications')).toBeUndefined();
|
||||
});
|
||||
|
||||
it('throws for "certifications"', () => {
|
||||
expect.assertions(1);
|
||||
expect(() => getSuperOrder('certifications')).toThrow();
|
||||
it('returns numbers for all current curriculum', () => {
|
||||
const superBlocks = Object.values(SuperBlocks);
|
||||
|
||||
const superOrderValues = superBlocks.map(sb => getSuperOrder(sb, true));
|
||||
const definedValues = superOrderValues.filter(v => typeof v === 'number');
|
||||
|
||||
expect(definedValues.length).toBe(superBlocks.length);
|
||||
});
|
||||
|
||||
it.skip('returns unique numbers for all current curriculum', () => {
|
||||
if (process.env.SHOW_UPCOMING_CHANGES !== 'true') {
|
||||
expect.assertions(17);
|
||||
} else {
|
||||
expect.assertions(19);
|
||||
}
|
||||
it('returns unique numbers for all current curriculum', () => {
|
||||
const superBlocks = Object.values(SuperBlocks);
|
||||
|
||||
expect(getSuperOrder(SuperBlocks.RespWebDesignNew)).toBe(0);
|
||||
expect(getSuperOrder(SuperBlocks.JsAlgoDataStructNew)).toBe(1);
|
||||
expect(getSuperOrder(SuperBlocks.FrontEndDevLibs)).toBe(2);
|
||||
expect(getSuperOrder(SuperBlocks.DataVis)).toBe(3);
|
||||
expect(getSuperOrder(SuperBlocks.RelationalDb)).toBe(4);
|
||||
expect(getSuperOrder(SuperBlocks.BackEndDevApis)).toBe(5);
|
||||
expect(getSuperOrder(SuperBlocks.QualityAssurance)).toBe(6);
|
||||
expect(getSuperOrder(SuperBlocks.SciCompPy)).toBe(7);
|
||||
expect(getSuperOrder(SuperBlocks.DataAnalysisPy)).toBe(8);
|
||||
expect(getSuperOrder(SuperBlocks.InfoSec)).toBe(9);
|
||||
expect(getSuperOrder(SuperBlocks.MachineLearningPy)).toBe(10);
|
||||
expect(getSuperOrder(SuperBlocks.CollegeAlgebraPy)).toBe(11);
|
||||
expect(getSuperOrder(SuperBlocks.FoundationalCSharp)).toBe(12);
|
||||
expect(getSuperOrder(SuperBlocks.CodingInterviewPrep)).toBe(13);
|
||||
expect(getSuperOrder(SuperBlocks.ProjectEuler)).toBe(14);
|
||||
expect(getSuperOrder(SuperBlocks.RespWebDesign)).toBe(15);
|
||||
expect(getSuperOrder(SuperBlocks.JsAlgoDataStruct)).toBe(16);
|
||||
const superOrderValues = superBlocks.map(sb => getSuperOrder(sb, true));
|
||||
const uniqueValues = Array.from(new Set(superOrderValues));
|
||||
|
||||
if (process.env.SHOW_UPCOMING_CHANGES === 'true') {
|
||||
expect(getSuperOrder(SuperBlocks.TheOdinProject)).toBe(17);
|
||||
expect(getSuperOrder(SuperBlocks.FullStackDeveloper)).toBe(18);
|
||||
}
|
||||
expect(uniqueValues.length).toBe(superBlocks.length);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user