fix(learn): versioning for new certificate slugs (#39087)

This commit is contained in:
Kristofer Koishigawa
2020-06-18 00:00:31 +09:00
committed by GitHub
parent b3d5cde75e
commit 6e5988da4e
24 changed files with 223 additions and 227 deletions

View File

@ -167,12 +167,12 @@
"description": "Camper is information security and quality assurance certified", "description": "Camper is information security and quality assurance certified",
"default": false "default": false
}, },
"is2020QaCert": { "isQaCertV7": {
"type": "boolean", "type": "boolean",
"description": "Camper is quality assurance certified", "description": "Camper is quality assurance certified",
"default": false "default": false
}, },
"is2020InfosecCert": { "isInfosecCertV7": {
"type": "boolean", "type": "boolean",
"description": "Camper is information security certified", "description": "Camper is information security certified",
"default": false "default": false
@ -182,17 +182,17 @@
"description": "Camper is full stack certified (2018)", "description": "Camper is full stack certified (2018)",
"default": false "default": false
}, },
"is2020SciCompPyCert": { "isSciCompPyCertV7": {
"type": "boolean", "type": "boolean",
"description": "Camper is scientific computing with Python certified", "description": "Camper is scientific computing with Python certified",
"default": false "default": false
}, },
"is2020DataAnalysisPyCert": { "isDataAnalysisPyCertV7": {
"type": "boolean", "type": "boolean",
"description": "Camper is data analysis with Python certified", "description": "Camper is data analysis with Python certified",
"default": false "default": false
}, },
"is2020MachineLearningPyCert": { "isMachineLearningPyCertV7": {
"type": "boolean", "type": "boolean",
"description": "Camper is machine learning with Python certified", "description": "Camper is machine learning with Python certified",
"default": false "default": false

View File

@ -21,11 +21,11 @@ import {
jsAlgoDataStructId, jsAlgoDataStructId,
dataVis2018Id, dataVis2018Id,
apisMicroservicesId, apisMicroservicesId,
qa2020Id, qaV7Id,
infosec2020Id, infosecV7Id,
sciCompPy2020Id, sciCompPyV7Id,
dataAnalysisPy2020Id, dataAnalysisPyV7Id,
machineLearningPy2020Id machineLearningPyV7Id
} from '../utils/constantStrings.json'; } from '../utils/constantStrings.json';
import { oldDataVizId } from '../../../config/misc'; import { oldDataVizId } from '../../../config/misc';
import certTypes from '../utils/certTypes.json'; import certTypes from '../utils/certTypes.json';
@ -117,15 +117,12 @@ function createCertTypeIds(app) {
apisMicroservicesId, apisMicroservicesId,
Challenge Challenge
), ),
[certTypes.qa2020]: getIdsForCert$(qa2020Id, Challenge), [certTypes.qaV7]: getIdsForCert$(qaV7Id, Challenge),
[certTypes.infosec2020]: getIdsForCert$(infosec2020Id, Challenge), [certTypes.infosecV7]: getIdsForCert$(infosecV7Id, Challenge),
[certTypes.sciCompPy2020]: getIdsForCert$(sciCompPy2020Id, Challenge), [certTypes.sciCompPyV7]: getIdsForCert$(sciCompPyV7Id, Challenge),
[certTypes.dataAnalysisPy2020]: getIdsForCert$( [certTypes.dataAnalysisPyV7]: getIdsForCert$(dataAnalysisPyV7Id, Challenge),
dataAnalysisPy2020Id, [certTypes.machineLearningPyV7]: getIdsForCert$(
Challenge machineLearningPyV7Id,
),
[certTypes.machineLearningPy2020]: getIdsForCert$(
machineLearningPy2020Id,
Challenge Challenge
) )
}; };
@ -148,11 +145,11 @@ const certIds = {
[certTypes.jsAlgoDataStruct]: jsAlgoDataStructId, [certTypes.jsAlgoDataStruct]: jsAlgoDataStructId,
[certTypes.dataVis2018]: dataVis2018Id, [certTypes.dataVis2018]: dataVis2018Id,
[certTypes.apisMicroservices]: apisMicroservicesId, [certTypes.apisMicroservices]: apisMicroservicesId,
[certTypes.qa2020]: qa2020Id, [certTypes.qaV7]: qaV7Id,
[certTypes.infosec2020]: infosec2020Id, [certTypes.infosecV7]: infosecV7Id,
[certTypes.sciCompPy2020]: sciCompPy2020Id, [certTypes.sciCompPyV7]: sciCompPyV7Id,
[certTypes.dataAnalysisPy2020]: dataAnalysisPy2020Id, [certTypes.dataAnalysisPyV7]: dataAnalysisPyV7Id,
[certTypes.machineLearningPy2020]: machineLearningPy2020Id [certTypes.machineLearningPyV7]: machineLearningPyV7Id
}; };
const certText = { const certText = {
@ -166,11 +163,11 @@ const certText = {
[certTypes.jsAlgoDataStruct]: 'JavaScript Algorithms and Data Structures', [certTypes.jsAlgoDataStruct]: 'JavaScript Algorithms and Data Structures',
[certTypes.dataVis2018]: 'Data Visualization', [certTypes.dataVis2018]: 'Data Visualization',
[certTypes.apisMicroservices]: 'APIs and Microservices', [certTypes.apisMicroservices]: 'APIs and Microservices',
[certTypes.qa2020]: 'Quality Assurance', [certTypes.qaV7]: 'Quality Assurance',
[certTypes.infosec2020]: 'Information Security', [certTypes.infosecV7]: 'Information Security',
[certTypes.sciCompPy2020]: 'Scientific Computing with Python', [certTypes.sciCompPyV7]: 'Scientific Computing with Python',
[certTypes.dataAnalysisPy2020]: 'Data Analysis with Python', [certTypes.dataAnalysisPyV7]: 'Data Analysis with Python',
[certTypes.machineLearningPy2020]: 'Machine Learning with Python' [certTypes.machineLearningPyV7]: 'Machine Learning with Python'
}; };
const completionHours = { const completionHours = {
@ -184,11 +181,11 @@ const completionHours = {
[certTypes.jsAlgoDataStruct]: 300, [certTypes.jsAlgoDataStruct]: 300,
[certTypes.dataVis2018]: 300, [certTypes.dataVis2018]: 300,
[certTypes.apisMicroservices]: 300, [certTypes.apisMicroservices]: 300,
[certTypes.qa2020]: 300, [certTypes.qaV7]: 300,
[certTypes.infosec2020]: 300, [certTypes.infosecV7]: 300,
[certTypes.sciCompPy2020]: 400, [certTypes.sciCompPyV7]: 400,
[certTypes.dataAnalysisPy2020]: 400, [certTypes.dataAnalysisPyV7]: 400,
[certTypes.machineLearningPy2020]: 400 [certTypes.machineLearningPyV7]: 400
}; };
function getIdsForCert$(id, Challenge) { function getIdsForCert$(id, Challenge) {
@ -212,11 +209,11 @@ function sendCertifiedEmail(
isJsAlgoDataStructCert, isJsAlgoDataStructCert,
isDataVisCert, isDataVisCert,
isApisMicroservicesCert, isApisMicroservicesCert,
is2020QaCert, isQaCertV7,
is2020InfosecCert, isInfosecCertV7,
is2020SciCompPyCert, isSciCompPyCertV7,
is2020DataAnalysisPyCert, isDataAnalysisPyCertV7,
is2020MachineLearningPyCert isMachineLearningPyCertV7
}, },
send$ send$
) { ) {
@ -227,11 +224,11 @@ function sendCertifiedEmail(
!isJsAlgoDataStructCert || !isJsAlgoDataStructCert ||
!isDataVisCert || !isDataVisCert ||
!isApisMicroservicesCert || !isApisMicroservicesCert ||
!is2020QaCert || !isQaCertV7 ||
!is2020InfosecCert || !isInfosecCertV7 ||
!is2020SciCompPyCert || !isSciCompPyCertV7 ||
!is2020DataAnalysisPyCert || !isDataAnalysisPyCertV7 ||
!is2020MachineLearningPyCert !isMachineLearningPyCertV7
) { ) {
return Observable.just(false); return Observable.just(false);
} }
@ -259,15 +256,15 @@ function getUserIsCertMap(user) {
is2018DataVisCert = false, is2018DataVisCert = false,
isApisMicroservicesCert = false, isApisMicroservicesCert = false,
isInfosecQaCert = false, isInfosecQaCert = false,
is2020QaCert = false, isQaCertV7 = false,
is2020InfosecCert = false, isInfosecCertV7 = false,
isFrontEndCert = false, isFrontEndCert = false,
isBackEndCert = false, isBackEndCert = false,
isDataVisCert = false, isDataVisCert = false,
isFullStackCert = false, isFullStackCert = false,
is2020SciCompPyCert = false, isSciCompPyCertV7 = false,
is2020DataAnalysisPyCert = false, isDataAnalysisPyCertV7 = false,
is2020MachineLearningPyCert = false isMachineLearningPyCertV7 = false
} = user; } = user;
return { return {
@ -277,15 +274,15 @@ function getUserIsCertMap(user) {
is2018DataVisCert, is2018DataVisCert,
isApisMicroservicesCert, isApisMicroservicesCert,
isInfosecQaCert, isInfosecQaCert,
is2020QaCert, isQaCertV7,
is2020InfosecCert, isInfosecCertV7,
isFrontEndCert, isFrontEndCert,
isBackEndCert, isBackEndCert,
isDataVisCert, isDataVisCert,
isFullStackCert, isFullStackCert,
is2020SciCompPyCert, isSciCompPyCertV7,
is2020DataAnalysisPyCert, isDataAnalysisPyCertV7,
is2020MachineLearningPyCert isMachineLearningPyCertV7
}; };
} }
@ -412,11 +409,11 @@ function createShowCert(app) {
is2018DataVisCert: true, is2018DataVisCert: true,
isApisMicroservicesCert: true, isApisMicroservicesCert: true,
isInfosecQaCert: true, isInfosecQaCert: true,
is2020QaCert: true, isQaCertV7: true,
is2020InfosecCert: true, isInfosecCertV7: true,
is2020SciCompPyCert: true, isSciCompPyCertV7: true,
is2020DataAnalysisPyCert: true, isDataAnalysisPyCertV7: true,
is2020MachineLearningPyCert: true, isMachineLearningPyCertV7: true,
isHonest: true, isHonest: true,
username: true, username: true,
name: true, name: true,

View File

@ -162,16 +162,16 @@ function postResetProgress(req, res, next) {
isJsAlgoDataStructCert: false, isJsAlgoDataStructCert: false,
isApisMicroservicesCert: false, isApisMicroservicesCert: false,
isInfosecQaCert: false, isInfosecQaCert: false,
is2020QaCert: false, isQaCertV7: false,
is2020InfosecCert: false, isInfosecCertV7: false,
is2018FullStackCert: false, is2018FullStackCert: false,
isFrontEndCert: false, isFrontEndCert: false,
isBackEndCert: false, isBackEndCert: false,
isDataVisCert: false, isDataVisCert: false,
isFullStackCert: false, isFullStackCert: false,
is2020SciCompPyCert: false, isSciCompPyCertV7: false,
is2020DataAnalysisPyCert: false, isDataAnalysisPyCertV7: false,
is2020MachineLearningPyCert: false, isMachineLearningPyCertV7: false,
completedChallenges: [] completedChallenges: []
}, },
function(err) { function(err) {

View File

@ -8,10 +8,10 @@
"jsAlgoDataStruct": "isJsAlgoDataStructCert", "jsAlgoDataStruct": "isJsAlgoDataStructCert",
"apisMicroservices": "isApisMicroservicesCert", "apisMicroservices": "isApisMicroservicesCert",
"infosecQa": "isInfosecQaCert", "infosecQa": "isInfosecQaCert",
"qa2020": "is2020QaCert", "qaV7": "isQaCertV7",
"infosec2020": "is2020InfosecCert", "infosecV7": "isInfosecCertV7",
"sciCompPy2020": "is2020SciCompPyCert", "sciCompPyV7": "isSciCompPyCertV7",
"dataAnalysisPy2020": "is2020DataAnalysisPyCert", "dataAnalysisPyV7": "isDataAnalysisPyCertV7",
"machineLearningPy2020": "is2020MachineLearningPyCert", "machineLearningPyV7": "isMachineLearningPyCertV7",
"fullStack": "isFullStackCert" "fullStack": "isFullStackCert"
} }

View File

@ -18,11 +18,11 @@ export function completeCommitment$(user) {
isDataVisCert, isDataVisCert,
isApisMicroservicesCert, isApisMicroservicesCert,
isInfosecQaCert, isInfosecQaCert,
is2020QaCert, isQaCertV7,
is2020InfosecCert, isInfosecCertV7,
is2020SciCompPyCert, isSciCompPyCertV7,
is2020DataAnalysisPyCert, isDataAnalysisPyCertV7,
is2020MachineLearningPyCert isMachineLearningPyCertV7
} = user; } = user;
return Observable.fromNodeCallback(user.pledge, user)().flatMap(pledge => { return Observable.fromNodeCallback(user.pledge, user)().flatMap(pledge => {
@ -42,12 +42,11 @@ export function completeCommitment$(user) {
(isDataVisCert && goal === commitGoals.dataVisCert) || (isDataVisCert && goal === commitGoals.dataVisCert) ||
(isApisMicroservicesCert && goal === commitGoals.apisMicroservicesCert) || (isApisMicroservicesCert && goal === commitGoals.apisMicroservicesCert) ||
(isInfosecQaCert && goal === commitGoals.infosecQaCert) || (isInfosecQaCert && goal === commitGoals.infosecQaCert) ||
(is2020QaCert && goal === commitGoals.QaCert) || (isQaCertV7 && goal === commitGoals.QaCert) ||
(is2020InfosecCert && goal === commitGoals.infosecCert) || (isInfosecCertV7 && goal === commitGoals.infosecCert) ||
(is2020SciCompPyCert && goal === commitGoals.sciCompPyCert) || (isSciCompPyCertV7 && goal === commitGoals.sciCompPyCert) ||
(is2020DataAnalysisPyCert && goal === commitGoals.dataAnalysisPyCert) || (isDataAnalysisPyCertV7 && goal === commitGoals.dataAnalysisPyCert) ||
(is2020MachineLearningPyCert && (isMachineLearningPyCertV7 && goal === commitGoals.machineLearningPyCert)
goal === commitGoals.machineLearningPyCert)
) { ) {
debug('marking goal complete'); debug('marking goal complete');
pledge.isCompleted = true; pledge.isCompleted = true;

View File

@ -12,9 +12,9 @@
"dataVis2018Id": "5a553ca864b52e1d8bceea14", "dataVis2018Id": "5a553ca864b52e1d8bceea14",
"jsAlgoDataStructId": "561abd10cb81ac38a17513bc", "jsAlgoDataStructId": "561abd10cb81ac38a17513bc",
"apisMicroservicesId": "561add10cb82ac38a17523bc", "apisMicroservicesId": "561add10cb82ac38a17523bc",
"qa2020Id": "5e611829481575a52dc59c0e", "qaV7Id": "5e611829481575a52dc59c0e",
"infosec2020Id": "5e6021435ac9d0ecd8b94b00", "infosecV7Id": "5e6021435ac9d0ecd8b94b00",
"sciCompPy2020Id": "5e44431b903586ffb414c951", "sciCompPyV7Id": "5e44431b903586ffb414c951",
"dataAnalysisPy2020Id": "5e46fc95ac417301a38fb934", "dataAnalysisPyV7Id": "5e46fc95ac417301a38fb934",
"machineLearningPy2020Id": "5e46fc95ac417301a38fb935" "machineLearningPyV7Id": "5e46fc95ac417301a38fb935"
} }

View File

@ -3,13 +3,13 @@ function getCompletedCertCount(user) {
'isApisMicroservicesCert', 'isApisMicroservicesCert',
'is2018DataVisCert', 'is2018DataVisCert',
'isFrontEndLibsCert', 'isFrontEndLibsCert',
'is2020QaCert', 'isQaCertV7',
'is2020InfosecCert', 'isInfosecCertV7',
'isJsAlgoDataStructCert', 'isJsAlgoDataStructCert',
'isRespWebDesignCert', 'isRespWebDesignCert',
'is2020SciCompPyCert', 'isSciCompPyCertV7',
'is2020DataAnalysisPyCert', 'isDataAnalysisPyCertV7',
'is2020MachineLearningPyCert' 'isMachineLearningPyCertV7'
].reduce((sum, key) => (user[key] ? sum + 1 : sum), 0); ].reduce((sum, key) => (user[key] ? sum + 1 : sum), 0);
} }

View File

@ -23,13 +23,13 @@ export const publicUserProps = [
'isFrontEndLibsCert', 'isFrontEndLibsCert',
'isHonest', 'isHonest',
'isInfosecQaCert', 'isInfosecQaCert',
'is2020QaCert', 'isQaCertV7',
'is2020InfosecCert', 'isInfosecCertV7',
'isJsAlgoDataStructCert', 'isJsAlgoDataStructCert',
'isRespWebDesignCert', 'isRespWebDesignCert',
'is2020SciCompPyCert', 'isSciCompPyCertV7',
'is2020DataAnalysisPyCert', 'isDataAnalysisPyCertV7',
'is2020MachineLearningPyCert', 'isMachineLearningPyCertV7',
'linkedin', 'linkedin',
'location', 'location',
'name', 'name',

View File

@ -16,11 +16,11 @@ const superBlockCertTypeMap = {
'front-end-libraries': certTypes.frontEndLibs, 'front-end-libraries': certTypes.frontEndLibs,
'data-visualization': certTypes.dataVis2018, 'data-visualization': certTypes.dataVis2018,
'apis-and-microservices': certTypes.apisMicroservices, 'apis-and-microservices': certTypes.apisMicroservices,
'2020-quality-assurance': certTypes.qa2020, 'quality-assurance-v7': certTypes.qaV7,
'2020-information-security': certTypes.infosec2020, 'information-security-v7': certTypes.infosecV7,
'2020-scientific-computing-with-python': certTypes.sciCompPy2020, 'scientific-computing-with-python-v7': certTypes.sciCompPyV7,
'2020-data-analysis-with-python': certTypes.dataAnalysisPy2020, 'data-analysis-with-python-v7': certTypes.dataAnalysisPyV7,
'2020-machine-learning-with-python': certTypes.machineLearningPy2020 'machine-learning-with-python-v7': certTypes.machineLearningPyV7
}; };
export default superBlockCertTypeMap; export default superBlockCertTypeMap;

View File

@ -142,13 +142,13 @@ function getCompletedCertCount(user) {
'isApisMicroservicesCert', 'isApisMicroservicesCert',
'is2018DataVisCert', 'is2018DataVisCert',
'isFrontEndLibsCert', 'isFrontEndLibsCert',
'is2020QaCert', 'isQaCertV7',
'is2020InfosecCert', 'isInfosecCertV7',
'isJsAlgoDataStructCert', 'isJsAlgoDataStructCert',
'isRespWebDesignCert', 'isRespWebDesignCert',
'is2020SciCompPyCert', 'isSciCompPyCertV7',
'is2020DataAnalysisPyCert', 'isDataAnalysisPyCertV7',
'is2020MachineLearningPyCert' 'isMachineLearningPyCertV7'
].reduce((sum, key) => (user[key] ? sum + 1 : sum), 0); ].reduce((sum, key) => (user[key] ? sum + 1 : sum), 0);
} }

View File

@ -60,13 +60,13 @@ const propTypes = {
isFullStackCert: PropTypes.bool, isFullStackCert: PropTypes.bool,
isHonest: PropTypes.bool, isHonest: PropTypes.bool,
isInfosecQaCert: PropTypes.bool, isInfosecQaCert: PropTypes.bool,
is2020QaCert: PropTypes.bool, isQaCertV7: PropTypes.bool,
is2020InfosecCert: PropTypes.bool, isInfosecCertV7: PropTypes.bool,
isJsAlgoDataStructCert: PropTypes.bool, isJsAlgoDataStructCert: PropTypes.bool,
isRespWebDesignCert: PropTypes.bool, isRespWebDesignCert: PropTypes.bool,
is2020SciCompPyCert: PropTypes.bool, isSciCompPyCertV7: PropTypes.bool,
is2020DataAnalysisPyCert: PropTypes.bool, isDataAnalysisPyCertV7: PropTypes.bool,
is2020MachineLearningPyCert: PropTypes.bool, isMachineLearningPyCertV7: PropTypes.bool,
linkedin: PropTypes.string, linkedin: PropTypes.string,
location: PropTypes.string, location: PropTypes.string,
name: PropTypes.string, name: PropTypes.string,
@ -134,14 +134,14 @@ export function ShowSettings(props) {
isDataVisCert, isDataVisCert,
isFrontEndCert, isFrontEndCert,
isInfosecQaCert, isInfosecQaCert,
is2020QaCert, isQaCertV7,
is2020InfosecCert, isInfosecCertV7,
isFrontEndLibsCert, isFrontEndLibsCert,
isFullStackCert, isFullStackCert,
isRespWebDesignCert, isRespWebDesignCert,
is2020SciCompPyCert, isSciCompPyCertV7,
is2020DataAnalysisPyCert, isDataAnalysisPyCertV7,
is2020MachineLearningPyCert, isMachineLearningPyCertV7,
isEmailVerified, isEmailVerified,
isHonest, isHonest,
sendQuincyEmail, sendQuincyEmail,
@ -241,21 +241,21 @@ export function ShowSettings(props) {
completedChallenges={completedChallenges} completedChallenges={completedChallenges}
createFlashMessage={createFlashMessage} createFlashMessage={createFlashMessage}
is2018DataVisCert={is2018DataVisCert} is2018DataVisCert={is2018DataVisCert}
is2020DataAnalysisPyCert={is2020DataAnalysisPyCert}
is2020InfosecCert={is2020InfosecCert}
is2020MachineLearningPyCert={is2020MachineLearningPyCert}
is2020QaCert={is2020QaCert}
is2020SciCompPyCert={is2020SciCompPyCert}
isApisMicroservicesCert={isApisMicroservicesCert} isApisMicroservicesCert={isApisMicroservicesCert}
isBackEndCert={isBackEndCert} isBackEndCert={isBackEndCert}
isDataAnalysisPyCertV7={isDataAnalysisPyCertV7}
isDataVisCert={isDataVisCert} isDataVisCert={isDataVisCert}
isFrontEndCert={isFrontEndCert} isFrontEndCert={isFrontEndCert}
isFrontEndLibsCert={isFrontEndLibsCert} isFrontEndLibsCert={isFrontEndLibsCert}
isFullStackCert={isFullStackCert} isFullStackCert={isFullStackCert}
isHonest={isHonest} isHonest={isHonest}
isInfosecCertV7={isInfosecCertV7}
isInfosecQaCert={isInfosecQaCert} isInfosecQaCert={isInfosecQaCert}
isJsAlgoDataStructCert={isJsAlgoDataStructCert} isJsAlgoDataStructCert={isJsAlgoDataStructCert}
isMachineLearningPyCertV7={isMachineLearningPyCertV7}
isQaCertV7={isQaCertV7}
isRespWebDesignCert={isRespWebDesignCert} isRespWebDesignCert={isRespWebDesignCert}
isSciCompPyCertV7={isSciCompPyCertV7}
username={username} username={username}
verifyCert={verifyCert} verifyCert={verifyCert}
/> />

View File

@ -45,21 +45,21 @@ const propTypes = {
), ),
createFlashMessage: PropTypes.func.isRequired, createFlashMessage: PropTypes.func.isRequired,
is2018DataVisCert: PropTypes.bool, is2018DataVisCert: PropTypes.bool,
is2020DataAnalysisPyCert: PropTypes.bool,
is2020InfosecCert: PropTypes.bool,
is2020MachineLearningPyCert: PropTypes.bool,
is2020QaCert: PropTypes.bool,
is2020SciCompPyCert: PropTypes.bool,
isApisMicroservicesCert: PropTypes.bool, isApisMicroservicesCert: PropTypes.bool,
isBackEndCert: PropTypes.bool, isBackEndCert: PropTypes.bool,
isDataAnalysisPyCertV7: PropTypes.bool,
isDataVisCert: PropTypes.bool, isDataVisCert: PropTypes.bool,
isFrontEndCert: PropTypes.bool, isFrontEndCert: PropTypes.bool,
isFrontEndLibsCert: PropTypes.bool, isFrontEndLibsCert: PropTypes.bool,
isFullStackCert: PropTypes.bool, isFullStackCert: PropTypes.bool,
isHonest: PropTypes.bool, isHonest: PropTypes.bool,
isInfosecCertV7: PropTypes.bool,
isInfosecQaCert: PropTypes.bool, isInfosecQaCert: PropTypes.bool,
isJsAlgoDataStructCert: PropTypes.bool, isJsAlgoDataStructCert: PropTypes.bool,
isMachineLearningPyCertV7: PropTypes.bool,
isQaCertV7: PropTypes.bool,
isRespWebDesignCert: PropTypes.bool, isRespWebDesignCert: PropTypes.bool,
isSciCompPyCertV7: PropTypes.bool,
updateLegacyCert: PropTypes.func.isRequired, updateLegacyCert: PropTypes.func.isRequired,
username: PropTypes.string, username: PropTypes.string,
verifyCert: PropTypes.func.isRequired verifyCert: PropTypes.func.isRequired
@ -75,14 +75,14 @@ const isCertSelector = ({
isDataVisCert, isDataVisCert,
isFrontEndCert, isFrontEndCert,
isInfosecQaCert, isInfosecQaCert,
is2020QaCert, isQaCertV7,
is2020InfosecCert, isInfosecCertV7,
isFrontEndLibsCert, isFrontEndLibsCert,
isFullStackCert, isFullStackCert,
isRespWebDesignCert, isRespWebDesignCert,
is2020SciCompPyCert, isSciCompPyCertV7,
is2020DataAnalysisPyCert, isDataAnalysisPyCertV7,
is2020MachineLearningPyCert isMachineLearningPyCertV7
}) => ({ }) => ({
is2018DataVisCert, is2018DataVisCert,
isApisMicroservicesCert, isApisMicroservicesCert,
@ -91,14 +91,14 @@ const isCertSelector = ({
isDataVisCert, isDataVisCert,
isFrontEndCert, isFrontEndCert,
isInfosecQaCert, isInfosecQaCert,
is2020QaCert, isQaCertV7,
is2020InfosecCert, isInfosecCertV7,
isFrontEndLibsCert, isFrontEndLibsCert,
isFullStackCert, isFullStackCert,
isRespWebDesignCert, isRespWebDesignCert,
is2020SciCompPyCert, isSciCompPyCertV7,
is2020DataAnalysisPyCert, isDataAnalysisPyCertV7,
is2020MachineLearningPyCert isMachineLearningPyCertV7
}); });
const isCertMapSelector = createSelector( const isCertMapSelector = createSelector(
@ -108,27 +108,27 @@ const isCertMapSelector = createSelector(
isApisMicroservicesCert, isApisMicroservicesCert,
isJsAlgoDataStructCert, isJsAlgoDataStructCert,
isInfosecQaCert, isInfosecQaCert,
is2020QaCert, isQaCertV7,
is2020InfosecCert, isInfosecCertV7,
isFrontEndLibsCert, isFrontEndLibsCert,
isRespWebDesignCert, isRespWebDesignCert,
isDataVisCert, isDataVisCert,
isFrontEndCert, isFrontEndCert,
isBackEndCert, isBackEndCert,
is2020SciCompPyCert, isSciCompPyCertV7,
is2020DataAnalysisPyCert, isDataAnalysisPyCertV7,
is2020MachineLearningPyCert isMachineLearningPyCertV7
}) => ({ }) => ({
'Responsive Web Design': isRespWebDesignCert, 'Responsive Web Design': isRespWebDesignCert,
'JavaScript Algorithms and Data Structures': isJsAlgoDataStructCert, 'JavaScript Algorithms and Data Structures': isJsAlgoDataStructCert,
'Front End Libraries': isFrontEndLibsCert, 'Front End Libraries': isFrontEndLibsCert,
'Data Visualization': is2018DataVisCert, 'Data Visualization': is2018DataVisCert,
'APIs and Microservices': isApisMicroservicesCert, 'APIs and Microservices': isApisMicroservicesCert,
'Quality Assurance': is2020QaCert, 'Quality Assurance': isQaCertV7,
'Information Security': is2020InfosecCert, 'Information Security': isInfosecCertV7,
'Scientific Computing with Python': is2020SciCompPyCert, 'Scientific Computing with Python': isSciCompPyCertV7,
'Data Analysis with Python': is2020DataAnalysisPyCert, 'Data Analysis with Python': isDataAnalysisPyCertV7,
'Machine Learning with Python': is2020MachineLearningPyCert, 'Machine Learning with Python': isMachineLearningPyCertV7,
'Legacy Front End': isFrontEndCert, 'Legacy Front End': isFrontEndCert,
'Legacy Data Visualization': isDataVisCert, 'Legacy Data Visualization': isDataVisCert,
'Legacy Back End': isBackEndCert, 'Legacy Back End': isBackEndCert,

View File

@ -189,13 +189,13 @@ const defaultTestProps = {
isFullStackCert: false, isFullStackCert: false,
isHonest: false, isHonest: false,
isInfosecQaCert: false, isInfosecQaCert: false,
is2020QaCert: false, isQaCertV7: false,
is2020InfosecCert: false, isInfosecCertV7: false,
isJsAlgoDataStructCert: false, isJsAlgoDataStructCert: false,
isRespWebDesignCert: false, isRespWebDesignCert: false,
is2020SciCompPyCert: false, isSciCompPyCertV7: false,
is2020DataAnalysisPyCert: false, isDataAnalysisPyCertV7: false,
is2020MachineLearningPyCert: false, isMachineLearningPyCertV7: false,
updateLegacyCert: () => {}, updateLegacyCert: () => {},
username: 'developmentuser', username: 'developmentuser',
verifyCert: () => {}, verifyCert: () => {},

View File

@ -213,15 +213,15 @@ export const certificatesByNameSelector = username => state => {
isJsAlgoDataStructCert, isJsAlgoDataStructCert,
isApisMicroservicesCert, isApisMicroservicesCert,
isInfosecQaCert, isInfosecQaCert,
is2020QaCert, isQaCertV7,
is2020InfosecCert, isInfosecCertV7,
isFrontEndCert, isFrontEndCert,
isBackEndCert, isBackEndCert,
isDataVisCert, isDataVisCert,
isFullStackCert, isFullStackCert,
is2020SciCompPyCert, isSciCompPyCertV7,
is2020DataAnalysisPyCert, isDataAnalysisPyCertV7,
is2020MachineLearningPyCert isMachineLearningPyCertV7
} = userByNameSelector(username)(state); } = userByNameSelector(username)(state);
return { return {
hasModernCert: hasModernCert:
@ -230,12 +230,12 @@ export const certificatesByNameSelector = username => state => {
isFrontEndLibsCert || isFrontEndLibsCert ||
isJsAlgoDataStructCert || isJsAlgoDataStructCert ||
isApisMicroservicesCert || isApisMicroservicesCert ||
is2020QaCert || isQaCertV7 ||
is2020InfosecCert || isInfosecCertV7 ||
isFullStackCert || isFullStackCert ||
is2020SciCompPyCert || isSciCompPyCertV7 ||
is2020DataAnalysisPyCert || isDataAnalysisPyCertV7 ||
is2020MachineLearningPyCert, isMachineLearningPyCertV7,
hasLegacyCert: hasLegacyCert:
isFrontEndCert || isBackEndCert || isDataVisCert || isInfosecQaCert, isFrontEndCert || isBackEndCert || isDataVisCert || isInfosecQaCert,
isFullStackCert, isFullStackCert,
@ -266,29 +266,29 @@ export const certificatesByNameSelector = username => state => {
showURL: 'apis-and-microservices' showURL: 'apis-and-microservices'
}, },
{ {
show: is2020QaCert, show: isQaCertV7,
title: ' Quality Assurance Certification', title: ' Quality Assurance Certification',
showURL: '2020-quality-assurance' showURL: 'quality-assurance-v7'
}, },
{ {
show: is2020InfosecCert, show: isInfosecCertV7,
title: 'Information Security Certification', title: 'Information Security Certification',
showURL: '2020-information-security' showURL: 'information-security-v7'
}, },
{ {
show: is2020SciCompPyCert, show: isSciCompPyCertV7,
title: 'Scientific Computing with Python Certification', title: 'Scientific Computing with Python Certification',
showURL: '2020-scientific-computing-with-python' showURL: 'scientific-computing-with-python-v7'
}, },
{ {
show: is2020DataAnalysisPyCert, show: isDataAnalysisPyCertV7,
title: 'Data Analysis with Python Certification', title: 'Data Analysis with Python Certification',
showURL: '2020-data-analysis-with-python' showURL: 'data-analysis-with-python-v7'
}, },
{ {
show: is2020MachineLearningPyCert, show: isMachineLearningPyCertV7,
title: 'Machine Learning with Python Certification', title: 'Machine Learning with Python Certification',
showURL: '2020-machine-learning-with-python' showURL: 'machine-learning-with-python-v7'
} }
], ],
legacyCerts: [ legacyCerts: [

View File

@ -469,190 +469,190 @@ const certMap = [
{ {
id: '5e611829481575a52dc59c0e', id: '5e611829481575a52dc59c0e',
title: 'Quality Assurance', title: 'Quality Assurance',
slug: '2020-quality-assurance', slug: 'quality-assurance-v7',
flag: 'is2020QaCert', flag: 'isQaCertV7',
projects: [ projects: [
{ {
id: '587d8249367417b2b2512c41', id: '587d8249367417b2b2512c41',
title: 'Metric-Imperial Converter', title: 'Metric-Imperial Converter',
link: `${qaBase}/metric-imperial-converter`, link: `${qaBase}/metric-imperial-converter`,
superBlock: '2020-quality-assurance' superBlock: 'quality-assurance-v7'
}, },
{ {
id: '587d8249367417b2b2512c42', id: '587d8249367417b2b2512c42',
title: 'Issue Tracker', title: 'Issue Tracker',
link: `${qaBase}/issue-tracker`, link: `${qaBase}/issue-tracker`,
superBlock: '2020-quality-assurance' superBlock: 'quality-assurance-v7'
}, },
{ {
id: '587d824a367417b2b2512c43', id: '587d824a367417b2b2512c43',
title: 'Personal Library', title: 'Personal Library',
link: `${qaBase}/personal-library`, link: `${qaBase}/personal-library`,
superBlock: '2020-quality-assurance' superBlock: 'quality-assurance-v7'
}, },
{ {
id: '5e601bf95ac9d0ecd8b94afd', id: '5e601bf95ac9d0ecd8b94afd',
title: 'Sudoku Solver', title: 'Sudoku Solver',
link: `${qaBase}/sudoku-solver`, link: `${qaBase}/sudoku-solver`,
superBlock: '2020-quality-assurance' superBlock: 'quality-assurance-v7'
}, },
{ {
id: '5e601c0d5ac9d0ecd8b94afe', id: '5e601c0d5ac9d0ecd8b94afe',
title: 'American British Translator', title: 'American British Translator',
link: `${qaBase}/american-british-translator`, link: `${qaBase}/american-british-translator`,
superBlock: '2020-quality-assurance' superBlock: 'quality-assurance-v7'
} }
] ]
}, },
{ {
id: '5e6021435ac9d0ecd8b94b00', id: '5e6021435ac9d0ecd8b94b00',
title: 'Information Security', title: 'Information Security',
slug: '2020-information-security', slug: 'information-security-v7',
flag: 'is2020InfosecCert', flag: 'isInfosecCertV7',
projects: [ projects: [
{ {
id: '587d824a367417b2b2512c44', id: '587d824a367417b2b2512c44',
title: 'Stock Price Checker', title: 'Stock Price Checker',
link: `${infoSecBase}/stock-price-checker`, link: `${infoSecBase}/stock-price-checker`,
superBlock: '2020-information-security' superBlock: 'information-security-v7'
}, },
{ {
id: '587d824a367417b2b2512c45', id: '587d824a367417b2b2512c45',
title: 'Anonymous Message Board', title: 'Anonymous Message Board',
link: `${infoSecBase}/anonymous-message-board`, link: `${infoSecBase}/anonymous-message-board`,
superBlock: '2020-information-security' superBlock: 'information-security-v7'
}, },
{ {
id: '5e46f979ac417301a38fb932', id: '5e46f979ac417301a38fb932',
title: 'Port Scanner', title: 'Port Scanner',
link: `${infoSecBase}/port-scanner`, link: `${infoSecBase}/port-scanner`,
superBlock: '2020-information-security' superBlock: 'information-security-v7'
}, },
{ {
id: '5e46f983ac417301a38fb933', id: '5e46f983ac417301a38fb933',
title: 'SHA-1 Password Cracker', title: 'SHA-1 Password Cracker',
link: `${infoSecBase}/sha-1-password-cracker`, link: `${infoSecBase}/sha-1-password-cracker`,
superBlock: '2020-information-security' superBlock: 'information-security-v7'
}, },
{ {
id: '5e601c775ac9d0ecd8b94aff', id: '5e601c775ac9d0ecd8b94aff',
title: 'Secure Real Time Multiplayer Game', title: 'Secure Real Time Multiplayer Game',
link: `${infoSecBase}/secure-real-time-multiplayer-game`, link: `${infoSecBase}/secure-real-time-multiplayer-game`,
superBlock: '2020-information-security' superBlock: 'information-security-v7'
} }
] ]
}, },
{ {
id: '5e44431b903586ffb414c951', id: '5e44431b903586ffb414c951',
title: 'Scientific Computing with Python', title: 'Scientific Computing with Python',
slug: '2020-scientific-computing-with-python', slug: 'scientific-computing-with-python-v7',
flag: 'is2020SciCompPyCert', flag: 'isSciCompPyCertV7',
projects: [ projects: [
{ {
id: '5e44412c903586ffb414c94c', id: '5e44412c903586ffb414c94c',
title: 'Arithmetic Formatter', title: 'Arithmetic Formatter',
link: `${sciCompPyBase}/arithmetic-formatter`, link: `${sciCompPyBase}/arithmetic-formatter`,
superBlock: '2020-scientific-computing-with-python' superBlock: 'scientific-computing-with-python-v7'
}, },
{ {
id: '5e444136903586ffb414c94d', id: '5e444136903586ffb414c94d',
title: 'Time Calculator', title: 'Time Calculator',
link: `${sciCompPyBase}/time-calculator`, link: `${sciCompPyBase}/time-calculator`,
superBlock: '2020-scientific-computing-with-python' superBlock: 'scientific-computing-with-python-v7'
}, },
{ {
id: '5e44413e903586ffb414c94e', id: '5e44413e903586ffb414c94e',
title: 'Budget App', title: 'Budget App',
link: `${sciCompPyBase}/budget-app`, link: `${sciCompPyBase}/budget-app`,
superBlock: '2020-scientific-computing-with-python' superBlock: 'scientific-computing-with-python-v7'
}, },
{ {
id: '5e444147903586ffb414c94f', id: '5e444147903586ffb414c94f',
title: 'Polygon Area Calculator', title: 'Polygon Area Calculator',
link: `${sciCompPyBase}/polygon-area-calculator`, link: `${sciCompPyBase}/polygon-area-calculator`,
superBlock: '2020-scientific-computing-with-python' superBlock: 'scientific-computing-with-python-v7'
}, },
{ {
id: '5e44414f903586ffb414c950', id: '5e44414f903586ffb414c950',
title: 'Probability Calculator', title: 'Probability Calculator',
link: `${sciCompPyBase}/probability-calculator`, link: `${sciCompPyBase}/probability-calculator`,
superBlock: '2020-scientific-computing-with-python' superBlock: 'scientific-computing-with-python-v7'
} }
] ]
}, },
{ {
id: '5e46fc95ac417301a38fb934', id: '5e46fc95ac417301a38fb934',
title: 'Data Analysis with Python', title: 'Data Analysis with Python',
slug: '2020-data-analysis-with-python', slug: 'data-analysis-with-python-v7',
flag: 'is2020DataAnalysisPyCert', flag: 'isDataAnalysisPyCertV7',
projects: [ projects: [
{ {
id: '5e46f7e5ac417301a38fb928', id: '5e46f7e5ac417301a38fb928',
title: 'Mean-Variance-Standard Deviation Calculator', title: 'Mean-Variance-Standard Deviation Calculator',
link: `${dataAnalysisPyBase}/mean-variance-standard-deviation-calculator`, link: `${dataAnalysisPyBase}/mean-variance-standard-deviation-calculator`,
superBlock: '2020-data-analysis-with-python' superBlock: 'data-analysis-with-python-v7'
}, },
{ {
id: '5e46f7e5ac417301a38fb929', id: '5e46f7e5ac417301a38fb929',
title: 'Demographic Data Analyzer', title: 'Demographic Data Analyzer',
link: `${dataAnalysisPyBase}/demographic-data-analyzer`, link: `${dataAnalysisPyBase}/demographic-data-analyzer`,
superBlock: '2020-data-analysis-with-python' superBlock: 'data-analysis-with-python-v7'
}, },
{ {
id: '5e46f7f8ac417301a38fb92a', id: '5e46f7f8ac417301a38fb92a',
title: 'Medical Data Visualizer', title: 'Medical Data Visualizer',
link: `${dataAnalysisPyBase}/medical-data-visualizer`, link: `${dataAnalysisPyBase}/medical-data-visualizer`,
superBlock: '2020-data-analysis-with-python' superBlock: 'data-analysis-with-python-v7'
}, },
{ {
id: '5e46f802ac417301a38fb92b', id: '5e46f802ac417301a38fb92b',
title: 'Page View Time Series Visualizer', title: 'Page View Time Series Visualizer',
link: `${dataAnalysisPyBase}/page-view-time-series-visualizer`, link: `${dataAnalysisPyBase}/page-view-time-series-visualizer`,
superBlock: '2020-data-analysis-with-python' superBlock: 'data-analysis-with-python-v7'
}, },
{ {
id: '5e4f5c4b570f7e3a4949899f', id: '5e4f5c4b570f7e3a4949899f',
title: 'Sea Level Predictor', title: 'Sea Level Predictor',
link: `${dataAnalysisPyBase}/sea-level-predictor`, link: `${dataAnalysisPyBase}/sea-level-predictor`,
superBlock: '2020-scientific-computing-with-python' superBlock: 'data-analysis-with-python-v7'
} }
] ]
}, },
{ {
id: '5e46fc95ac417301a38fb935', id: '5e46fc95ac417301a38fb935',
title: 'Machine Learning with Python', title: 'Machine Learning with Python',
slug: '2020-machine-learning-with-python', slug: 'machine-learning-with-python-v7',
flag: 'is2020MachineLearningPyCert', flag: 'isMachineLearningPyCertV7',
projects: [ projects: [
{ {
id: '5e46f8d6ac417301a38fb92d', id: '5e46f8d6ac417301a38fb92d',
title: 'Rock Paper Scissors', title: 'Rock Paper Scissors',
link: `${machineLearningPyBase}/rock-paper-scissors`, link: `${machineLearningPyBase}/rock-paper-scissors`,
superBlock: '2020-machine-learning-with-python' superBlock: 'machine-learning-with-python-v7'
}, },
{ {
id: '5e46f8dcac417301a38fb92e', id: '5e46f8dcac417301a38fb92e',
title: 'Cat and Dog Image Classifier', title: 'Cat and Dog Image Classifier',
link: `${machineLearningPyBase}/cat-and-dog-image-classifier`, link: `${machineLearningPyBase}/cat-and-dog-image-classifier`,
superBlock: '2020-machine-learning-with-python' superBlock: 'machine-learning-with-python-v7'
}, },
{ {
id: '5e46f8e3ac417301a38fb92f', id: '5e46f8e3ac417301a38fb92f',
title: 'Book Recommendation Engine using KNN', title: 'Book Recommendation Engine using KNN',
link: `${machineLearningPyBase}/book-recommendation-engine-using-knn`, link: `${machineLearningPyBase}/book-recommendation-engine-using-knn`,
superBlock: '2020-machine-learning-with-python' superBlock: 'machine-learning-with-python-v7'
}, },
{ {
id: '5e46f8edac417301a38fb930', id: '5e46f8edac417301a38fb930',
title: 'Linear Regression Health Costs Calculator', title: 'Linear Regression Health Costs Calculator',
link: `${machineLearningPyBase}/linear-regression-health-costs-calculator`, link: `${machineLearningPyBase}/linear-regression-health-costs-calculator`,
superBlock: '2020-machine-learning-with-python' superBlock: 'machine-learning-with-python-v7'
}, },
{ {
id: '5e46f8edac417301a38fb931', id: '5e46f8edac417301a38fb931',
title: 'Neural Network SMS Text Classifier', title: 'Neural Network SMS Text Classifier',
link: `${machineLearningPyBase}/neural-network-sms-text-classifier`, link: `${machineLearningPyBase}/neural-network-sms-text-classifier`,
superBlock: '2020-machine-learning-with-python' superBlock: 'machine-learning-with-python-v7'
} }
] ]
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "Data Analysis with Python Certificate", "name": "Data Analysis with Python Certificate",
"dashedName": "2020-data-analysis-with-python-certificate", "dashedName": "data-analysis-with-python-v7-certificate",
"order": 8, "order": 8,
"time": "", "time": "",
"template": "", "template": "",
@ -14,5 +14,5 @@
] ]
], ],
"isPrivate": true, "isPrivate": true,
"fileName": "12-certificates/2020-data-analysis-with-python-certificate.json" "fileName": "12-certificates/data-analysis-with-python-v7-certificate.json"
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "Information Security Certificate", "name": "Information Security Certificate",
"dashedName": "2020-information-security-certificate", "dashedName": "information-security-v7-certificate",
"order": 9, "order": 9,
"time": "", "time": "",
"template": "", "template": "",
@ -14,5 +14,5 @@
] ]
], ],
"isPrivate": true, "isPrivate": true,
"fileName": "12-certificates/2020-information-security-certificate.json" "fileName": "12-certificates/information-security-v7-certificate.json"
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "Machine Learning with Python Certificate", "name": "Machine Learning with Python Certificate",
"dashedName": "2020-machine-learning-with-python-certificate", "dashedName": "machine-learning-with-python-v7-certificate",
"order": 10, "order": 10,
"time": "", "time": "",
"template": "", "template": "",
@ -14,5 +14,5 @@
] ]
], ],
"isPrivate": true, "isPrivate": true,
"fileName": "12-certificates/2020-machine-learning-with-python-certificate.json" "fileName": "12-certificates/machine-learning-with-python-v7-certificate.json"
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "Quality Assurance Certificate", "name": "Quality Assurance Certificate",
"dashedName": "2020-quality-assurance-certificate", "dashedName": "quality-assurance-v7-certificate",
"order": 6, "order": 6,
"time": "", "time": "",
"template": "", "template": "",
@ -14,5 +14,5 @@
] ]
], ],
"isPrivate": true, "isPrivate": true,
"fileName": "12-certificates/2020-quality-assurance-certificate.json" "fileName": "12-certificates/quality-assurance-v7-certificate.json"
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "Scientific Computing with Python Certificate", "name": "Scientific Computing with Python Certificate",
"dashedName": "2020-scientific-computing-with-python-certificate", "dashedName": "scientific-computing-with-python-v7-certificate",
"order": 7, "order": 7,
"time": "", "time": "",
"template": "", "template": "",
@ -14,5 +14,5 @@
] ]
], ],
"isPrivate": true, "isPrivate": true,
"fileName": "12-certificates/2020-scientific-computing-with-python-certificate.json" "fileName": "12-certificates/scientific-computing-with-python-v7-certificate.json"
} }

View File

@ -1,6 +1,6 @@
--- ---
id: 5e6021435ac9d0ecd8b94b00 id: 5e6021435ac9d0ecd8b94b00
title: 'Information Security Certificate' title: Information Security Certificate
challengeType: 7 challengeType: 7
isHidden: true isHidden: true
isPrivate: true isPrivate: true

View File

@ -1,6 +1,6 @@
--- ---
id: 5e611829481575a52dc59c0e id: 5e611829481575a52dc59c0e
title: 'Quality Assurance Certificate' title: Quality Assurance Certificate
challengeType: 7 challengeType: 7
isHidden: true isHidden: true
isPrivate: true isPrivate: true

View File

@ -63,12 +63,12 @@ MongoClient.connect(MONGOHQ_URL, { useNewUrlParser: true }, function(
isJsAlgoDataStructCert: false, isJsAlgoDataStructCert: false,
isApisMicroservicesCert: false, isApisMicroservicesCert: false,
isInfosecQaCert: false, isInfosecQaCert: false,
is2020QaCert: false, isQaCertV7: false,
is2020InfosecCert: false, isInfosecCertV7: false,
is2018FullStackCert: false, is2018FullStackCert: false,
is2020SciCompPyCert: false, isSciCompPyCertV7: false,
is2020DataAnalysisPyCert: false, isDataAnalysisPyCertV7: false,
is2020MachineLearningPyCert: false, isMachineLearningPyCertV7: false,
completedChallenges: [], completedChallenges: [],
portfolio: [], portfolio: [],
yearsTopContributor: [], yearsTopContributor: [],

View File

@ -29,11 +29,11 @@ const specialPaths = {
'Legacy Full Stack': 'Full Stack', 'Legacy Full Stack': 'Full Stack',
'Legacy Information Security and Quality Assurance': 'Legacy Information Security and Quality Assurance':
'Information Security and Quality Assurance', 'Information Security and Quality Assurance',
'Scientific Computing with Python': '2020 Scientific Computing with Python', 'Scientific Computing with Python': 'Scientific Computing with Python V7',
'Data Analysis with Python': '2020 Data Analysis with Python', 'Data Analysis with Python': 'Data Analysis with Python V7',
'Machine Learning with Python': '2020 Machine Learning with Python', 'Machine Learning with Python': 'Machine Learning with Python V7',
'Quality Assurance': '2020 Quality Assurance', 'Quality Assurance': 'Quality Assurance V7',
'Information Security': '2020 Information Security' 'Information Security': 'Information Security V7'
}; };
for (const [id, title] of idToTitle) { for (const [id, title] of idToTitle) {