chore(curriculum): fix + test curriculum order (#44366)

* chore(tools): test curriculum order

* chore: update orders

* fix(tests): temporarily ignore cert super

The Relational Databases cert being 'upcomingChanges' is breaking
the tests.

* fix: graphql query here

* fix: use only one meta

* chore: remove unnecessary superOrders

* chore: zero-based indexing

* fix: update mock

* refactor: remove unused fixture

Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com>
This commit is contained in:
Nicholas Carrigan (he/him)
2021-12-06 08:55:13 -08:00
committed by GitHub
parent e18ccef2f2
commit 8372623f69
88 changed files with 184 additions and 166 deletions

View File

@ -153,7 +153,7 @@ export function buildChallengeUrl(challenge) {
export function getFirstChallenge(allChallenges) { export function getFirstChallenge(allChallenges) {
const first = allChallenges.find( const first = allChallenges.find(
({ challengeOrder, superOrder, order }) => ({ challengeOrder, superOrder, order }) =>
challengeOrder === 0 && superOrder === 1 && order === 0 challengeOrder === 0 && superOrder === 0 && order === 0
); );
return first ? buildChallengeUrl(first) : '/learn'; return first ? buildChallengeUrl(first) : '/learn';

View File

@ -17,7 +17,7 @@ export const mockFirstChallenge = {
superBlock: 'the', superBlock: 'the',
dashedName: 'challenge', dashedName: 'challenge',
challengeOrder: 0, challengeOrder: 0,
superOrder: 1, superOrder: 0,
order: 0 order: 0
}; };
@ -163,11 +163,6 @@ export const matchUserIdQuery = {
where: { id: mockUser.id } where: { id: mockUser.id }
}; };
export const firstChallengeQuery = {
// first challenge of the first block of the first superBlock
where: { challengeOrder: 0, superOrder: 1, order: 0 }
};
export const fullStackChallenges = [ export const fullStackChallenges = [
{ {
completedDate: 1585210952511, completedDate: 1585210952511,

View File

@ -138,7 +138,7 @@ export function Map({
currentSuperBlock = null currentSuperBlock = null
}: MapProps): React.ReactElement { }: MapProps): React.ReactElement {
/* /*
* this query gets the first challenge from each block and the second block * this query gets the first challenge from each block and the first block
* from each superblock, leaving you with one challenge from each * from each superblock, leaving you with one challenge from each
* superblock * superblock
*/ */
@ -146,7 +146,7 @@ export function Map({
query SuperBlockNodes { query SuperBlockNodes {
allChallengeNode( allChallengeNode(
sort: { fields: [superOrder] } sort: { fields: [superOrder] }
filter: { order: { eq: 2 }, challengeOrder: { eq: 1 } } filter: { order: { eq: 0 }, challengeOrder: { eq: 0 } }
) { ) {
nodes { nodes {
superBlock superBlock

View File

@ -2,12 +2,12 @@
"name": "Advanced Node and Express", "name": "Advanced Node and Express",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "advanced-node-and-express", "dashedName": "advanced-node-and-express",
"order": 2, "order": 1,
"time": "5 hours", "time": "5 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "quality-assurance", "superBlock": "quality-assurance",
"superOrder": 7, "superOrder": 6,
"challengeOrder": [ "challengeOrder": [
[ [
"5895f700f9fc0f352b528e63", "5895f700f9fc0f352b528e63",

View File

@ -2,12 +2,12 @@
"name": "Algorithms", "name": "Algorithms",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "algorithms", "dashedName": "algorithms",
"order": 1, "order": 0,
"time": "", "time": "",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "coding-interview-prep", "superBlock": "coding-interview-prep",
"superOrder": 12, "superOrder": 11,
"challengeOrder": [ "challengeOrder": [
[ [
"a3f503de51cf954ede28891d", "a3f503de51cf954ede28891d",

View File

@ -7,7 +7,7 @@
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "responsive-web-design", "superBlock": "responsive-web-design",
"superOrder": 1, "superOrder": 0,
"challengeOrder": [ "challengeOrder": [
[ [
"587d774c367417b2b2512a9c", "587d774c367417b2b2512a9c",

View File

@ -7,7 +7,7 @@
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "responsive-web-design", "superBlock": "responsive-web-design",
"superOrder": 1, "superOrder": 0,
"challengeOrder": [ "challengeOrder": [
[ [
"587d7791367417b2b2512ab3", "587d7791367417b2b2512ab3",

View File

@ -2,12 +2,11 @@
"name": "Back End Development and APIs Certification", "name": "Back End Development and APIs Certification",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "back-end-development-and-apis-certification", "dashedName": "back-end-development-and-apis-certification",
"order": 6, "order": 5,
"time": "", "time": "",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "certifications", "superBlock": "certifications",
"superOrder": 0,
"challengeOrder": [ "challengeOrder": [
[ [
"561add10cb82ac38a17523bc", "561add10cb82ac38a17523bc",

View File

@ -2,10 +2,10 @@
"name": "Back End Development and APIs Projects", "name": "Back End Development and APIs Projects",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "back-end-development-and-apis-projects", "dashedName": "back-end-development-and-apis-projects",
"order": 4, "order": 3,
"time": "150 hours", "time": "150 hours",
"superBlock": "back-end-development-and-apis", "superBlock": "back-end-development-and-apis",
"superOrder": 6, "superOrder": 5,
"challengeOrder": [ "challengeOrder": [
[ [
"bd7158d8c443edefaeb5bdef", "bd7158d8c443edefaeb5bdef",

View File

@ -2,12 +2,12 @@
"name": "Basic Algorithm Scripting", "name": "Basic Algorithm Scripting",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "basic-algorithm-scripting", "dashedName": "basic-algorithm-scripting",
"order": 6, "order": 5,
"time": "50 hours", "time": "50 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "javascript-algorithms-and-data-structures", "superBlock": "javascript-algorithms-and-data-structures",
"superOrder": 2, "superOrder": 1,
"challengeOrder": [ "challengeOrder": [
[ [
"56533eb9ac21ba0edf2244b3", "56533eb9ac21ba0edf2244b3",

View File

@ -7,7 +7,7 @@
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "responsive-web-design", "superBlock": "responsive-web-design",
"superOrder": 1, "superOrder": 0,
"challengeOrder": [ "challengeOrder": [
[ [
"bad87fee1348bd9aedf08803", "bad87fee1348bd9aedf08803",

View File

@ -2,12 +2,12 @@
"name": "Basic Data Structures", "name": "Basic Data Structures",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "basic-data-structures", "dashedName": "basic-data-structures",
"order": 5, "order": 4,
"time": "1 hour", "time": "1 hour",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "javascript-algorithms-and-data-structures", "superBlock": "javascript-algorithms-and-data-structures",
"superOrder": 2, "superOrder": 1,
"challengeOrder": [ "challengeOrder": [
[ [
"587d7b7e367417b2b2512b20", "587d7b7e367417b2b2512b20",

View File

@ -7,7 +7,7 @@
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "responsive-web-design", "superBlock": "responsive-web-design",
"superOrder": 1, "superOrder": 0,
"challengeOrder": [ "challengeOrder": [
[ [
"bd7123c8c441eddfaeb5bdef", "bd7123c8c441eddfaeb5bdef",

View File

@ -3,12 +3,12 @@
"isUpcomingChange": true, "isUpcomingChange": true,
"usesMultifileEditor": true, "usesMultifileEditor": true,
"dashedName": "basic-javascript-rpg-game", "dashedName": "basic-javascript-rpg-game",
"order": 11, "order": 10,
"time": "2 hours", "time": "2 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "javascript-algorithms-and-data-structures", "superBlock": "javascript-algorithms-and-data-structures",
"superOrder": 2, "superOrder": 1,
"isBeta": true, "isBeta": true,
"challengeOrder": [ "challengeOrder": [
[ [

View File

@ -2,12 +2,12 @@
"name": "Basic JavaScript", "name": "Basic JavaScript",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "basic-javascript", "dashedName": "basic-javascript",
"order": 1, "order": 0,
"time": "10 hours", "time": "10 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "javascript-algorithms-and-data-structures", "superBlock": "javascript-algorithms-and-data-structures",
"superOrder": 2, "superOrder": 1,
"challengeOrder": [ "challengeOrder": [
[ [
"bd7123c9c441eddfaeb4bdef", "bd7123c9c441eddfaeb4bdef",

View File

@ -2,10 +2,10 @@
"name": "Basic Node and Express", "name": "Basic Node and Express",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "basic-node-and-express", "dashedName": "basic-node-and-express",
"order": 2, "order": 1,
"time": "5 hours", "time": "5 hours",
"superBlock": "back-end-development-and-apis", "superBlock": "back-end-development-and-apis",
"superOrder": 6, "superOrder": 5,
"challengeOrder": [ "challengeOrder": [
[ [
"587d7fb0367417b2b2512bed", "587d7fb0367417b2b2512bed",

View File

@ -2,7 +2,7 @@
"name": "Bootstrap", "name": "Bootstrap",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "bootstrap", "dashedName": "bootstrap",
"order": 2, "order": 0,
"time": "5 hours", "time": "5 hours",
"template": "", "template": "",
"required": [ "required": [
@ -11,7 +11,7 @@
} }
], ],
"superBlock": "front-end-development-libraries", "superBlock": "front-end-development-libraries",
"superOrder": 3, "superOrder": 2,
"challengeOrder": [ "challengeOrder": [
[ [
"bad87fee1348bd9acde08712", "bad87fee1348bd9acde08712",

View File

@ -7,7 +7,7 @@
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "responsive-web-design", "superBlock": "responsive-web-design",
"superOrder": 1, "superOrder": 0,
"challengeOrder": [ "challengeOrder": [
[ [
"587d78ab367417b2b2512af0", "587d78ab367417b2b2512af0",

View File

@ -7,7 +7,7 @@
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "responsive-web-design", "superBlock": "responsive-web-design",
"superOrder": 1, "superOrder": 0,
"challengeOrder": [ "challengeOrder": [
[ [
"5a858944d96184f06fd60d61", "5a858944d96184f06fd60d61",

View File

@ -3,7 +3,7 @@
"isUpcomingChange": true, "isUpcomingChange": true,
"usesMultifileEditor": true, "usesMultifileEditor": true,
"dashedName": "d3-dashboard", "dashedName": "d3-dashboard",
"order": 4, "order": 3,
"time": "5 hours", "time": "5 hours",
"template": "", "template": "",
"required": [ "required": [
@ -12,7 +12,7 @@
} }
], ],
"superBlock": "data-visualization", "superBlock": "data-visualization",
"superOrder": 4, "superOrder": 3,
"challengeOrder": [ "challengeOrder": [
[ [
"5d8a4cfbe6b6180ed9a1c9de", "5d8a4cfbe6b6180ed9a1c9de",

View File

@ -2,12 +2,11 @@
"name": "Data Analysis with Python Certification", "name": "Data Analysis with Python Certification",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "data-analysis-with-python-v7-certification", "dashedName": "data-analysis-with-python-v7-certification",
"order": 9, "order": 8,
"time": "", "time": "",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "certifications", "superBlock": "certifications",
"superOrder": 0,
"challengeOrder": [ "challengeOrder": [
[ [
"5e46fc95ac417301a38fb934", "5e46fc95ac417301a38fb934",

View File

@ -2,12 +2,12 @@
"name": "Data Analysis with Python Course", "name": "Data Analysis with Python Course",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "data-analysis-with-python-course", "dashedName": "data-analysis-with-python-course",
"order": 1, "order": 0,
"time": "15 hours", "time": "15 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "data-analysis-with-python", "superBlock": "data-analysis-with-python",
"superOrder": 9, "superOrder": 8,
"challengeOrder": [ "challengeOrder": [
[ [
"5e9a093a74c4063ca6f7c14c", "5e9a093a74c4063ca6f7c14c",

View File

@ -2,10 +2,10 @@
"name": "Data Analysis with Python Projects", "name": "Data Analysis with Python Projects",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "data-analysis-with-python-projects", "dashedName": "data-analysis-with-python-projects",
"order": 3, "order": 2,
"time": "150 hours", "time": "150 hours",
"superBlock": "data-analysis-with-python", "superBlock": "data-analysis-with-python",
"superOrder": 9, "superOrder": 8,
"challengeOrder": [ "challengeOrder": [
[ [
"5e46f7e5ac417301a38fb928", "5e46f7e5ac417301a38fb928",

View File

@ -2,12 +2,12 @@
"name": "Data Structures", "name": "Data Structures",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "data-structures", "dashedName": "data-structures",
"order": 2, "order": 1,
"time": "", "time": "",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "coding-interview-prep", "superBlock": "coding-interview-prep",
"superOrder": 12, "superOrder": 11,
"challengeOrder": [ "challengeOrder": [
[ [
"587d8253367417b2b2512c6a", "587d8253367417b2b2512c6a",

View File

@ -2,12 +2,11 @@
"name": "Data Visualization Certification", "name": "Data Visualization Certification",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "data-visualization-certification", "dashedName": "data-visualization-certification",
"order": 4, "order": 3,
"time": "", "time": "",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "certifications", "superBlock": "certifications",
"superOrder": 0,
"challengeOrder": [ "challengeOrder": [
[ [
"5a553ca864b52e1d8bceea14", "5a553ca864b52e1d8bceea14",

View File

@ -2,12 +2,12 @@
"name": "Data Visualization Projects", "name": "Data Visualization Projects",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "data-visualization-projects", "dashedName": "data-visualization-projects",
"order": 3, "order": 2,
"time": "150 hours", "time": "150 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "data-visualization", "superBlock": "data-visualization",
"superOrder": 4, "superOrder": 3,
"challengeOrder": [ "challengeOrder": [
[ [
"bd7168d8c242eddfaeb5bd13", "bd7168d8c242eddfaeb5bd13",

View File

@ -2,7 +2,7 @@
"name": "Data Visualization with D3", "name": "Data Visualization with D3",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "data-visualization-with-d3", "dashedName": "data-visualization-with-d3",
"order": 1, "order": 0,
"time": "5 hours", "time": "5 hours",
"template": "", "template": "",
"required": [ "required": [
@ -11,7 +11,7 @@
} }
], ],
"superBlock": "data-visualization", "superBlock": "data-visualization",
"superOrder": 4, "superOrder": 3,
"challengeOrder": [ "challengeOrder": [
["587d7fa6367417b2b2512bc2", "Add Document Elements with D3"], ["587d7fa6367417b2b2512bc2", "Add Document Elements with D3"],
["587d7fa6367417b2b2512bc3", "Select a Group of Elements with D3"], ["587d7fa6367417b2b2512bc3", "Select a Group of Elements with D3"],

View File

@ -2,12 +2,12 @@
"name": "Debugging", "name": "Debugging",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "debugging", "dashedName": "debugging",
"order": 4, "order": 3,
"time": "1 hour", "time": "1 hour",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "javascript-algorithms-and-data-structures", "superBlock": "javascript-algorithms-and-data-structures",
"superOrder": 2, "superOrder": 1,
"challengeOrder": [ "challengeOrder": [
[ [
"587d7b83367417b2b2512b33", "587d7b83367417b2b2512b33",

View File

@ -2,12 +2,12 @@
"name": "ES6", "name": "ES6",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "es6", "dashedName": "es6",
"order": 2, "order": 1,
"time": "5 hours", "time": "5 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "javascript-algorithms-and-data-structures", "superBlock": "javascript-algorithms-and-data-structures",
"superOrder": 2, "superOrder": 1,
"challengeOrder": [ "challengeOrder": [
[ [
"587d7b87367417b2b2512b40", "587d7b87367417b2b2512b40",

View File

@ -2,12 +2,11 @@
"name": "Front End Development Libraries Certification", "name": "Front End Development Libraries Certification",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "front-end-development-libraries-certification", "dashedName": "front-end-development-libraries-certification",
"order": 3, "order": 2,
"time": "", "time": "",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "certifications", "superBlock": "certifications",
"superOrder": 0,
"challengeOrder": [ "challengeOrder": [
[ [
"561acd10cb82ac38a17513bc", "561acd10cb82ac38a17513bc",

View File

@ -2,12 +2,12 @@
"name": "Front End Development Libraries Projects", "name": "Front End Development Libraries Projects",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "front-end-development-libraries-projects", "dashedName": "front-end-development-libraries-projects",
"order": 8, "order": 6,
"time": "150 hours", "time": "150 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "front-end-development-libraries", "superBlock": "front-end-development-libraries",
"superOrder": 3, "superOrder": 2,
"challengeOrder": [ "challengeOrder": [
[ [
"bd7158d8c442eddfaeb5bd13", "bd7158d8c442eddfaeb5bd13",

View File

@ -3,12 +3,12 @@
"isUpcomingChange": true, "isUpcomingChange": true,
"usesMultifileEditor": true, "usesMultifileEditor": true,
"dashedName": "functional-programming-spreadsheet", "dashedName": "functional-programming-spreadsheet",
"order": 13, "order": 12,
"time": "2 hours", "time": "2 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "javascript-algorithms-and-data-structures", "superBlock": "javascript-algorithms-and-data-structures",
"superOrder": 2, "superOrder": 1,
"isBeta": true, "isBeta": true,
"challengeOrder": [ "challengeOrder": [
[ [

View File

@ -2,12 +2,12 @@
"name": "Functional Programming", "name": "Functional Programming",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "functional-programming", "dashedName": "functional-programming",
"order": 8, "order": 7,
"time": "5 hours", "time": "5 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "javascript-algorithms-and-data-structures", "superBlock": "javascript-algorithms-and-data-structures",
"superOrder": 2, "superOrder": 1,
"challengeOrder": [ "challengeOrder": [
[ [
"587d7b8d367417b2b2512b5b", "587d7b8d367417b2b2512b5b",

View File

@ -2,12 +2,12 @@
"name": "How Neural Networks Work", "name": "How Neural Networks Work",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "how-neural-networks-work", "dashedName": "how-neural-networks-work",
"order": 2, "order": 1,
"time": "10 hours", "time": "10 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "machine-learning-with-python", "superBlock": "machine-learning-with-python",
"superOrder": 11, "superOrder": 10,
"challengeOrder": [ "challengeOrder": [
[ [
"5e9a0e9ef99a403d019610ca", "5e9a0e9ef99a403d019610ca",

View File

@ -2,12 +2,11 @@
"name": "Information Security Certification", "name": "Information Security Certification",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "information-security-v7-certification", "dashedName": "information-security-v7-certification",
"order": 10, "order": 9,
"time": "", "time": "",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "certifications", "superBlock": "certifications",
"superOrder": 0,
"challengeOrder": [ "challengeOrder": [
[ [
"5e6021435ac9d0ecd8b94b00", "5e6021435ac9d0ecd8b94b00",

View File

@ -2,12 +2,12 @@
"name": "Information Security Projects", "name": "Information Security Projects",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "information-security-projects", "dashedName": "information-security-projects",
"order": 3, "order": 2,
"time": "150 hours", "time": "150 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "information-security", "superBlock": "information-security",
"superOrder": 10, "superOrder": 9,
"challengeOrder": [ "challengeOrder": [
[ [
"587d824a367417b2b2512c44", "587d824a367417b2b2512c44",

View File

@ -2,12 +2,12 @@
"name": "Information Security with HelmetJS", "name": "Information Security with HelmetJS",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "information-security-with-helmetjs", "dashedName": "information-security-with-helmetjs",
"order": 1, "order": 0,
"time": "5 hours", "time": "5 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "information-security", "superBlock": "information-security",
"superOrder": 10, "superOrder": 9,
"challengeOrder": [ "challengeOrder": [
[ [
"587d8247367417b2b2512c36", "587d8247367417b2b2512c36",

View File

@ -2,12 +2,12 @@
"name": "Intermediate Algorithm Scripting", "name": "Intermediate Algorithm Scripting",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "intermediate-algorithm-scripting", "dashedName": "intermediate-algorithm-scripting",
"order": 9, "order": 8,
"time": "50 hours", "time": "50 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "javascript-algorithms-and-data-structures", "superBlock": "javascript-algorithms-and-data-structures",
"superOrder": 2, "superOrder": 1,
"challengeOrder": [ "challengeOrder": [
[ [
"a3566b1109230028080c9345", "a3566b1109230028080c9345",

View File

@ -3,12 +3,12 @@
"isUpcomingChange": true, "isUpcomingChange": true,
"usesMultifileEditor": true, "usesMultifileEditor": true,
"dashedName": "intermediate-javascript-calorie-counter", "dashedName": "intermediate-javascript-calorie-counter",
"order": 12, "order": 11,
"time": "2 hours", "time": "2 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "javascript-algorithms-and-data-structures", "superBlock": "javascript-algorithms-and-data-structures",
"superOrder": 2, "superOrder": 1,
"challengeOrder": [ "challengeOrder": [
[ [
"5ddb965c65d27e1512d44d9a", "5ddb965c65d27e1512d44d9a",

View File

@ -2,12 +2,11 @@
"name": "JavaScript Algorithms and Data Structures Certification", "name": "JavaScript Algorithms and Data Structures Certification",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "javascript-algorithms-and-data-structures-certification", "dashedName": "javascript-algorithms-and-data-structures-certification",
"order": 2, "order": 1,
"time": "", "time": "",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "certifications", "superBlock": "certifications",
"superOrder": 0,
"challengeOrder": [ "challengeOrder": [
[ [
"561abd10cb81ac38a17513bc", "561abd10cb81ac38a17513bc",

View File

@ -2,12 +2,12 @@
"name": "JavaScript Algorithms and Data Structures Projects", "name": "JavaScript Algorithms and Data Structures Projects",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "javascript-algorithms-and-data-structures-projects", "dashedName": "javascript-algorithms-and-data-structures-projects",
"order": 10, "order": 9,
"time": "50 hours", "time": "50 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "javascript-algorithms-and-data-structures", "superBlock": "javascript-algorithms-and-data-structures",
"superOrder": 2, "superOrder": 1,
"challengeOrder": [ "challengeOrder": [
[ [
"aaa48de84e1ecc7c742e1124", "aaa48de84e1ecc7c742e1124",

View File

@ -2,7 +2,7 @@
"name": "jQuery", "name": "jQuery",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "jquery", "dashedName": "jquery",
"order": 3, "order": 1,
"time": "3 hours", "time": "3 hours",
"template": "", "template": "",
"required": [ "required": [
@ -11,7 +11,7 @@
} }
], ],
"superBlock": "front-end-development-libraries", "superBlock": "front-end-development-libraries",
"superOrder": 3, "superOrder": 2,
"challengeOrder": [ "challengeOrder": [
[ [
"bad87fee1348bd9acdd08826", "bad87fee1348bd9acdd08826",

View File

@ -2,7 +2,7 @@
"name": "JSON APIs and AJAX", "name": "JSON APIs and AJAX",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "json-apis-and-ajax", "dashedName": "json-apis-and-ajax",
"order": 2, "order": 1,
"time": "2 hours", "time": "2 hours",
"template": "", "template": "",
"required": [ "required": [
@ -11,7 +11,7 @@
} }
], ],
"superBlock": "data-visualization", "superBlock": "data-visualization",
"superOrder": 4, "superOrder": 3,
"challengeOrder": [ "challengeOrder": [
[ [
"587d7fad367417b2b2512be1", "587d7fad367417b2b2512be1",

View File

@ -8,7 +8,7 @@
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "responsive-web-design", "superBlock": "responsive-web-design",
"superOrder": 1, "superOrder": 0,
"isBeta": true, "isBeta": true,
"challengeOrder": [ "challengeOrder": [
[ [

View File

@ -8,7 +8,7 @@
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "responsive-web-design", "superBlock": "responsive-web-design",
"superOrder": 1, "superOrder": 0,
"isBeta": true, "isBeta": true,
"challengeOrder": [ "challengeOrder": [
[ [

View File

@ -8,7 +8,7 @@
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "responsive-web-design", "superBlock": "responsive-web-design",
"superOrder": 1, "superOrder": 0,
"isBeta": true, "isBeta": true,
"challengeOrder": [ "challengeOrder": [
[ [

View File

@ -8,7 +8,7 @@
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "responsive-web-design", "superBlock": "responsive-web-design",
"superOrder": 1, "superOrder": 0,
"isBeta": true, "isBeta": true,
"challengeOrder": [ "challengeOrder": [
[ [

View File

@ -8,7 +8,7 @@
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "responsive-web-design", "superBlock": "responsive-web-design",
"superOrder": 1, "superOrder": 0,
"isBeta": true, "isBeta": true,
"challengeOrder": [ "challengeOrder": [
[ [

View File

@ -8,7 +8,7 @@
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "responsive-web-design", "superBlock": "responsive-web-design",
"superOrder": 1, "superOrder": 0,
"challengeOrder": [ "challengeOrder": [
[ [
"5d822fd413a79914d39e98c9", "5d822fd413a79914d39e98c9",

View File

@ -8,7 +8,7 @@
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "responsive-web-design", "superBlock": "responsive-web-design",
"superOrder": 1, "superOrder": 0,
"isBeta": true, "isBeta": true,
"challengeOrder": [ "challengeOrder": [
[ [

View File

@ -8,7 +8,7 @@
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "responsive-web-design", "superBlock": "responsive-web-design",
"superOrder": 1, "superOrder": 0,
"isBeta": true, "isBeta": true,
"challengeOrder": [ "challengeOrder": [
[ [

View File

@ -8,7 +8,7 @@
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "responsive-web-design", "superBlock": "responsive-web-design",
"superOrder": 1, "superOrder": 0,
"isBeta": true, "isBeta": true,
"challengeOrder": [ "challengeOrder": [
[ [

View File

@ -2,12 +2,12 @@
"name": "Learn Relational Databases", "name": "Learn Relational Databases",
"isUpcomingChange": true, "isUpcomingChange": true,
"dashedName": "learn-relational-databases", "dashedName": "learn-relational-databases",
"order": 2, "order": 0,
"time": "", "time": "",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "relational-databases", "superBlock": "relational-databases",
"superOrder": 5, "superOrder": 4,
"challengeOrder": [ "challengeOrder": [
[ [
"5ea8adfab628f68d805bfc5e", "5ea8adfab628f68d805bfc5e",

View File

@ -8,7 +8,7 @@
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "responsive-web-design", "superBlock": "responsive-web-design",
"superOrder": 1, "superOrder": 0,
"isBeta": true, "isBeta": true,
"challengeOrder": [ "challengeOrder": [
[ [

View File

@ -8,7 +8,7 @@
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "responsive-web-design", "superBlock": "responsive-web-design",
"superOrder": 1, "superOrder": 0,
"isBeta": true, "isBeta": true,
"challengeOrder": [ "challengeOrder": [
[ [

View File

@ -8,7 +8,7 @@
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "responsive-web-design", "superBlock": "responsive-web-design",
"superOrder": 1, "superOrder": 0,
"isBeta": true, "isBeta": true,
"challengeOrder": [ "challengeOrder": [
[ [

View File

@ -2,12 +2,11 @@
"name": "Legacy Back End Certification", "name": "Legacy Back End Certification",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "legacy-back-end-certification", "dashedName": "legacy-back-end-certification",
"order": 1, "order": 12,
"time": "", "time": "",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "certifications", "superBlock": "certifications",
"superOrder": 12,
"challengeOrder": [ "challengeOrder": [
[ [
"660add10cb82ac38a17513be", "660add10cb82ac38a17513be",

View File

@ -2,12 +2,11 @@
"name": "Legacy Data Visualization Certification", "name": "Legacy Data Visualization Certification",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "legacy-data-visualization-certification", "dashedName": "legacy-data-visualization-certification",
"order": 1, "order": 13,
"time": "", "time": "",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "certifications", "superBlock": "certifications",
"superOrder": 12,
"challengeOrder": [ "challengeOrder": [
[ [
"561add10cb82ac39a17513bc", "561add10cb82ac39a17513bc",

View File

@ -2,12 +2,11 @@
"name": "Legacy Front End Certification", "name": "Legacy Front End Certification",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "legacy-front-end-certification", "dashedName": "legacy-front-end-certification",
"order": 1, "order": 11,
"time": "", "time": "",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "certifications", "superBlock": "certifications",
"superOrder": 12,
"challengeOrder": [ "challengeOrder": [
[ [
"561add10cb82ac38a17513be", "561add10cb82ac38a17513be",

View File

@ -2,12 +2,11 @@
"name": "Legacy Full Stack Certification", "name": "Legacy Full Stack Certification",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "full-stack-certification", "dashedName": "full-stack-certification",
"order": 5, "order": 15,
"time": "", "time": "",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "certifications", "superBlock": "certifications",
"superOrder": 12,
"challengeOrder": [ "challengeOrder": [
[ [
"561add10cb82ac38a17213bd", "561add10cb82ac38a17213bd",

View File

@ -2,12 +2,11 @@
"name": "Legacy Information Security and Quality Assurance Certification", "name": "Legacy Information Security and Quality Assurance Certification",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "information-security-and-quality-assurance-certification", "dashedName": "information-security-and-quality-assurance-certification",
"order": 1, "order": 14,
"time": "", "time": "",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "certifications", "superBlock": "certifications",
"superOrder": 12,
"challengeOrder": [ "challengeOrder": [
[ [
"561add10cb82ac38a17213bc", "561add10cb82ac38a17213bc",

View File

@ -2,12 +2,11 @@
"name": "Machine Learning with Python Certification", "name": "Machine Learning with Python Certification",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "machine-learning-with-python-v7-certification", "dashedName": "machine-learning-with-python-v7-certification",
"order": 11, "order": 10,
"time": "", "time": "",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "certifications", "superBlock": "certifications",
"superOrder": 0,
"challengeOrder": [ "challengeOrder": [
[ [
"5e46fc95ac417301a38fb935", "5e46fc95ac417301a38fb935",

View File

@ -2,10 +2,10 @@
"name": "Machine Learning with Python Projects", "name": "Machine Learning with Python Projects",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "machine-learning-with-python-projects", "dashedName": "machine-learning-with-python-projects",
"order": 3, "order": 2,
"time": "150 hours", "time": "150 hours",
"superBlock": "machine-learning-with-python", "superBlock": "machine-learning-with-python",
"superOrder": 11, "superOrder": 10,
"challengeOrder": [ "challengeOrder": [
[ [
"5e46f8d6ac417301a38fb92d", "5e46f8d6ac417301a38fb92d",

View File

@ -2,10 +2,10 @@
"name": "Managing Packages with npm", "name": "Managing Packages with npm",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "managing-packages-with-npm", "dashedName": "managing-packages-with-npm",
"order": 1, "order": 0,
"time": "5 hours", "time": "5 hours",
"superBlock": "back-end-development-and-apis", "superBlock": "back-end-development-and-apis",
"superOrder": 6, "superOrder": 5,
"challengeOrder": [ "challengeOrder": [
[ [
"587d7fb3367417b2b2512bfb", "587d7fb3367417b2b2512bfb",

View File

@ -2,10 +2,10 @@
"name": "MongoDB and Mongoose", "name": "MongoDB and Mongoose",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "mongodb-and-mongoose", "dashedName": "mongodb-and-mongoose",
"order": 3, "order": 2,
"time": "5 hours", "time": "5 hours",
"superBlock": "back-end-development-and-apis", "superBlock": "back-end-development-and-apis",
"superOrder": 6, "superOrder": 5,
"challengeOrder": [ "challengeOrder": [
[ [
"587d7fb6367417b2b2512c06", "587d7fb6367417b2b2512c06",

View File

@ -2,12 +2,12 @@
"name": "Numpy", "name": "Numpy",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "numpy", "dashedName": "numpy",
"order": 2, "order": 1,
"time": "5 hours", "time": "5 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "data-analysis-with-python", "superBlock": "data-analysis-with-python",
"superOrder": 9, "superOrder": 8,
"challengeOrder": [ "challengeOrder": [
[ [
"5e9a0a8e09c5df3cc3600ed2", "5e9a0a8e09c5df3cc3600ed2",

View File

@ -2,12 +2,12 @@
"name": "Object Oriented Programming", "name": "Object Oriented Programming",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "object-oriented-programming", "dashedName": "object-oriented-programming",
"order": 7, "order": 6,
"time": "5 hours", "time": "5 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "javascript-algorithms-and-data-structures", "superBlock": "javascript-algorithms-and-data-structures",
"superOrder": 2, "superOrder": 1,
"challengeOrder": [ "challengeOrder": [
[ [
"587d7dac367417b2b2512b73", "587d7dac367417b2b2512b73",

View File

@ -2,12 +2,12 @@
"name": "Project Euler", "name": "Project Euler",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "project-euler", "dashedName": "project-euler",
"order": 6, "order": 4,
"time": "", "time": "",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "coding-interview-prep", "superBlock": "coding-interview-prep",
"superOrder": 12, "superOrder": 11,
"challengeOrder": [ "challengeOrder": [
[ [
"5900f36e1000cf542c50fe80", "5900f36e1000cf542c50fe80",

View File

@ -2,10 +2,10 @@
"name": "Python for Everybody", "name": "Python for Everybody",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "python-for-everybody", "dashedName": "python-for-everybody",
"order": 1, "order": 0,
"time": "15 hours", "time": "15 hours",
"superBlock": "scientific-computing-with-python", "superBlock": "scientific-computing-with-python",
"superOrder": 8, "superOrder": 7,
"challengeOrder": [ "challengeOrder": [
[ [
"5e6a54a558d3af90110a60a0", "5e6a54a558d3af90110a60a0",

View File

@ -2,12 +2,12 @@
"name": "Python for Penetration Testing", "name": "Python for Penetration Testing",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "python-for-penetration-testing", "dashedName": "python-for-penetration-testing",
"order": 2, "order": 1,
"time": "5 hours", "time": "5 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "information-security", "superBlock": "information-security",
"superOrder": 10, "superOrder": 9,
"challengeOrder": [ "challengeOrder": [
[ [
"5ea9997bbec2e9bc47e94dae", "5ea9997bbec2e9bc47e94dae",

View File

@ -2,12 +2,12 @@
"name": "Quality Assurance and Testing with Chai", "name": "Quality Assurance and Testing with Chai",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "quality-assurance-and-testing-with-chai", "dashedName": "quality-assurance-and-testing-with-chai",
"order": 1, "order": 0,
"time": "5 hours", "time": "5 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "quality-assurance", "superBlock": "quality-assurance",
"superOrder": 7, "superOrder": 6,
"challengeOrder": [ "challengeOrder": [
[ [
"587d824a367417b2b2512c46", "587d824a367417b2b2512c46",

View File

@ -2,12 +2,11 @@
"name": "Quality Assurance Certification", "name": "Quality Assurance Certification",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "quality-assurance-v7-certification", "dashedName": "quality-assurance-v7-certification",
"order": 7, "order": 6,
"time": "", "time": "",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "certifications", "superBlock": "certifications",
"superOrder": 0,
"challengeOrder": [ "challengeOrder": [
[ [
"5e611829481575a52dc59c0e", "5e611829481575a52dc59c0e",

View File

@ -2,12 +2,12 @@
"name": "Quality Assurance Projects", "name": "Quality Assurance Projects",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "quality-assurance-projects", "dashedName": "quality-assurance-projects",
"order": 3, "order": 2,
"time": "150 hours", "time": "150 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "quality-assurance", "superBlock": "quality-assurance",
"superOrder": 7, "superOrder": 6,
"challengeOrder": [ "challengeOrder": [
[ [
"587d8249367417b2b2512c41", "587d8249367417b2b2512c41",

View File

@ -2,7 +2,7 @@
"name": "React and Redux", "name": "React and Redux",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "react-and-redux", "dashedName": "react-and-redux",
"order": 7, "order": 5,
"time": "5 hours", "time": "5 hours",
"template": "<body><div id='root'></div>${ source || '' }</body>", "template": "<body><div id='root'></div>${ source || '' }</body>",
"required": [ "required": [
@ -20,7 +20,7 @@
} }
], ],
"superBlock": "front-end-development-libraries", "superBlock": "front-end-development-libraries",
"superOrder": 3, "superOrder": 2,
"challengeOrder": [ "challengeOrder": [
[ [
"5a24c314108439a4d4036141", "5a24c314108439a4d4036141",

View File

@ -2,7 +2,7 @@
"name": "React", "name": "React",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "react", "dashedName": "react",
"order": 5, "order": 3,
"time": "5 hours", "time": "5 hours",
"template": "<body><div id='root'></div><div id='challenge-node'></div>${ source || '' }</body>", "template": "<body><div id='root'></div><div id='challenge-node'></div>${ source || '' }</body>",
"required": [ "required": [
@ -14,7 +14,7 @@
} }
], ],
"superBlock": "front-end-development-libraries", "superBlock": "front-end-development-libraries",
"superOrder": 3, "superOrder": 2,
"challengeOrder": [ "challengeOrder": [
[ [
"587d7dbc367417b2b2512bb1", "587d7dbc367417b2b2512bb1",

View File

@ -2,7 +2,7 @@
"name": "Redux", "name": "Redux",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "redux", "dashedName": "redux",
"order": 6, "order": 4,
"time": "5 hours", "time": "5 hours",
"template": "", "template": "",
"required": [ "required": [
@ -14,7 +14,7 @@
} }
], ],
"superBlock": "front-end-development-libraries", "superBlock": "front-end-development-libraries",
"superOrder": 3, "superOrder": 2,
"challengeOrder": [ "challengeOrder": [
[ [
"5a24c314108439a4d403614b", "5a24c314108439a4d403614b",

View File

@ -2,12 +2,12 @@
"name": "Regular Expressions", "name": "Regular Expressions",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "regular-expressions", "dashedName": "regular-expressions",
"order": 3, "order": 2,
"time": "5 hours", "time": "5 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "javascript-algorithms-and-data-structures", "superBlock": "javascript-algorithms-and-data-structures",
"superOrder": 2, "superOrder": 1,
"challengeOrder": [ "challengeOrder": [
[ [
"587d7db3367417b2b2512b8e", "587d7db3367417b2b2512b8e",

View File

@ -2,12 +2,11 @@
"name": "Relational Databases Certification", "name": "Relational Databases Certification",
"isUpcomingChange": true, "isUpcomingChange": true,
"dashedName": "relational-databases-v8-certification", "dashedName": "relational-databases-v8-certification",
"order": 5, "order": 4,
"time": "", "time": "",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "certifications", "superBlock": "certifications",
"superOrder": 0,
"challengeOrder": [ "challengeOrder": [
[ [
"606243f50267e718b1e755f4", "606243f50267e718b1e755f4",

View File

@ -2,12 +2,11 @@
"name": "Responsive Web Design Certification", "name": "Responsive Web Design Certification",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "responsive-web-design-certification", "dashedName": "responsive-web-design-certification",
"order": 1, "order": 0,
"time": "", "time": "",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "certifications", "superBlock": "certifications",
"superOrder": 0,
"challengeOrder": [ "challengeOrder": [
[ [
"561add10cb82ac38a17513bc", "561add10cb82ac38a17513bc",

View File

@ -7,7 +7,7 @@
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "responsive-web-design", "superBlock": "responsive-web-design",
"superOrder": 1, "superOrder": 0,
"challengeOrder": [ "challengeOrder": [
[ [
"587d78b0367417b2b2512b08", "587d78b0367417b2b2512b08",

View File

@ -7,7 +7,7 @@
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "responsive-web-design", "superBlock": "responsive-web-design",
"superOrder": 1, "superOrder": 0,
"challengeOrder": [ "challengeOrder": [
[ [
"bd7158d8c442eddfaeb5bd18", "bd7158d8c442eddfaeb5bd18",

View File

@ -2,12 +2,12 @@
"name": "Rosetta Code", "name": "Rosetta Code",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "rosetta-code", "dashedName": "rosetta-code",
"order": 5, "order": 3,
"time": "", "time": "",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "coding-interview-prep", "superBlock": "coding-interview-prep",
"superOrder": 12, "superOrder": 11,
"challengeOrder": [ "challengeOrder": [
[ [
"594810f028c0303b75339acb", "594810f028c0303b75339acb",

View File

@ -2,12 +2,12 @@
"name": "Sass", "name": "Sass",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "sass", "dashedName": "sass",
"order": 4, "order": 2,
"time": "5 hours", "time": "5 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "front-end-development-libraries", "superBlock": "front-end-development-libraries",
"superOrder": 3, "superOrder": 2,
"challengeOrder": [ "challengeOrder": [
[ [
"587d7dbd367417b2b2512bb4", "587d7dbd367417b2b2512bb4",

View File

@ -2,12 +2,11 @@
"name": "Scientific Computing with Python Certification", "name": "Scientific Computing with Python Certification",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "scientific-computing-with-python-v7-certification", "dashedName": "scientific-computing-with-python-v7-certification",
"order": 8, "order": 7,
"time": "", "time": "",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "certifications", "superBlock": "certifications",
"superOrder": 0,
"challengeOrder": [ "challengeOrder": [
[ [
"5e44431b903586ffb414c951", "5e44431b903586ffb414c951",

View File

@ -2,10 +2,10 @@
"name": "Scientific Computing with Python Projects", "name": "Scientific Computing with Python Projects",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "scientific-computing-with-python-projects", "dashedName": "scientific-computing-with-python-projects",
"order": 2, "order": 1,
"time": "150 hours", "time": "150 hours",
"superBlock": "scientific-computing-with-python", "superBlock": "scientific-computing-with-python",
"superOrder": 8, "superOrder": 7,
"challengeOrder": [ "challengeOrder": [
[ [
"5e44412c903586ffb414c94c", "5e44412c903586ffb414c94c",

View File

@ -2,12 +2,12 @@
"name": "Take Home Projects", "name": "Take Home Projects",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "take-home-projects", "dashedName": "take-home-projects",
"order": 4, "order": 2,
"time": "", "time": "",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "coding-interview-prep", "superBlock": "coding-interview-prep",
"superOrder": 12, "superOrder": 11,
"challengeOrder": [ "challengeOrder": [
[ [
"bd7158d8c442eddfaeb5bd10", "bd7158d8c442eddfaeb5bd10",

View File

@ -2,10 +2,10 @@
"name": "TensorFlow", "name": "TensorFlow",
"isUpcomingChange": false, "isUpcomingChange": false,
"dashedName": "tensorflow", "dashedName": "tensorflow",
"order": 1, "order": 0,
"time": "15 hours", "time": "15 hours",
"superBlock": "machine-learning-with-python", "superBlock": "machine-learning-with-python",
"superOrder": 11, "superOrder": 10,
"challengeOrder": [ "challengeOrder": [
[ [
"5e8f2f13c4cdbe86b5c72d87", "5e8f2f13c4cdbe86b5c72d87",

View File

@ -199,9 +199,7 @@ async function setup() {
for (const challenge of challenges) { for (const challenge of challenges) {
const dashedBlockName = challenge.block; const dashedBlockName = challenge.block;
if (!meta[dashedBlockName]) { if (!meta[dashedBlockName]) {
meta[dashedBlockName] = ( meta[dashedBlockName] = await getMetaForBlock(dashedBlockName);
await getMetaForBlock(dashedBlockName)
).challengeOrder;
} }
} }
return { return {
@ -253,6 +251,47 @@ function populateTestsForLang({ lang, challenges, meta }) {
const challengeTitles = new ChallengeTitles(); const challengeTitles = new ChallengeTitles();
const validateChallenge = challengeSchemaValidator(); const validateChallenge = challengeSchemaValidator();
describe('Assert meta order', function () {
/** This array can be used to skip a superblock - we'll use this
* when we are working on the new project-based curriculum for
* a superblock (because keeping those challenges in order is
* tricky and needs cleaning up before deploying).
*/
const superBlocksUnderDevelopment = ['responsive-web-design'];
const superBlocks = new Set([
...Object.values(meta)
.map(el => el.superBlock)
.filter(el => !superBlocksUnderDevelopment.includes(el))
]);
superBlocks.forEach(superBlock => {
const filteredMeta = Object.values(meta)
/**
* Exclude any meta which doesn't have a superOrder, as these shouldn't
* appear on the learn map and thus don't need to be validated.
*/
.filter(
el =>
el.superBlock === superBlock && typeof el.superOrder !== 'undefined'
)
.sort((a, b) => a.order - b.order);
if (!filteredMeta.length) {
return;
}
it(`${superBlock} should have the same order in every meta`, function () {
const firstOrder = filteredMeta[0].superOrder;
assert.isTrue(
filteredMeta.every(el => el.superOrder === firstOrder),
'The superOrder properties are mismatched.'
);
});
filteredMeta.forEach((meta, index) => {
it(`${meta.superBlock} ${meta.name} must be in order`, function () {
assert.equal(meta.order, index);
});
});
});
});
describe(`Check challenges (${lang})`, function () { describe(`Check challenges (${lang})`, function () {
this.timeout(5000); this.timeout(5000);
challenges.forEach((challenge, id) => { challenges.forEach((challenge, id) => {
@ -262,7 +301,7 @@ function populateTestsForLang({ lang, challenges, meta }) {
// Note: the title in meta.json are purely for human readability and // Note: the title in meta.json are purely for human readability and
// do not include translations, so we do not validate against them. // do not include translations, so we do not validate against them.
it('Matches an ID in meta.json', function () { it('Matches an ID in meta.json', function () {
const index = meta[dashedBlockName].findIndex( const index = meta[dashedBlockName].challengeOrder.findIndex(
arr => arr[0] === challenge.id arr => arr[0] === challenge.id
); );