feat: release rdb and python certs (#64253)

Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com>
Co-authored-by: moT01 <20648924+moT01@users.noreply.github.com>
This commit is contained in:
Shaun Hamilton
2025-12-09 21:55:36 +02:00
committed by GitHub
parent d9b5f4f8af
commit d28fbdf081
27 changed files with 175 additions and 114 deletions

View File

@@ -124,8 +124,10 @@ model user {
isJsAlgoDataStructCert Boolean? // Undefined
isJsAlgoDataStructCertV8 Boolean? // Undefined
isMachineLearningPyCertV7 Boolean? // Undefined
isPythonCertV9 Boolean? // Undefined
isQaCertV7 Boolean? // Undefined
isRelationalDatabaseCertV8 Boolean? // Undefined
isRelationalDatabaseCertV9 Boolean? // Undefined
isRespWebDesignCert Boolean? // Undefined
isRespWebDesignCertV9 Boolean? // Undefined
isSciCompPyCertV7 Boolean? // Undefined

View File

@@ -48,8 +48,10 @@ export const newUser = (email: string) => ({
isJsAlgoDataStructCert: false,
isJsAlgoDataStructCertV8: false,
isMachineLearningPyCertV7: false,
isPythonCertV9: false,
isQaCertV7: false,
isRelationalDatabaseCertV8: false,
isRelationalDatabaseCertV9: false,
isCollegeAlgebraPyCertV8: false,
isRespWebDesignCert: false,
isRespWebDesignCertV9: false,

View File

@@ -26,8 +26,10 @@ const nullableFlags = [
'isJsAlgoDataStructCert',
'isJsAlgoDataStructCertV8',
'isMachineLearningPyCertV7',
'isPythonCertV9',
'isQaCertV7',
'isRelationalDatabaseCertV8',
'isRelationalDatabaseCertV9',
'isRespWebDesignCert',
'isRespWebDesignCertV9',
'isSciCompPyCertV7',

View File

@@ -39,23 +39,25 @@ describe('certificate routes', () => {
where: { email: defaultUserEmail },
data: {
completedChallenges: [],
name: 'fcc',
isA2EnglishCert: false,
isRespWebDesignCert: false,
isJsAlgoDataStructCert: false,
isFrontEndLibsCert: false,
is2018DataVisCert: false,
isRelationalDatabaseCertV8: false,
isA2EnglishCert: false,
isApisMicroservicesCert: false,
isQaCertV7: false,
isSciCompPyCertV7: false,
isDataAnalysisPyCertV7: false,
isInfosecCertV7: false,
isMachineLearningPyCertV7: false,
isCollegeAlgebraPyCertV8: false,
isDataAnalysisPyCertV7: false,
isFoundationalCSharpCertV8: false,
isFrontEndLibsCert: false,
isInfosecCertV7: false,
isJsAlgoDataStructCert: false,
isJavascriptCertV9: false,
isMachineLearningPyCertV7: false,
isPythonCertV9: false,
isQaCertV7: false,
isRelationalDatabaseCertV8: false,
isRelationalDatabaseCertV9: false,
isRespWebDesignCert: false,
isRespWebDesignCertV9: false,
isSciCompPyCertV7: false,
name: 'fcc',
username: 'fcc'
}
});
@@ -154,8 +156,10 @@ describe('certificate routes', () => {
isInfosecQaCert: false,
isJsAlgoDataStructCert: false,
isMachineLearningPyCertV7: false,
isPythonCertV9: false,
isQaCertV7: false,
isRelationalDatabaseCertV8: false,
isRelationalDatabaseCertV9: false,
isRespWebDesignCert: false,
isSciCompPyCertV7: false,
isJavascriptCertV9: false,
@@ -234,22 +238,24 @@ describe('certificate routes', () => {
{ id: '587d78b0367417b2b2512b05', completedDate: 123456789 },
{ id: 'bd7158d8c242eddfaeb5bd13', completedDate: 123456789 }
],
isRespWebDesignCert: false,
isJsAlgoDataStructCertV8: true,
isFrontEndLibsCert: true,
is2018DataVisCert: true,
isRelationalDatabaseCertV8: true,
isA2EnglishCert: true,
isApisMicroservicesCert: true,
isQaCertV7: true,
isSciCompPyCertV7: true,
isDataAnalysisPyCertV7: true,
isInfosecCertV7: true,
isMachineLearningPyCertV7: true,
isCollegeAlgebraPyCertV8: true,
isDataAnalysisPyCertV7: true,
isFoundationalCSharpCertV8: true,
isFrontEndLibsCert: true,
isInfosecCertV7: true,
isJavascriptCertV9: true,
isJsAlgoDataStructCertV8: true,
isMachineLearningPyCertV7: true,
isPythonCertV9: true,
isQaCertV7: true,
isRelationalDatabaseCertV8: true,
isRelationalDatabaseCertV9: true,
isRespWebDesignCert: false,
isRespWebDesignCertV9: true,
isA2EnglishCert: true
isSciCompPyCertV7: true
}
});
@@ -323,7 +329,9 @@ describe('certificate routes', () => {
isMachineLearningPyCertV7: false,
isRelationalDatabaseCertV8: false,
isCollegeAlgebraPyCertV8: false,
isFoundationalCSharpCertV8: false
isFoundationalCSharpCertV8: false,
isPythonCertV9: false,
isRelationalDatabaseCertV9: false
},
completedChallenges: [
{

View File

@@ -123,78 +123,84 @@ export function createCertLookup(
interface CertI {
isA2EnglishCert?: boolean;
isRespWebDesignCert?: boolean;
isApisMicroservicesCert?: boolean;
isBackEndCert?: boolean;
isCollegeAlgebraPyCertV8?: boolean;
isDataAnalysisPyCertV7?: boolean;
isDataVisCert?: boolean;
isFrontEndCert?: boolean;
isFrontEndLibsCert?: boolean;
isFoundationalCSharpCertV8?: boolean;
isFullStackCert?: boolean;
isInfosecCertV7?: boolean;
isInfosecQaCert?: boolean;
isJavascriptCertV9?: boolean;
isJsAlgoDataStructCert?: boolean;
isJsAlgoDataStructCertV8?: boolean;
isFrontEndLibsCert?: boolean;
is2018DataVisCert?: boolean;
isApisMicroservicesCert?: boolean;
isInfosecQaCert?: boolean;
isQaCertV7?: boolean;
isInfosecCertV7?: boolean;
isFrontEndCert?: boolean;
isBackEndCert?: boolean;
isDataVisCert?: boolean;
isFullStackCert?: boolean;
isSciCompPyCertV7?: boolean;
isDataAnalysisPyCertV7?: boolean;
isMachineLearningPyCertV7?: boolean;
isPythonCertV9?: boolean;
isQaCertV7?: boolean;
isRelationalDatabaseCertV8?: boolean;
isCollegeAlgebraPyCertV8?: boolean;
isFoundationalCSharpCertV8?: boolean;
isJavascriptCertV9?: boolean;
isRelationalDatabaseCertV9?: boolean;
isRespWebDesignCert?: boolean;
isRespWebDesignCertV9?: boolean;
isSciCompPyCertV7?: boolean;
is2018DataVisCert?: boolean;
}
function getUserIsCertMap(user: CertI) {
const {
isA2EnglishCert = false,
isRespWebDesignCert = false,
isApisMicroservicesCert = false,
isBackEndCert = false,
isCollegeAlgebraPyCertV8 = false,
isDataAnalysisPyCertV7 = false,
isDataVisCert = false,
isFrontEndCert = false,
isFrontEndLibsCert = false,
isFoundationalCSharpCertV8 = false,
isFullStackCert = false,
isInfosecCertV7 = false,
isInfosecQaCert = false,
isJavascriptCertV9 = false,
isJsAlgoDataStructCert = false,
isJsAlgoDataStructCertV8 = false,
isFrontEndLibsCert = false,
is2018DataVisCert = false,
isApisMicroservicesCert = false,
isInfosecQaCert = false,
isQaCertV7 = false,
isInfosecCertV7 = false,
isFrontEndCert = false,
isBackEndCert = false,
isDataVisCert = false,
isFullStackCert = false,
isSciCompPyCertV7 = false,
isDataAnalysisPyCertV7 = false,
isMachineLearningPyCertV7 = false,
isPythonCertV9 = false,
isQaCertV7 = false,
isRelationalDatabaseCertV8 = false,
isCollegeAlgebraPyCertV8 = false,
isFoundationalCSharpCertV8 = false,
isJavascriptCertV9 = false,
isRespWebDesignCertV9 = false
isRelationalDatabaseCertV9 = false,
isRespWebDesignCert = false,
isRespWebDesignCertV9 = false,
isSciCompPyCertV7 = false,
is2018DataVisCert = false
} = user;
return {
isA2EnglishCert,
isRespWebDesignCert,
isApisMicroservicesCert,
isBackEndCert,
isCollegeAlgebraPyCertV8,
isDataAnalysisPyCertV7,
isDataVisCert,
isFrontEndCert,
isFrontEndLibsCert,
isFoundationalCSharpCertV8,
isFullStackCert,
isInfosecCertV7,
isInfosecQaCert,
isJavascriptCertV9,
isJsAlgoDataStructCert,
isJsAlgoDataStructCertV8,
isFrontEndLibsCert,
is2018DataVisCert,
isApisMicroservicesCert,
isInfosecQaCert,
isQaCertV7,
isInfosecCertV7,
isFrontEndCert,
isBackEndCert,
isDataVisCert,
isFullStackCert,
isSciCompPyCertV7,
isDataAnalysisPyCertV7,
isMachineLearningPyCertV7,
isPythonCertV9,
isQaCertV7,
isRelationalDatabaseCertV8,
isCollegeAlgebraPyCertV8,
isFoundationalCSharpCertV8,
isJavascriptCertV9,
isRespWebDesignCertV9
isRelationalDatabaseCertV9,
isRespWebDesignCert,
isRespWebDesignCertV9,
isSciCompPyCertV7,
is2018DataVisCert
};
}
@@ -335,33 +341,35 @@ export const protectedCertificateRoutes: FastifyPluginCallbackTypebox = (
}
},
select: {
username: true,
completedChallenges: true,
email: true,
name: true,
completedChallenges: true,
username: true,
is2018DataVisCert: true,
is2018FullStackCert: true,
isA2EnglishCert: true,
isApisMicroservicesCert: true,
isBackEndCert: true,
isDataVisCert: true,
isCollegeAlgebraPyCertV8: true,
isDataAnalysisPyCertV7: true,
isDataVisCert: true,
isFoundationalCSharpCertV8: true,
isFrontEndCert: true,
isFrontEndLibsCert: true,
isFullStackCert: true,
isInfosecCertV7: true,
isInfosecQaCert: true,
isJavascriptCertV9: true,
isJsAlgoDataStructCert: true,
isJsAlgoDataStructCertV8: true,
isMachineLearningPyCertV7: true,
isPythonCertV9: true,
isQaCertV7: true,
isRelationalDatabaseCertV8: true,
isRelationalDatabaseCertV9: true,
isRespWebDesignCert: true,
isSciCompPyCertV7: true,
isJavascriptCertV9: true,
isRespWebDesignCertV9: true
isRespWebDesignCertV9: true,
isSciCompPyCertV7: true
}
});

View File

@@ -293,8 +293,10 @@ const publicUserData = {
isJsAlgoDataStructCert: testUserData.isJsAlgoDataStructCert,
isJsAlgoDataStructCertV8: testUserData.isJsAlgoDataStructCertV8,
isMachineLearningPyCertV7: testUserData.isMachineLearningPyCertV7,
isPythonCertV9: testUserData.isPythonCertV9,
isQaCertV7: testUserData.isQaCertV7,
isRelationalDatabaseCertV8: testUserData.isRelationalDatabaseCertV8,
isRelationalDatabaseCertV9: testUserData.isRelationalDatabaseCertV9,
isRespWebDesignCert: testUserData.isRespWebDesignCert,
isRespWebDesignCertV9: testUserData.isRespWebDesignCertV9,
isSciCompPyCertV7: testUserData.isSciCompPyCertV7,
@@ -345,7 +347,9 @@ const baseProgressData = {
isSciCompPyCertV7: false,
isDataAnalysisPyCertV7: false,
isMachineLearningPyCertV7: false,
isPythonCertV9: false,
isRelationalDatabaseCertV8: false,
isRelationalDatabaseCertV9: false,
isRespWebDesignCertV9: false,
isCollegeAlgebraPyCertV8: false,
completedChallenges: [],
@@ -1018,8 +1022,10 @@ describe('userRoutes', () => {
isJsAlgoDataStructCert: false,
isJsAlgoDataStructCertV8: false,
isMachineLearningPyCertV7: false,
isPythonCertV9: false,
isQaCertV7: false,
isRelationalDatabaseCertV8: false,
isRelationalDatabaseCertV9: false,
isRespWebDesignCert: false,
isRespWebDesignCertV9: false,
isSciCompPyCertV7: false,

View File

@@ -701,8 +701,10 @@ export const userGetRoutes: FastifyPluginCallbackTypebox = (
isJsAlgoDataStructCert: true,
isJsAlgoDataStructCertV8: true,
isMachineLearningPyCertV7: true,
isPythonCertV9: true,
isQaCertV7: true,
isRelationalDatabaseCertV8: true,
isRelationalDatabaseCertV9: true,
isRespWebDesignCert: true,
isRespWebDesignCertV9: true,
isSciCompPyCertV7: true,

View File

@@ -74,12 +74,14 @@ export const unprotectedCertificateRoutes: FastifyPluginCallbackTypebox = (
is2018DataVisCert: true,
isApisMicroservicesCert: true,
isInfosecQaCert: true,
isPythonCertV9: true,
isQaCertV7: true,
isInfosecCertV7: true,
isSciCompPyCertV7: true,
isDataAnalysisPyCertV7: true,
isMachineLearningPyCertV7: true,
isRelationalDatabaseCertV8: true,
isRelationalDatabaseCertV9: true,
isCollegeAlgebraPyCertV8: true,
isFoundationalCSharpCertV8: true,
isHonest: true,

View File

@@ -206,8 +206,10 @@ const publicUserData = {
isJsAlgoDataStructCert: testUserData.isJsAlgoDataStructCert,
isJsAlgoDataStructCertV8: testUserData.isJsAlgoDataStructCertV8,
isMachineLearningPyCertV7: testUserData.isMachineLearningPyCertV7,
isPythonCertV9: testUserData.isPythonCertV9,
isQaCertV7: testUserData.isQaCertV7,
isRelationalDatabaseCertV8: testUserData.isRelationalDatabaseCertV8,
isRelationalDatabaseCertV9: testUserData.isRelationalDatabaseCertV9,
isRespWebDesignCert: testUserData.isRespWebDesignCert,
isRespWebDesignCertV9: testUserData.isRespWebDesignCertV9,
isSciCompPyCertV7: testUserData.isSciCompPyCertV7,

View File

@@ -15,6 +15,7 @@ export const isCertMap = Type.Object({
is2018DataVisCert: Type.Boolean(),
isApisMicroservicesCert: Type.Boolean(),
isInfosecQaCert: Type.Boolean(),
isPythonCertV9: Type.Boolean(),
isQaCertV7: Type.Boolean(),
isInfosecCertV7: Type.Boolean(),
isFrontEndCert: Type.Boolean(),
@@ -25,6 +26,7 @@ export const isCertMap = Type.Object({
isDataAnalysisPyCertV7: Type.Boolean(),
isMachineLearningPyCertV7: Type.Boolean(),
isRelationalDatabaseCertV8: Type.Boolean(),
isRelationalDatabaseCertV9: Type.Boolean(),
isCollegeAlgebraPyCertV8: Type.Boolean(),
isFoundationalCSharpCertV8: Type.Boolean()
});

View File

@@ -86,8 +86,10 @@ export const getSessionUser = {
isJsAlgoDataStructCert: Type.Boolean(),
isJsAlgoDataStructCertV8: Type.Boolean(),
isMachineLearningPyCertV7: Type.Boolean(),
isPythonCertV9: Type.Boolean(),
isQaCertV7: Type.Boolean(),
isRelationalDatabaseCertV8: Type.Boolean(),
isRelationalDatabaseCertV9: Type.Boolean(),
isRespWebDesignCert: Type.Boolean(),
isRespWebDesignCertV9: Type.Boolean(),
isSciCompPyCertV7: Type.Boolean(),

View File

@@ -72,8 +72,10 @@ export const getPublicProfile = {
isJsAlgoDataStructCert: Type.Boolean(),
isJsAlgoDataStructCertV8: Type.Boolean(),
isMachineLearningPyCertV7: Type.Boolean(),
isPythonCertV9: Type.Boolean(),
isQaCertV7: Type.Boolean(),
isRelationalDatabaseCertV8: Type.Boolean(),
isRelationalDatabaseCertV9: Type.Boolean(),
isRespWebDesignCert: Type.Boolean(),
isRespWebDesignCertV9: Type.Boolean(),
isSciCompPyCertV7: Type.Boolean(),

View File

@@ -32,8 +32,10 @@ export const createResetProperties = () => ({
isJsAlgoDataStructCert: false,
isJsAlgoDataStructCertV8: false,
isMachineLearningPyCertV7: false,
isPythonCertV9: false,
isQaCertV7: false,
isRelationalDatabaseCertV8: false,
isRelationalDatabaseCertV9: false,
isRespWebDesignCert: false,
isRespWebDesignCertV9: false,
isSciCompPyCertV7: false,

View File

@@ -5089,13 +5089,9 @@
"title": "JavaScript Certification",
"intro": [
"This course teaches you core JavaScript programming concepts such as working with variables, functions, objects, arrays, and control flow. You'll also learn how to manipulate the DOM, handle events, and apply techniques like asynchronous programming, functional programming, and accessibility best practices.",
"To qualify for the exam, you must complete the following projects:",
"- Build a Markdown to HTML Converter",
"- Build a Drum Machine",
"- Build a Voting System",
"- Build a Bank Account Management Program",
"- Build a Weather App",
"Pass the exam to earn your JavaScript Certification."
"To earn your JavaScript Certification:",
"- Complete the five required projects to qualify for the certification exam.",
"- Pass the JavaScript Certification exam."
],
"chapters": {
"javascript": "JavaScript",
@@ -6666,7 +6662,6 @@
},
"python-v9": {
"title": "Python Certification",
"note": "This certification is currently in development and will be available soon. We recommend completing the available courses below to prepare for the certification exam once it is released.",
"intro": [
"This course teaches you the fundamentals of Python programming.",
"To earn your Python Certification:",
@@ -7142,7 +7137,6 @@
},
"relational-databases-v9": {
"title": "Relational Databases Certification",
"note": "This certification is currently in development and will be available soon. We recommend completing the available courses below to prepare for the certification exam once it is released.",
"intro": [
"This course teaches you the fundamentals of relational databases.",
"To earn your Relational Databases Certification:",
@@ -7734,13 +7728,9 @@
"title": "Responsive Web Design Certification",
"intro": [
"This course teaches the fundamentals of HTML and CSS, including modern layout, design, accessibility, and responsive web development. You'll build practical projects and gain the skills to create professional, user-friendly webpages.",
"To qualify for the exam, you must complete the following projects:",
"- Build a Survey Form",
"- Build a Page of Playing Cards",
"- Build a Book Inventory App",
"- Build a Technical Documentation Page",
"- Build a Product Landing Page",
"Pass the exam to earn your Responsive Web Design Certification."
"To earn your Responsive Web Design Certification:",
"- Complete the five required projects to qualify for the certification exam.",
"- Pass the Responsive Web Design Certification exam."
],
"chapters": {
"html": "HTML",

View File

@@ -154,6 +154,8 @@ export function ShowSettings(props: ShowSettingsProps): JSX.Element {
isFullStackCert,
isRespWebDesignCert,
isRespWebDesignCertV9,
isPythonCertV9,
isRelationalDatabaseCertV9,
isSciCompPyCertV7,
isDataAnalysisPyCertV7,
isMachineLearningPyCertV7,
@@ -241,8 +243,10 @@ export function ShowSettings(props: ShowSettingsProps): JSX.Element {
isInfosecQaCert={isInfosecQaCert}
isJsAlgoDataStructCert={isJsAlgoDataStructCert}
isMachineLearningPyCertV7={isMachineLearningPyCertV7}
isPythonCertV9={isPythonCertV9}
isQaCertV7={isQaCertV7}
isRelationalDatabaseCertV8={isRelationalDatabaseCertV8}
isRelationalDatabaseCertV9={isRelationalDatabaseCertV9}
isRespWebDesignCert={isRespWebDesignCert}
isRespWebDesignCertV9={isRespWebDesignCertV9}
isSciCompPyCertV7={isSciCompPyCertV7}

View File

@@ -12,6 +12,7 @@ export const getCertifications = (user: User) => {
isJsAlgoDataStructCert,
isApisMicroservicesCert,
isInfosecQaCert,
isPythonCertV9,
isQaCertV7,
isInfosecCertV7,
isFrontEndCert,
@@ -22,6 +23,7 @@ export const getCertifications = (user: User) => {
isDataAnalysisPyCertV7,
isMachineLearningPyCertV7,
isRelationalDatabaseCertV8,
isRelationalDatabaseCertV9,
isCollegeAlgebraPyCertV8,
isFoundationalCSharpCertV8,
isJsAlgoDataStructCertV8
@@ -32,7 +34,9 @@ export const getCertifications = (user: User) => {
isA2EnglishCert ||
isRespWebDesignCertV9 ||
isJavascriptCertV9 ||
isFoundationalCSharpCertV8,
isFoundationalCSharpCertV8 ||
isPythonCertV9 ||
isRelationalDatabaseCertV9,
hasLegacyCert:
isFrontEndCert ||
isJsAlgoDataStructCert ||
@@ -73,6 +77,16 @@ export const getCertifications = (user: User) => {
show: isFoundationalCSharpCertV8,
title: 'Foundational C# with Microsoft Certification',
certSlug: Certification.FoundationalCSharp
},
{
show: isPythonCertV9,
title: 'Python Certification',
certSlug: Certification.PythonV9
},
{
show: isRelationalDatabaseCertV9,
title: 'Relational Database Certification',
certSlug: Certification.RelationalDbV9
}
],
legacyCerts: [

View File

@@ -63,6 +63,7 @@ const userProps = {
isFrontEndLibsCert: true,
isFullStackCert: true,
isInfosecQaCert: true,
isPythonCertV9: true,
isQaCertV7: true,
isInfosecCertV7: true,
isJavascriptCertV9: true,
@@ -73,6 +74,7 @@ const userProps = {
isDataAnalysisPyCertV7: true,
isMachineLearningPyCertV7: true,
isRelationalDatabaseCertV8: true,
isRelationalDatabaseCertV9: true,
isCollegeAlgebraPyCertV8: true,
isFoundationalCSharpVertV8: true
},

View File

@@ -271,6 +271,7 @@ const defaultTestProps = {
isFullStackCert: false,
isHonest: false,
isInfosecQaCert: false,
isPythonCertV9: false,
isQaCertV7: false,
isInfosecCertV7: false,
isJavascriptCertV9: false,
@@ -282,6 +283,7 @@ const defaultTestProps = {
isDataAnalysisPyCertV7: false,
isMachineLearningPyCertV7: false,
isRelationalDatabaseCertV8: false,
isRelationalDatabaseCertV9: false,
isCollegeAlgebraPyCertV8: false,
isFoundationalCSharpCertV8: false,
username: 'developmentuser',

View File

@@ -49,6 +49,7 @@ const createCertifiedMap = ({
isJavascriptCertV9,
isJsAlgoDataStructCert,
isInfosecQaCert,
isPythonCertV9,
isQaCertV7,
isInfosecCertV7,
isFrontEndLibsCert,
@@ -61,6 +62,7 @@ const createCertifiedMap = ({
isDataAnalysisPyCertV7,
isMachineLearningPyCertV7,
isRelationalDatabaseCertV8,
isRelationalDatabaseCertV9,
isCollegeAlgebraPyCertV8,
isFoundationalCSharpCertV8,
isJsAlgoDataStructCertV8
@@ -91,8 +93,8 @@ const createCertifiedMap = ({
[Certification.RespWebDesignV9]: isRespWebDesignCertV9,
[Certification.JsV9]: isJavascriptCertV9,
[Certification.FrontEndDevLibsV9]: false,
[Certification.PythonV9]: false,
[Certification.RelationalDbV9]: false,
[Certification.PythonV9]: isPythonCertV9,
[Certification.RelationalDbV9]: isRelationalDatabaseCertV9,
[Certification.BackEndDevApisV9]: false,
[Certification.FullStackDeveloperV9]: false,
[Certification.A2English]: isA2EnglishCert,

View File

@@ -474,10 +474,12 @@ export type ClaimedCertifications = {
isFullStackCert: boolean;
isInfosecQaCert: boolean;
isJavascriptCertV9: boolean;
isPythonCertV9: boolean;
isQaCertV7: boolean;
isInfosecCertV7: boolean;
isJsAlgoDataStructCert: boolean;
isRelationalDatabaseCertV8: boolean;
isRelationalDatabaseCertV9: boolean;
isRespWebDesignCert: boolean;
isRespWebDesignCertV9: boolean;
isSciCompPyCertV7: boolean;

View File

@@ -2,7 +2,7 @@
"name": "Python Certification Exam",
"blockLabel": "exam",
"blockLayout": "link",
"isUpcomingChange": true,
"isUpcomingChange": false,
"dashedName": "exam-python-certification",
"helpCategory": "Python",
"challengeOrder": [

View File

@@ -2,7 +2,7 @@
"name": "Relational Databases Certification Exam",
"blockLabel": "exam",
"blockLayout": "link",
"isUpcomingChange": true,
"isUpcomingChange": false,
"dashedName": "exam-relational-databases-certification",
"helpCategory": "Backend Development",
"challengeOrder": [

View File

@@ -148,10 +148,10 @@
{
"chapterType": "exam",
"dashedName": "python-certification-exam",
"comingSoon": true,
"comingSoon": false,
"modules": [
{
"comingSoon": true,
"comingSoon": false,
"dashedName": "python-certification-exam",
"blocks": ["exam-python-certification"]
}

View File

@@ -93,10 +93,10 @@
{
"chapterType": "exam",
"dashedName": "relational-databases-certification-exam",
"comingSoon": true,
"comingSoon": false,
"modules": [
{
"comingSoon": true,
"comingSoon": false,
"dashedName": "relational-databases-certification-exam",
"blocks": ["exam-relational-databases-certification"]
}

View File

@@ -16,7 +16,7 @@ test.describe('Public profile certifications', () => {
await expect(
page.getByRole('link', { name: /View.+Certification/ })
).toHaveCount(22);
).toHaveCount(24);
});
test('Should show claimed certifications if the username includes uppercase characters', async ({
@@ -48,7 +48,7 @@ test.describe('Public profile certifications', () => {
await page.waitForURL('/certifiedboozer');
await expect(
page.getByRole('link', { name: /View.+Certification/ })
).toHaveCount(22);
).toHaveCount(24);
});
test.afterAll(() => {

View File

@@ -25,12 +25,12 @@ export enum Certification {
MachineLearningPy = 'machine-learning-with-python-v7',
CollegeAlgebraPy = 'college-algebra-with-python-v8',
FoundationalCSharp = 'foundational-c-sharp-with-microsoft',
PythonV9 = 'python-v9',
RelationalDbV9 = 'relational-databases-v9',
// Upcoming certifications
RespWebDesignV9 = 'responsive-web-design-v9',
JsV9 = 'javascript-v9',
FrontEndDevLibsV9 = 'front-end-development-libraries-v9',
PythonV9 = 'python-v9',
RelationalDbV9 = 'relational-databases-v9',
BackEndDevApisV9 = 'back-end-development-and-apis-v9',
A2English = 'a2-english-for-developers',
FullStackDeveloperV9 = 'full-stack-developer-v9',
@@ -54,10 +54,12 @@ export function isCertification(x: string): x is Certification {
// "Current" certifications are the subset of standard certifications that are
// live and not legacy.
export const currentCertifications = [
Certification.RespWebDesignV9,
Certification.JsV9,
Certification.A2English,
Certification.FoundationalCSharp
Certification.FoundationalCSharp,
Certification.JsV9,
Certification.PythonV9,
Certification.RelationalDbV9,
Certification.RespWebDesignV9
] as const;
// "Legacy" certifications are another class of standard certifications. They're
@@ -92,8 +94,6 @@ export const legacyFullStackCertification = [
// showUpcomingChanges is true.
export const upcomingCertifications = [
Certification.FrontEndDevLibsV9,
Certification.PythonV9,
Certification.RelationalDbV9,
Certification.BackEndDevApisV9,
Certification.FullStackDeveloperV9,
Certification.B1English,
@@ -199,10 +199,11 @@ export const certSlugTypeMap = {
[Certification.CollegeAlgebraPy]: 'isCollegeAlgebraPyCertV8',
[Certification.FoundationalCSharp]: 'isFoundationalCSharpCertV8',
[Certification.A2English]: 'isA2EnglishCert',
// upcoming
[Certification.PythonV9]: 'isPythonCertV9',
[Certification.RelationalDbV9]: 'isRelationalDatabaseCertV9',
[Certification.RespWebDesignV9]: 'isRespWebDesignCertV9',
[Certification.JsV9]: 'isJavascriptCertV9'
// upcoming
} as const;
// TODO: use i18n keys instead of hardcoded titles

View File

@@ -234,6 +234,7 @@ module.exports.fullyCertifiedUser = {
isJsAlgoDataStructCertV8: true,
isApisMicroservicesCert: true,
isInfosecQaCert: true,
isPythonCertV9: true,
isQaCertV7: true,
isInfosecCertV7: true,
is2018FullStackCert: true,
@@ -241,6 +242,7 @@ module.exports.fullyCertifiedUser = {
isDataAnalysisPyCertV7: true,
isMachineLearningPyCertV7: true,
isRelationalDatabaseCertV8: true,
isRelationalDatabaseCertV9: true,
isCollegeAlgebraPyCertV8: true,
isFoundationalCSharpCertV8: true,
completedChallenges: [