feat(api,client): add rwd and js v9 certs (#62458)

This commit is contained in:
Shaun Hamilton
2025-10-15 18:06:42 +02:00
committed by GitHub
parent c2d5d8c974
commit ca02bcb7ee
26 changed files with 110 additions and 19 deletions

View File

@@ -119,12 +119,14 @@ model user {
isHonest Boolean?
isInfosecCertV7 Boolean? // Undefined
isInfosecQaCert Boolean? // Undefined
isJavascriptCertV9 Boolean? // Undefined
isJsAlgoDataStructCert Boolean? // Undefined
isJsAlgoDataStructCertV8 Boolean? // Undefined
isMachineLearningPyCertV7 Boolean? // Undefined
isQaCertV7 Boolean? // Undefined
isRelationalDatabaseCertV8 Boolean? // Undefined
isRespWebDesignCert Boolean? // Undefined
isRespWebDesignCertV9 Boolean? // Undefined
isSciCompPyCertV7 Boolean? // Undefined
is2018DataVisCert Boolean? // Undefined
is2018FullStackCert Boolean? // Undefined
@@ -166,8 +168,8 @@ model user {
isClassroomAccount Boolean? // Undefined
// Relations
examAttempts ExamEnvironmentExamAttempt[]
examEnvironmentAuthorizationToken ExamEnvironmentAuthorizationToken?
examAttempts ExamEnvironmentExamAttempt[]
examEnvironmentAuthorizationToken ExamEnvironmentAuthorizationToken?
}
// -----------------------------------

View File

@@ -43,6 +43,7 @@ export const newUser = (email: string) => ({
isHonest: false,
isInfosecCertV7: false,
isInfosecQaCert: false,
isJavascriptCertV9: false,
isJsAlgoDataStructCert: false,
isJsAlgoDataStructCertV8: false,
isMachineLearningPyCertV7: false,
@@ -50,6 +51,7 @@ export const newUser = (email: string) => ({
isRelationalDatabaseCertV8: false,
isCollegeAlgebraPyCertV8: false,
isRespWebDesignCert: false,
isRespWebDesignCertV9: false,
isSciCompPyCertV7: false,
keyboardShortcuts: false,
linkedin: null,

View File

@@ -18,6 +18,7 @@ const nullableFlags = [
'isFrontEndCert',
'isFullStackCert',
'isFrontEndLibsCert',
'isJavascriptCertV9',
'isHonest',
'isInfosecCertV7',
'isInfosecQaCert',
@@ -27,6 +28,7 @@ const nullableFlags = [
'isQaCertV7',
'isRelationalDatabaseCertV8',
'isRespWebDesignCert',
'isRespWebDesignCertV9',
'isSciCompPyCertV7',
'isDataAnalysisPyCertV7',
// isUpcomingPythonCertV8 exists in the db, but is not returned by the api-server

View File

@@ -293,6 +293,8 @@ describe('certificate routes', () => {
},
isCertMap: {
isRespWebDesignCert: true,
isRespWebDesignCertV9: false,
isJavascriptCertV9: false,
isJsAlgoDataStructCert: false,
isFrontEndLibsCert: false,
is2018DataVisCert: false,
@@ -354,6 +356,9 @@ describe('certificate routes', () => {
test('should return 400 if certSlug is not allowed', async () => {
const claimableCerts = [
Certification.RespWebDesign,
// TODO: Enable, once these are no longer "upcoming".
// Certification.RespWebDesignV9,
// Certification.JsV9,
Certification.JsAlgoDataStruct,
Certification.FrontEndDevLibs,
Certification.DataVis,

View File

@@ -28,6 +28,7 @@ const {
legacyFullStackId,
respWebDesignId,
frontEndDevLibsId,
javascriptV9Id,
jsAlgoDataStructId,
jsAlgoDataStructV8Id,
dataVis2018Id,
@@ -38,6 +39,7 @@ const {
dataAnalysisPyV7Id,
machineLearningPyV7Id,
relationalDatabaseV8Id,
respWebDesignV9Id,
collegeAlgebraPyV8Id,
foundationalCSharpV8Id
} = certIds;
@@ -156,7 +158,9 @@ function createCertTypeIds(challenges: ReturnType<typeof getChallenges>) {
[certTypes.foundationalCSharpV8]: getCertById(
foundationalCSharpV8Id,
challenges
)
),
[certTypes.javascriptV9]: getCertById(javascriptV9Id, challenges),
[certTypes.respWebDesignV9]: getCertById(respWebDesignV9Id, challenges)
// upcoming
};
@@ -182,6 +186,8 @@ interface CertI {
isRelationalDatabaseCertV8?: boolean;
isCollegeAlgebraPyCertV8?: boolean;
isFoundationalCSharpCertV8?: boolean;
isJavascriptCertV9?: boolean;
isRespWebDesignCertV9?: boolean;
}
function getUserIsCertMap(user: CertI) {
@@ -204,7 +210,9 @@ function getUserIsCertMap(user: CertI) {
isMachineLearningPyCertV7 = false,
isRelationalDatabaseCertV8 = false,
isCollegeAlgebraPyCertV8 = false,
isFoundationalCSharpCertV8 = false
isFoundationalCSharpCertV8 = false,
isJavascriptCertV9 = false,
isRespWebDesignCertV9 = false
} = user;
return {
@@ -226,7 +234,9 @@ function getUserIsCertMap(user: CertI) {
isMachineLearningPyCertV7,
isRelationalDatabaseCertV8,
isCollegeAlgebraPyCertV8,
isFoundationalCSharpCertV8
isFoundationalCSharpCertV8,
isJavascriptCertV9,
isRespWebDesignCertV9
};
}
@@ -390,7 +400,9 @@ export const protectedCertificateRoutes: FastifyPluginCallbackTypebox = (
isQaCertV7: true,
isRelationalDatabaseCertV8: true,
isRespWebDesignCert: true,
isSciCompPyCertV7: true
isSciCompPyCertV7: true,
isJavascriptCertV9: true,
isRespWebDesignCertV9: true
}
});

View File

@@ -288,12 +288,14 @@ const publicUserData = {
isHonest: testUserData.isHonest,
isInfosecCertV7: testUserData.isInfosecCertV7,
isInfosecQaCert: testUserData.isInfosecQaCert,
isJavascriptCertV9: testUserData.isJavascriptCertV9,
isJsAlgoDataStructCert: testUserData.isJsAlgoDataStructCert,
isJsAlgoDataStructCertV8: testUserData.isJsAlgoDataStructCertV8,
isMachineLearningPyCertV7: testUserData.isMachineLearningPyCertV7,
isQaCertV7: testUserData.isQaCertV7,
isRelationalDatabaseCertV8: testUserData.isRelationalDatabaseCertV8,
isRespWebDesignCert: testUserData.isRespWebDesignCert,
isRespWebDesignCertV9: testUserData.isRespWebDesignCertV9,
isSciCompPyCertV7: testUserData.isSciCompPyCertV7,
linkedin: testUserData.linkedin,
location: testUserData.location,
@@ -337,10 +339,12 @@ const baseProgressData = {
isBackEndCert: false,
isDataVisCert: false,
isFullStackCert: false,
isJavascriptCertV9: false,
isSciCompPyCertV7: false,
isDataAnalysisPyCertV7: false,
isMachineLearningPyCertV7: false,
isRelationalDatabaseCertV8: false,
isRespWebDesignCertV9: false,
isCollegeAlgebraPyCertV8: false,
completedChallenges: [],
completedDailyCodingChallenges: [],
@@ -1004,6 +1008,7 @@ describe('userRoutes', () => {
isFrontEndCert: false,
isFrontEndLibsCert: false,
isFullStackCert: false,
isJavascriptCertV9: false,
isHonest: false,
isInfosecCertV7: false,
isInfosecQaCert: false,
@@ -1013,6 +1018,7 @@ describe('userRoutes', () => {
isQaCertV7: false,
isRelationalDatabaseCertV8: false,
isRespWebDesignCert: false,
isRespWebDesignCertV9: false,
isSciCompPyCertV7: false,
keyboardShortcuts: false,
location: '',

View File

@@ -681,12 +681,14 @@ export const userGetRoutes: FastifyPluginCallbackTypebox = (
isHonest: true,
isInfosecCertV7: true,
isInfosecQaCert: true,
isJavascriptCertV9: true,
isJsAlgoDataStructCert: true,
isJsAlgoDataStructCertV8: true,
isMachineLearningPyCertV7: true,
isQaCertV7: true,
isRelationalDatabaseCertV8: true,
isRespWebDesignCert: true,
isRespWebDesignCertV9: true,
isSciCompPyCertV7: true,
keyboardShortcuts: true,
linkedin: true,

View File

@@ -64,7 +64,9 @@ export const unprotectedCertificateRoutes: FastifyPluginCallbackTypebox = (
isBackEndCert: true,
isFullStackCert: true,
isRespWebDesignCert: true,
isRespWebDesignCertV9: true,
isFrontEndLibsCert: true,
isJavascriptCertV9: true,
isJsAlgoDataStructCert: true,
isJsAlgoDataStructCertV8: true,
isDataVisCert: true,

View File

@@ -198,6 +198,7 @@ const publicUserData = {
isFrontEndCert: testUserData.isFrontEndCert,
isFrontEndLibsCert: testUserData.isFrontEndLibsCert,
isFullStackCert: testUserData.isFullStackCert,
isJavascriptCertV9: testUserData.isJavascriptCertV9,
isHonest: testUserData.isHonest,
isInfosecCertV7: testUserData.isInfosecCertV7,
isInfosecQaCert: testUserData.isInfosecQaCert,
@@ -207,6 +208,7 @@ const publicUserData = {
isQaCertV7: testUserData.isQaCertV7,
isRelationalDatabaseCertV8: testUserData.isRelationalDatabaseCertV8,
isRespWebDesignCert: testUserData.isRespWebDesignCert,
isRespWebDesignCertV9: testUserData.isRespWebDesignCertV9,
isSciCompPyCertV7: testUserData.isSciCompPyCertV7,
linkedin: testUserData.linkedin,
location: testUserData.location,

View File

@@ -7,6 +7,8 @@ export const genericError = Type.Object({
export const isCertMap = Type.Object({
isRespWebDesignCert: Type.Boolean(),
isRespWebDesignCertV9: Type.Boolean(),
isJavascriptCertV9: Type.Boolean(),
isJsAlgoDataStructCert: Type.Boolean(),
isFrontEndLibsCert: Type.Boolean(),
is2018DataVisCert: Type.Boolean(),

View File

@@ -79,6 +79,7 @@ export const getSessionUser = {
isFrontEndCert: Type.Boolean(),
isFrontEndLibsCert: Type.Boolean(),
isFullStackCert: Type.Boolean(),
isJavascriptCertV9: Type.Boolean(),
isHonest: Type.Boolean(),
isInfosecCertV7: Type.Boolean(),
isInfosecQaCert: Type.Boolean(),
@@ -88,6 +89,7 @@ export const getSessionUser = {
isQaCertV7: Type.Boolean(),
isRelationalDatabaseCertV8: Type.Boolean(),
isRespWebDesignCert: Type.Boolean(),
isRespWebDesignCertV9: Type.Boolean(),
isSciCompPyCertV7: Type.Boolean(),
keyboardShortcuts: Type.Boolean(),
linkedin: Type.Optional(Type.String()),

View File

@@ -64,6 +64,7 @@ export const getPublicProfile = {
isFrontEndCert: Type.Boolean(),
isFrontEndLibsCert: Type.Boolean(),
isFullStackCert: Type.Boolean(),
isJavascriptCertV9: Type.Boolean(),
isHonest: Type.Boolean(),
isInfosecCertV7: Type.Boolean(),
isInfosecQaCert: Type.Boolean(),
@@ -73,6 +74,7 @@ export const getPublicProfile = {
isQaCertV7: Type.Boolean(),
isRelationalDatabaseCertV8: Type.Boolean(),
isRespWebDesignCert: Type.Boolean(),
isRespWebDesignCertV9: Type.Boolean(),
isSciCompPyCertV7: Type.Boolean(),
linkedin: Type.Optional(Type.String()),
location: Type.String(),

View File

@@ -27,12 +27,14 @@ export const createResetProperties = () => ({
isFullStackCert: false,
isInfosecCertV7: false,
isInfosecQaCert: false,
isJavascriptCertV9: false,
isJsAlgoDataStructCert: false,
isJsAlgoDataStructCertV8: false,
isMachineLearningPyCertV7: false,
isQaCertV7: false,
isRelationalDatabaseCertV8: false,
isRespWebDesignCert: false,
isRespWebDesignCertV9: false,
isSciCompPyCertV7: false,
needsModeration: false,
partiallyCompletedChallenges: [], // TODO(Post-MVP): Omit this from the document? (prisma will always return [])

View File

@@ -827,7 +827,7 @@ const allStandardCerts = [
{
id: '68db37350b398ecddd1f5dac',
title: 'Responsive Web Design Certification Exam',
link: `${respWebV9Base}/responsive-web-design-certification-exam/exam-responsive-web-design-certification`,
link: `${respWebV9Base}/exam-responsive-web-design-certification/exam-responsive-web-design-certification`,
certSlug: Certification.RespWebDesignV9
}
]
@@ -838,7 +838,7 @@ const allStandardCerts = [
certSlug: Certification.JsV9,
projects: [
{
id: '645147516c245de4d11eb7ba',
id: '68c462d7dc707f3ca82f8e6d',
title: 'JavaScript Certification Exam',
link: `${jsV9Base}/exam-javascript-certification/exam-javascript-certification`,
certSlug: Certification.JsV9

View File

@@ -1103,6 +1103,7 @@
"heading": "As part of this certification, {{user}} built the following projects and got all automated test suites to pass:",
"solution": "Solution",
"no-solution": "error displaying solution, email support@freeCodeCamp.org to get help.",
"no-solution-to-display": "No solution to display",
"source": "Source",
"footnote": "If you suspect that any of these projects violate the <2>academic honesty policy</2>, please <5>report this to our team</5>.",
"title": {

View File

@@ -123,6 +123,7 @@ export function ShowSettings(props: ShowSettingsProps): JSX.Element {
email,
is2018DataVisCert,
isApisMicroservicesCert,
isJavascriptCertV9,
isJsAlgoDataStructCert,
isBackEndCert,
isDataVisCert,
@@ -133,6 +134,7 @@ export function ShowSettings(props: ShowSettingsProps): JSX.Element {
isFrontEndLibsCert,
isFullStackCert,
isRespWebDesignCert,
isRespWebDesignCertV9,
isSciCompPyCertV7,
isDataAnalysisPyCertV7,
isMachineLearningPyCertV7,
@@ -197,6 +199,7 @@ export function ShowSettings(props: ShowSettingsProps): JSX.Element {
isFrontEndCert={isFrontEndCert}
isFrontEndLibsCert={isFrontEndLibsCert}
isFullStackCert={isFullStackCert}
isJavascriptCertV9={isJavascriptCertV9}
isHonest={isHonest}
isInfosecCertV7={isInfosecCertV7}
isInfosecQaCert={isInfosecQaCert}
@@ -205,6 +208,7 @@ export function ShowSettings(props: ShowSettingsProps): JSX.Element {
isQaCertV7={isQaCertV7}
isRelationalDatabaseCertV8={isRelationalDatabaseCertV8}
isRespWebDesignCert={isRespWebDesignCert}
isRespWebDesignCertV9={isRespWebDesignCertV9}
isSciCompPyCertV7={isSciCompPyCertV7}
isJsAlgoDataStructCertV8={isJsAlgoDataStructCertV8}
username={username}

View File

@@ -4,8 +4,10 @@ import { User } from '../../../../redux/prop-types';
export const getCertifications = (user: User) => {
const {
isRespWebDesignCert,
isRespWebDesignCertV9,
is2018DataVisCert,
isFrontEndLibsCert,
isJavascriptCertV9,
isJsAlgoDataStructCert,
isApisMicroservicesCert,
isInfosecQaCert,
@@ -27,6 +29,7 @@ export const getCertifications = (user: User) => {
return {
hasModernCert:
isRespWebDesignCert ||
isRespWebDesignCertV9 ||
is2018DataVisCert ||
isFrontEndLibsCert ||
isApisMicroservicesCert ||
@@ -39,6 +42,7 @@ export const getCertifications = (user: User) => {
isRelationalDatabaseCertV8 ||
isCollegeAlgebraPyCertV8 ||
isFoundationalCSharpCertV8 ||
isJavascriptCertV9 ||
isJsAlgoDataStructCertV8,
hasLegacyCert:
isFrontEndCert ||
@@ -53,6 +57,16 @@ export const getCertifications = (user: User) => {
title: 'Responsive Web Design Certification',
certSlug: Certification.RespWebDesign
},
{
show: isRespWebDesignCertV9,
title: 'Responsive Web Design Certification',
certSlug: Certification.RespWebDesignV9
},
{
show: isJavascriptCertV9,
title: 'JavaScript Certification',
certSlug: Certification.JsV9
},
{
show: isJsAlgoDataStructCertV8,
title: 'JavaScript Algorithms and Data Structures Certification',

View File

@@ -64,8 +64,10 @@ const userProps = {
isInfosecQaCert: true,
isQaCertV7: true,
isInfosecCertV7: true,
isJavascriptCertV9: true,
isJsAlgoDataStructCert: true,
isRespWebDesignCert: true,
isRespWebDesignCertV9: true,
isSciCompPyCertV7: true,
isDataAnalysisPyCertV7: true,
isMachineLearningPyCertV7: true,

View File

@@ -272,9 +272,11 @@ const defaultTestProps = {
isInfosecQaCert: false,
isQaCertV7: false,
isInfosecCertV7: false,
isJavascriptCertV9: false,
isJsAlgoDataStructCert: false,
isJsAlgoDataStructCertV8: false,
isRespWebDesignCert: false,
isRespWebDesignCertV9: false,
isSciCompPyCertV7: false,
isDataAnalysisPyCertV7: false,
isMachineLearningPyCertV7: false,

View File

@@ -48,12 +48,14 @@ const mapDispatchToProps = {
const createCertifiedMap = ({
is2018DataVisCert,
isApisMicroservicesCert,
isJavascriptCertV9,
isJsAlgoDataStructCert,
isInfosecQaCert,
isQaCertV7,
isInfosecCertV7,
isFrontEndLibsCert,
isRespWebDesignCert,
isRespWebDesignCertV9,
isDataVisCert,
isFrontEndCert,
isBackEndCert,
@@ -89,8 +91,8 @@ const createCertifiedMap = ({
// be rendered. The new FullStackDeveloper certification is a normal
// certification with projects.
[Certification.FullStackDeveloper]: false,
[Certification.RespWebDesignV9]: false,
[Certification.JsV9]: false,
[Certification.RespWebDesignV9]: isRespWebDesignCertV9,
[Certification.JsV9]: isJavascriptCertV9,
[Certification.FrontEndDevLibsV9]: false,
[Certification.PythonV9]: false,
[Certification.RelationalDbV9]: false,

View File

@@ -194,6 +194,10 @@ export function SolutionDisplayWidget({
<>{t('certification.project.no-solution')}</>
) : null;
const NoSolutionToDisplay = (
<> {t('certification.project.no-solution-to-display')} </>
);
const displayComponents =
displayContext === 'certification'
? {
@@ -202,7 +206,8 @@ export function SolutionDisplayWidget({
showProjectAndGithubLinks: ShowProjectAndGithubLinkForCertification,
showProjectLink: ShowProjectLinkForCertification,
showExamResults: ShowExamResults,
none: MissingSolutionComponentForCertification
none: MissingSolutionComponentForCertification,
noSolutionToDisplay: NoSolutionToDisplay
}
: {
showUserCode: ShowUserCode,
@@ -210,7 +215,8 @@ export function SolutionDisplayWidget({
showProjectAndGithubLinks: ShowProjectAndGithubLinks,
showProjectLink: ShowProjectLink,
showExamResults: ShowExamResults,
none: MissingSolutionComponent
none: MissingSolutionComponent,
noSolutionToDisplay: NoSolutionToDisplay
};
return displayComponents[getSolutionDisplayType(completedChallenge)];

View File

@@ -442,11 +442,13 @@ export type ClaimedCertifications = {
isFrontEndLibsCert: boolean;
isFullStackCert: boolean;
isInfosecQaCert: boolean;
isJavascriptCertV9: boolean;
isQaCertV7: boolean;
isInfosecCertV7: boolean;
isJsAlgoDataStructCert: boolean;
isRelationalDatabaseCertV8: boolean;
isRespWebDesignCert: boolean;
isRespWebDesignCertV9: boolean;
isSciCompPyCertV7: boolean;
isDataAnalysisPyCertV7: boolean;
isMachineLearningPyCertV7: boolean;

View File

@@ -8,7 +8,8 @@ type DisplayType =
| 'showUserCode'
| 'showProjectAndGithubLinks'
| 'showProjectLink'
| 'showExamResults';
| 'showExamResults'
| 'noSolutionToDisplay';
export const getSolutionDisplayType = ({
solution,
@@ -17,6 +18,8 @@ export const getSolutionDisplayType = ({
challengeType,
examResults
}: CompletedChallenge): DisplayType => {
if (challengeType === challengeTypes.examDownload)
return 'noSolutionToDisplay';
if (examResults) return 'showExamResults';
if (challengeFiles?.length)
return challengeType === challengeTypes.multifileCertProject

View File

@@ -2,7 +2,7 @@
id: 68db37350b398ecddd1f5dac
title: Responsive Web Design Certification Exam
challengeType: 30
dashedName: exam-javascript-certification
dashedName: exam-responsive-web-design-certification
---
# --description--

View File

@@ -103,6 +103,7 @@ export const certTypes = {
backEnd: 'isBackEndCert',
dataVis: 'isDataVisCert',
respWebDesign: 'isRespWebDesignCert',
respWebDesignV9: 'isRespWebDesignCertV9',
frontEndDevLibs: 'isFrontEndLibsCert',
dataVis2018: 'is2018DataVisCert',
jsAlgoDataStruct: 'isJsAlgoDataStructCert',
@@ -117,7 +118,8 @@ export const certTypes = {
relationalDatabaseV8: 'isRelationalDatabaseCertV8',
collegeAlgebraPyV8: 'isCollegeAlgebraPyCertV8',
foundationalCSharpV8: 'isFoundationalCSharpCertV8',
jsAlgoDataStructV8: 'isJsAlgoDataStructCertV8'
jsAlgoDataStructV8: 'isJsAlgoDataStructCertV8',
javascriptV9: 'isJavascriptCertV9'
} as const;
export const certIds = {
@@ -155,6 +157,7 @@ export const completionHours = {
[certTypes.infosecQa]: 300,
[certTypes.fullStack]: 1800,
[certTypes.respWebDesign]: 300,
[certTypes.respWebDesignV9]: 300,
[certTypes.frontEndDevLibs]: 300,
[certTypes.jsAlgoDataStruct]: 300,
[certTypes.dataVis2018]: 300,
@@ -167,7 +170,8 @@ export const completionHours = {
[certTypes.relationalDatabaseV8]: 300,
[certTypes.collegeAlgebraPyV8]: 300,
[certTypes.foundationalCSharpV8]: 300,
[certTypes.jsAlgoDataStructV8]: 300
[certTypes.jsAlgoDataStructV8]: 300,
[certTypes.javascriptV9]: 300
};
export const certSlugTypeMap = {
@@ -192,9 +196,11 @@ export const certSlugTypeMap = {
[Certification.MachineLearningPy]: certTypes.machineLearningPyV7,
[Certification.RelationalDb]: certTypes.relationalDatabaseV8,
[Certification.CollegeAlgebraPy]: certTypes.collegeAlgebraPyV8,
[Certification.FoundationalCSharp]: certTypes.foundationalCSharpV8
[Certification.FoundationalCSharp]: certTypes.foundationalCSharpV8,
// upcoming
[Certification.RespWebDesignV9]: certTypes.respWebDesignV9,
[Certification.JsV9]: certTypes.javascriptV9
};
export const superBlockCertTypeMap = {
@@ -235,6 +241,7 @@ export const certTypeIdMap = {
[certTypes.infosecQa]: certIds.legacyInfosecQaId,
[certTypes.fullStack]: certIds.legacyFullStackId,
[certTypes.respWebDesign]: certIds.respWebDesignId,
[certTypes.respWebDesignV9]: certIds.respWebDesignV9Id,
[certTypes.frontEndDevLibs]: certIds.frontEndDevLibsId,
[certTypes.jsAlgoDataStruct]: certIds.jsAlgoDataStructId,
[certTypes.dataVis2018]: certIds.dataVis2018Id,
@@ -247,7 +254,8 @@ export const certTypeIdMap = {
[certTypes.relationalDatabaseV8]: certIds.relationalDatabaseV8Id,
[certTypes.collegeAlgebraPyV8]: certIds.collegeAlgebraPyV8Id,
[certTypes.foundationalCSharpV8]: certIds.foundationalCSharpV8Id,
[certTypes.jsAlgoDataStructV8]: certIds.jsAlgoDataStructV8Id
[certTypes.jsAlgoDataStructV8]: certIds.jsAlgoDataStructV8Id,
[certTypes.javascriptV9]: certIds.javascriptV9Id
};
export const certTypeTitleMap = {
@@ -257,6 +265,7 @@ export const certTypeTitleMap = {
[certTypes.infosecQa]: 'Legacy Information Security and Quality Assurance',
[certTypes.fullStack]: 'Legacy Full Stack',
[certTypes.respWebDesign]: 'Responsive Web Design',
[certTypes.respWebDesignV9]: 'Responsive Web Design',
[certTypes.frontEndDevLibs]: 'Front End Development Libraries',
[certTypes.jsAlgoDataStruct]:
'Legacy JavaScript Algorithms and Data Structures',
@@ -270,7 +279,8 @@ export const certTypeTitleMap = {
[certTypes.relationalDatabaseV8]: 'Relational Database',
[certTypes.collegeAlgebraPyV8]: 'College Algebra with Python',
[certTypes.foundationalCSharpV8]: 'Foundational C# with Microsoft',
[certTypes.jsAlgoDataStructV8]: 'JavaScript Algorithms and Data Structures'
[certTypes.jsAlgoDataStructV8]: 'JavaScript Algorithms and Data Structures',
[certTypes.javascriptV9]: 'JavaScript'
};
export const superBlockToCertMap: {

View File

@@ -225,8 +225,10 @@ module.exports.fullyCertifiedUser = {
isBackEndCert: true,
isFullStackCert: true,
isRespWebDesignCert: true,
isRespWebDesignCertV9: true,
is2018DataVisCert: true,
isFrontEndLibsCert: true,
isJavascriptCertV9: true,
isJsAlgoDataStructCert: true,
isJsAlgoDataStructCertV8: true,
isApisMicroservicesCert: true,