feat: release rdbms on staging (#44576)

fix: unhide cert from settings page

fix: add cert variables where missing

fix: show token on settings page

feat: add challenges to certified user data

fix: stylize settings page a little bit

fix: only show rdbms when upcomingChanges = true

fix: relational databases -> relational database
This commit is contained in:
Tom
2022-02-18 10:29:30 -06:00
committed by GitHub
parent 395d9de8af
commit fd14608492
59 changed files with 240 additions and 124 deletions

View File

@ -200,6 +200,11 @@
"description": "Camper is machine learning with Python certified", "description": "Camper is machine learning with Python certified",
"default": false "default": false
}, },
"isRelationalDatabaseCertV8": {
"type": "boolean",
"description": "Camper is relational database certified",
"default": false
},
"completedChallenges": { "completedChallenges": {
"type": [ "type": [
{ {

View File

@ -36,7 +36,7 @@ const {
sciCompPyV7Id, sciCompPyV7Id,
dataAnalysisPyV7Id, dataAnalysisPyV7Id,
machineLearningPyV7Id, machineLearningPyV7Id,
relationalDatabasesV8Id relationalDatabaseV8Id
} = certIds; } = certIds;
const log = debug('fcc:certification'); const log = debug('fcc:certification');
@ -128,8 +128,8 @@ function createCertTypeIds(allChallenges) {
machineLearningPyV7Id, machineLearningPyV7Id,
allChallenges allChallenges
), ),
[certTypes.relationalDatabasesV8]: getCertById( [certTypes.relationalDatabaseV8]: getCertById(
relationalDatabasesV8Id, relationalDatabaseV8Id,
allChallenges allChallenges
) )
}; };
@ -217,7 +217,8 @@ function getUserIsCertMap(user) {
isFullStackCert = false, isFullStackCert = false,
isSciCompPyCertV7 = false, isSciCompPyCertV7 = false,
isDataAnalysisPyCertV7 = false, isDataAnalysisPyCertV7 = false,
isMachineLearningPyCertV7 = false isMachineLearningPyCertV7 = false,
isRelationalDatabaseCertV8 = false
} = user; } = user;
return { return {
@ -235,7 +236,8 @@ function getUserIsCertMap(user) {
isFullStackCert, isFullStackCert,
isSciCompPyCertV7, isSciCompPyCertV7,
isDataAnalysisPyCertV7, isDataAnalysisPyCertV7,
isMachineLearningPyCertV7 isMachineLearningPyCertV7,
isRelationalDatabaseCertV8
}; };
} }
@ -378,6 +380,7 @@ function createShowCert(app) {
isSciCompPyCertV7: true, isSciCompPyCertV7: true,
isDataAnalysisPyCertV7: true, isDataAnalysisPyCertV7: true,
isMachineLearningPyCertV7: true, isMachineLearningPyCertV7: true,
isRelationalDatabaseCertV8: true,
isHonest: true, isHonest: true,
username: true, username: true,
name: true, name: true,

View File

@ -394,10 +394,8 @@ function createCoderoadChallengeCompleted(app) {
if (!userWebhookToken) if (!userWebhookToken)
return res.send(`'coderoad-user-token' not found in request headers`); return res.send(`'coderoad-user-token' not found in request headers`);
const tutorialRepoPath = tutorialId?.split(':')[0]; const tutorialRepo = tutorialId?.split(':')[0];
const tutorialSplit = tutorialRepoPath?.split('/'); const tutorialOrg = tutorialRepo?.split('/')?.[0];
const tutorialOrg = tutorialSplit?.[0];
const tutorialRepoName = tutorialSplit?.[1];
// this allows any GH account to host the repo in development or staging // this allows any GH account to host the repo in development or staging
// .org submissions should always be from repos hosted on the fCC GH org // .org submissions should always be from repos hosted on the fCC GH org
@ -408,7 +406,7 @@ function createCoderoadChallengeCompleted(app) {
// validate tutorial name is in codeRoadChallenges object // validate tutorial name is in codeRoadChallenges object
const challenge = codeRoadChallenges.find(challenge => const challenge = codeRoadChallenges.find(challenge =>
challenge.url?.includes(tutorialRepoName) challenge.url?.endsWith(tutorialRepo)
); );
if (!challenge) return res.send('Tutorial name is not valid'); if (!challenge) return res.send('Tutorial name is not valid');

View File

@ -250,6 +250,7 @@ function postResetProgress(req, res, next) {
isSciCompPyCertV7: false, isSciCompPyCertV7: false,
isDataAnalysisPyCertV7: false, isDataAnalysisPyCertV7: false,
isMachineLearningPyCertV7: false, isMachineLearningPyCertV7: false,
isRelationalDatabaseCertV8: false,
completedChallenges: [] completedChallenges: []
}, },
function (err) { function (err) {

View File

@ -14,5 +14,5 @@
"dataAnalysisPyV7": "isDataAnalysisPyCertV7", "dataAnalysisPyV7": "isDataAnalysisPyCertV7",
"machineLearningPyV7": "isMachineLearningPyCertV7", "machineLearningPyV7": "isMachineLearningPyCertV7",
"fullStack": "isFullStackCert", "fullStack": "isFullStackCert",
"relationalDatabasesV8": "isRelationalDatabasesV8" "relationalDatabaseV8": "isRelationalDatabaseV8"
} }

View File

@ -9,7 +9,8 @@ function getCompletedCertCount(user) {
'isRespWebDesignCert', 'isRespWebDesignCert',
'isSciCompPyCertV7', 'isSciCompPyCertV7',
'isDataAnalysisPyCertV7', 'isDataAnalysisPyCertV7',
'isMachineLearningPyCertV7' 'isMachineLearningPyCertV7',
'isRelationalDatabaseCertV8'
].reduce((sum, key) => (user[key] ? sum + 1 : sum), 0); ].reduce((sum, key) => (user[key] ? sum + 1 : sum), 0);
} }

View File

@ -25,6 +25,7 @@ export const publicUserProps = [
'isQaCertV7', 'isQaCertV7',
'isInfosecCertV7', 'isInfosecCertV7',
'isJsAlgoDataStructCert', 'isJsAlgoDataStructCert',
'isRelationalDatabaseCertV8',
'isRespWebDesignCert', 'isRespWebDesignCert',
'isSciCompPyCertV7', 'isSciCompPyCertV7',
'isDataAnalysisPyCertV7', 'isDataAnalysisPyCertV7',

View File

@ -131,7 +131,8 @@ function getCompletedCertCount(user) {
'isRespWebDesignCert', 'isRespWebDesignCert',
'isSciCompPyCertV7', 'isSciCompPyCertV7',
'isDataAnalysisPyCertV7', 'isDataAnalysisPyCertV7',
'isMachineLearningPyCertV7' 'isMachineLearningPyCertV7',
'isRelationalDatabaseCertV8'
].reduce((sum, key) => (user[key] ? sum + 1 : sum), 0); ].reduce((sum, key) => (user[key] ? sum + 1 : sum), 0);
} }

View File

@ -425,7 +425,7 @@
} }
} }
}, },
"relational-databases": { "relational-database": {
"title": "關係型數據庫", "title": "關係型數據庫",
"intro": [ "intro": [
"對於這些課程,你將使用真正的開發者工具和軟件,包括 VS Code、PostgreSQL 和 Linux / Unix 命令行,來完成交互式教程和構建項目。", "對於這些課程,你將使用真正的開發者工具和軟件,包括 VS Code、PostgreSQL 和 Linux / Unix 命令行,來完成交互式教程和構建項目。",

View File

@ -425,7 +425,7 @@
} }
} }
}, },
"relational-databases": { "relational-database": {
"title": "关系型数据库", "title": "关系型数据库",
"intro": [ "intro": [
"对于这些课程,你将使用真正的开发者工具和软件,包括 VS Code、PostgreSQL 和 Linux / Unix 命令行,来完成交互式教程和构建项目。", "对于这些课程,你将使用真正的开发者工具和软件,包括 VS Code、PostgreSQL 和 Linux / Unix 命令行,来完成交互式教程和构建项目。",

View File

@ -410,12 +410,12 @@
} }
} }
}, },
"relational-databases": { "relational-database": {
"title": "Relational Databases", "title": "Relational Database",
"intro": [ "intro": [
"For these courses, you will use real developer tools and software including VS Code, PostgreSQL, and the Linux / Unix command line to complete interactive tutorials and build projects.", "For these courses, you will use real developer tools and software including VS Code, PostgreSQL, and the Linux / Unix command line to complete interactive tutorials and build projects.",
"These courses start off with basic Bash commands. Using the terminal, you will learn everything from navigating and manipulating a file system, scripting in Bash, all the way to advanced usage.", "These courses start off with basic Bash commands. Using the terminal, you will learn everything from navigating and manipulating a file system, scripting in Bash, all the way to advanced usage.",
"Next, you will learn how to create and work with relational databases using PostgreSQL, a database management system, and SQL, the language of these databases.", "Next, you will learn how to create and use a relational database with PostgreSQL, a database management system, and SQL, the language of these databases.",
"Finally, you will learn Git, the version control system, an essential tool of every developer." "Finally, you will learn Git, the version control system, an essential tool of every developer."
], ],
"blocks": { "blocks": {
@ -498,14 +498,14 @@
"learn-relational-databases-by-building-a-mario-database": { "learn-relational-databases-by-building-a-mario-database": {
"title": "Learn Relational Databases by Building a Mario Database", "title": "Learn Relational Databases by Building a Mario Database",
"intro": [ "intro": [
"Relational databases organize data into tables that are linked together through relationships.", "A relational database organizes data into tables that are linked together through relationships.",
"In this 165 lesson course, you will learn the basics of relational databases by creating a PostgreSQL database filled with video game characters." "In this 165 lesson course, you will learn the basics of a relational database by creating a PostgreSQL database filled with video game characters."
] ]
}, },
"learn-sql-by-building-a-student-database-part-1": { "learn-sql-by-building-a-student-database-part-1": {
"title": "Learn SQL by Building a Student Database: Part 1", "title": "Learn SQL by Building a Student Database: Part 1",
"intro": [ "intro": [
"SQL, or Structured Query Language, is the language for communicating with relational databases.", "SQL, or Structured Query Language, is the language for communicating with a relational database.",
"In this 140 lesson course, you will create a Bash script that uses SQL to enter information about your computer science students into PostgreSQL." "In this 140 lesson course, you will create a Bash script that uses SQL to enter information about your computer science students into PostgreSQL."
] ]
}, },

View File

@ -26,6 +26,6 @@
"HTML-CSS": "HTML-CSS", "HTML-CSS": "HTML-CSS",
"JavaScript": "JavaScript", "JavaScript": "JavaScript",
"Python": "Python", "Python": "Python",
"Relational Databases": "Relational Databases" "Backend Development": "Backend Development"
} }
} }

View File

@ -425,7 +425,7 @@
} }
} }
}, },
"relational-databases": { "relational-database": {
"title": "Bases de Datos Relacionales", "title": "Bases de Datos Relacionales",
"intro": [ "intro": [
"Para estos cursos, utilizarás herramientas y software de desarrollador reales, incluyendo VS Code, PostgreSQL y la línea de comandos de Linux / Unix para completar tutoriales interactivos y crear proyectos.", "Para estos cursos, utilizarás herramientas y software de desarrollador reales, incluyendo VS Code, PostgreSQL y la línea de comandos de Linux / Unix para completar tutoriales interactivos y crear proyectos.",

View File

@ -425,7 +425,7 @@
} }
} }
}, },
"relational-databases": { "relational-database": {
"title": "Database relazionali", "title": "Database relazionali",
"intro": [ "intro": [
"Per questi corsi, utilizzerai strumenti e software per veri sviluppatori tra cui VS Code, PostgreSQL, e la riga di comando Linux / Unix per completare i tutorial interattivi e costruire progetti.", "Per questi corsi, utilizzerai strumenti e software per veri sviluppatori tra cui VS Code, PostgreSQL, e la riga di comando Linux / Unix per completare i tutorial interattivi e costruire progetti.",

View File

@ -425,7 +425,7 @@
} }
} }
}, },
"relational-databases": { "relational-database": {
"title": "リレーショナルデータベース", "title": "リレーショナルデータベース",
"intro": [ "intro": [
"このコースでは、VS Code、PostgreSQL、そして Linux / Unix コマンドラインを含む本格的な開発者ツールとソフトウェアを使用して、インタラクティブなチュートリアルを完了し、プロジェクトを構築します。", "このコースでは、VS Code、PostgreSQL、そして Linux / Unix コマンドラインを含む本格的な開発者ツールとソフトウェアを使用して、インタラクティブなチュートリアルを完了し、プロジェクトを構築します。",

View File

@ -425,7 +425,7 @@
} }
} }
}, },
"relational-databases": { "relational-database": {
"title": "Bancos de dados relacionais", "title": "Bancos de dados relacionais",
"intro": [ "intro": [
"Para estes cursos, você usará ferramentas e software reais de desenvolvedor, incluindo o VS Code, PostgreSQL e a linha de comando do Linux/Unix para completar tutoriais interativos e criar projetos.", "Para estes cursos, você usará ferramentas e software reais de desenvolvedor, incluindo o VS Code, PostgreSQL e a linha de comando do Linux/Unix para completar tutoriais interativos e criar projetos.",

View File

@ -425,7 +425,7 @@
} }
} }
}, },
"relational-databases": { "relational-database": {
"title": "Реляційна база даних", "title": "Реляційна база даних",
"intro": [ "intro": [
"Для цих курсів ви будете використовувати реальні інструменти розробника та програмне забезпечення, включаючи VS-код, PostgreSQL, і командний рядок Linux / Unix для завершення інтерактивних уроків і створення проєктів.", "Для цих курсів ви будете використовувати реальні інструменти розробника та програмне забезпечення, включаючи VS-код, PostgreSQL, і командний рядок Linux / Unix для завершення інтерактивних уроків і створення проєктів.",

View File

@ -27,7 +27,7 @@ import {
import { User } from '../redux/prop-types'; import { User } from '../redux/prop-types';
import { submitNewAbout, updateUserFlag, verifyCert } from '../redux/settings'; import { submitNewAbout, updateUserFlag, verifyCert } from '../redux/settings';
const { apiLocation, showUpcomingChanges } = envData; const { apiLocation, deploymentEnv } = envData;
// TODO: update types for actions // TODO: update types for actions
interface ShowSettingsProps { interface ShowSettingsProps {
@ -98,6 +98,7 @@ export function ShowSettings(props: ShowSettingsProps): JSX.Element {
isSciCompPyCertV7, isSciCompPyCertV7,
isDataAnalysisPyCertV7, isDataAnalysisPyCertV7,
isMachineLearningPyCertV7, isMachineLearningPyCertV7,
isRelationalDatabaseCertV8,
isEmailVerified, isEmailVerified,
isHonest, isHonest,
sendQuincyEmail, sendQuincyEmail,
@ -195,13 +196,14 @@ export function ShowSettings(props: ShowSettingsProps): JSX.Element {
isJsAlgoDataStructCert={isJsAlgoDataStructCert} isJsAlgoDataStructCert={isJsAlgoDataStructCert}
isMachineLearningPyCertV7={isMachineLearningPyCertV7} isMachineLearningPyCertV7={isMachineLearningPyCertV7}
isQaCertV7={isQaCertV7} isQaCertV7={isQaCertV7}
isRelationalDatabaseCertV8={isRelationalDatabaseCertV8}
isRespWebDesignCert={isRespWebDesignCert} isRespWebDesignCert={isRespWebDesignCert}
isSciCompPyCertV7={isSciCompPyCertV7} isSciCompPyCertV7={isSciCompPyCertV7}
username={username} username={username}
verifyCert={verifyCert} verifyCert={verifyCert}
/> />
{showUpcomingChanges && <Spacer />} {deploymentEnv == 'staging' && <Spacer />}
{showUpcomingChanges && <WebhookToken />} {deploymentEnv == 'staging' && <WebhookToken />}
<Spacer /> <Spacer />
<DangerZone /> <DangerZone />
</main> </main>

View File

@ -70,7 +70,8 @@ const userProps = {
isRespWebDesignCert: true, isRespWebDesignCert: true,
isSciCompPyCertV7: true, isSciCompPyCertV7: true,
isDataAnalysisPyCertV7: true, isDataAnalysisPyCertV7: true,
isMachineLearningPyCertV7: true isMachineLearningPyCertV7: true,
isRelationalDatabaseCertV8: true
}, },
// eslint-disable-next-line @typescript-eslint/no-empty-function // eslint-disable-next-line @typescript-eslint/no-empty-function
navigate: () => {} navigate: () => {}

View File

@ -47,6 +47,7 @@ const propTypes = {
isJsAlgoDataStructCert: PropTypes.bool, isJsAlgoDataStructCert: PropTypes.bool,
isMachineLearningPyCertV7: PropTypes.bool, isMachineLearningPyCertV7: PropTypes.bool,
isQaCertV7: PropTypes.bool, isQaCertV7: PropTypes.bool,
isRelationalDatabaseCertV8: PropTypes.bool,
isRespWebDesignCert: PropTypes.bool, isRespWebDesignCert: PropTypes.bool,
isSciCompPyCertV7: PropTypes.bool, isSciCompPyCertV7: PropTypes.bool,
t: PropTypes.func.isRequired, t: PropTypes.func.isRequired,
@ -71,7 +72,8 @@ const isCertSelector = ({
isRespWebDesignCert, isRespWebDesignCert,
isSciCompPyCertV7, isSciCompPyCertV7,
isDataAnalysisPyCertV7, isDataAnalysisPyCertV7,
isMachineLearningPyCertV7 isMachineLearningPyCertV7,
isRelationalDatabaseCertV8
}) => ({ }) => ({
is2018DataVisCert, is2018DataVisCert,
isApisMicroservicesCert, isApisMicroservicesCert,
@ -87,7 +89,8 @@ const isCertSelector = ({
isRespWebDesignCert, isRespWebDesignCert,
isSciCompPyCertV7, isSciCompPyCertV7,
isDataAnalysisPyCertV7, isDataAnalysisPyCertV7,
isMachineLearningPyCertV7 isMachineLearningPyCertV7,
isRelationalDatabaseCertV8
}); });
const isCertMapSelector = createSelector( const isCertMapSelector = createSelector(
@ -106,7 +109,8 @@ const isCertMapSelector = createSelector(
isBackEndCert, isBackEndCert,
isSciCompPyCertV7, isSciCompPyCertV7,
isDataAnalysisPyCertV7, isDataAnalysisPyCertV7,
isMachineLearningPyCertV7 isMachineLearningPyCertV7,
isRelationalDatabaseCertV8
}) => ({ }) => ({
'Responsive Web Design': isRespWebDesignCert, 'Responsive Web Design': isRespWebDesignCert,
'JavaScript Algorithms and Data Structures': isJsAlgoDataStructCert, 'JavaScript Algorithms and Data Structures': isJsAlgoDataStructCert,
@ -118,6 +122,7 @@ const isCertMapSelector = createSelector(
'Scientific Computing with Python': isSciCompPyCertV7, 'Scientific Computing with Python': isSciCompPyCertV7,
'Data Analysis with Python': isDataAnalysisPyCertV7, 'Data Analysis with Python': isDataAnalysisPyCertV7,
'Machine Learning with Python': isMachineLearningPyCertV7, 'Machine Learning with Python': isMachineLearningPyCertV7,
'Relational Database': isRelationalDatabaseCertV8,
'Legacy Front End': isFrontEndCert, 'Legacy Front End': isFrontEndCert,
'Legacy Data Visualization': isDataVisCert, 'Legacy Data Visualization': isDataVisCert,
'Legacy Back End': isBackEndCert, 'Legacy Back End': isBackEndCert,
@ -164,7 +169,9 @@ export class CertificationSettings extends Component {
if (!completedProject) { if (!completedProject) {
return null; return null;
} }
const { solution, challengeFiles } = completedProject; const { solution, challengeFiles } = completedProject;
const onClickHandler = () => const onClickHandler = () =>
this.setState({ this.setState({
solutionViewer: { solutionViewer: {

View File

@ -233,6 +233,7 @@ const defaultTestProps = {
isSciCompPyCertV7: false, isSciCompPyCertV7: false,
isDataAnalysisPyCertV7: false, isDataAnalysisPyCertV7: false,
isMachineLearningPyCertV7: false, isMachineLearningPyCertV7: false,
isRelationalDatabaseCertV8: false,
username: 'developmentuser', username: 'developmentuser',
verifyCert: () => {}, verifyCert: () => {},
errors: {}, errors: {},

View File

@ -1,10 +1,10 @@
--- ---
title: Relational Databases title: Relational Database
superBlock: relational-databases superBlock: relational-database
certification: relational-databases certification: relational-database
--- ---
## Introduction to Relational Databases ## Introduction to Relational Database
This introduction is a stub This introduction is a stub

View File

@ -1,7 +1,7 @@
--- ---
title: Introduction to Relational Databases title: Introduction to Relational Databases
block: Learn Relational Databases block: Learn Relational Databases
superBlock: Relational Databases superBlock: Relational Database
--- ---
## Placeholder ## Placeholder

View File

@ -281,7 +281,7 @@ export const certificatesByNameSelector = username => state => {
isSciCompPyCertV7, isSciCompPyCertV7,
isDataAnalysisPyCertV7, isDataAnalysisPyCertV7,
isMachineLearningPyCertV7, isMachineLearningPyCertV7,
isRelationalDatabasesCertV8 isRelationalDatabaseCertV8
} = userByNameSelector(username)(state); } = userByNameSelector(username)(state);
return { return {
hasModernCert: hasModernCert:
@ -296,7 +296,7 @@ export const certificatesByNameSelector = username => state => {
isSciCompPyCertV7 || isSciCompPyCertV7 ||
isDataAnalysisPyCertV7 || isDataAnalysisPyCertV7 ||
isMachineLearningPyCertV7 || isMachineLearningPyCertV7 ||
isRelationalDatabasesCertV8, isRelationalDatabaseCertV8,
hasLegacyCert: hasLegacyCert:
isFrontEndCert || isBackEndCert || isDataVisCert || isInfosecQaCert, isFrontEndCert || isBackEndCert || isDataVisCert || isInfosecQaCert,
isFullStackCert, isFullStackCert,
@ -352,9 +352,9 @@ export const certificatesByNameSelector = username => state => {
certSlug: 'machine-learning-with-python-v7' certSlug: 'machine-learning-with-python-v7'
}, },
{ {
show: isRelationalDatabasesCertV8, show: isRelationalDatabaseCertV8,
title: 'Relational Databases Certification', title: 'Relational Database Certification',
certSlug: 'relational-databases-v8' certSlug: 'relational-database-v8'
} }
], ],
legacyCerts: [ legacyCerts: [

View File

@ -31,6 +31,7 @@ export const UserPropType = PropTypes.shape({
isQaCertV7: PropTypes.bool, isQaCertV7: PropTypes.bool,
isInfosecCertV7: PropTypes.bool, isInfosecCertV7: PropTypes.bool,
isJsAlgoDataStructCert: PropTypes.bool, isJsAlgoDataStructCert: PropTypes.bool,
isRelationalDatabaseCertV8: PropTypes.bool,
isRespWebDesignCert: PropTypes.bool, isRespWebDesignCert: PropTypes.bool,
isSciCompPyCertV7: PropTypes.bool, isSciCompPyCertV7: PropTypes.bool,
isDataAnalysisPyCertV7: PropTypes.bool, isDataAnalysisPyCertV7: PropTypes.bool,
@ -302,6 +303,7 @@ export type ClaimedCertifications = {
isQaCertV7: boolean; isQaCertV7: boolean;
isInfosecCertV7: boolean; isInfosecCertV7: boolean;
isJsAlgoDataStructCert: boolean; isJsAlgoDataStructCert: boolean;
isRelationalDatabaseCertV8: boolean;
isRespWebDesignCert: boolean; isRespWebDesignCert: boolean;
isSciCompPyCertV7: boolean; isSciCompPyCertV7: boolean;
isDataAnalysisPyCertV7: boolean; isDataAnalysisPyCertV7: boolean;

View File

@ -1,7 +1,7 @@
import { SuperBlocks } from '../../../config/certification-settings'; import { SuperBlocks } from '../../../config/certification-settings';
import envData from '../../../config/env.json'; import envData from '../../../config/env.json';
const { showNewCurriculum, showUpcomingChanges } = envData; const { deploymentEnv, showNewCurriculum, showUpcomingChanges } = envData;
const responsiveWebBase = const responsiveWebBase =
'/learn/responsive-web-design/responsive-web-design-projects'; '/learn/responsive-web-design/responsive-web-design-projects';
@ -12,8 +12,7 @@ const jsAlgoBase =
const feLibsBase = const feLibsBase =
'/learn/front-end-development-libraries/front-end-development-libraries-projects'; '/learn/front-end-development-libraries/front-end-development-libraries-projects';
const dataVisBase = '/learn/data-visualization/data-visualization-projects'; const dataVisBase = '/learn/data-visualization/data-visualization-projects';
const relationalDatabasesBase = const relationalDatabaseBase = '/learn/relational-database';
'/learn/relational-databases/learn-relational-databases';
const apiMicroBase = const apiMicroBase =
'/learn/back-end-development-and-apis/back-end-development-and-apis-projects'; '/learn/back-end-development-and-apis/back-end-development-and-apis-projects';
const qaBase = '/learn/quality-assurance/quality-assurance-projects'; const qaBase = '/learn/quality-assurance/quality-assurance-projects';
@ -458,39 +457,39 @@ const certMap = [
}, },
{ {
id: '606243f50267e718b1e755f4', id: '606243f50267e718b1e755f4',
title: 'Relational Databases', title: 'Relational Database',
certSlug: SuperBlocks.RelationalDb, certSlug: 'relational-database-v8',
flag: 'isRelationalDatabasesCert', flag: 'isRelationalDatabaseCertV8',
projects: [ projects: [
{ {
id: '5f1a4ef5d5d6b5ab580fc6ae', id: '5f1a4ef5d5d6b5ab580fc6ae',
title: 'Celestial Bodies Database', title: 'Celestial Bodies Database',
link: `${relationalDatabasesBase}/celestial-bodies-database`, link: `${relationalDatabaseBase}/build-a-celestial-bodies-database-project/build-a-celestial-bodies-database`,
superBlock: SuperBlocks.RelationalDb certSlug: 'relational-database-v8'
},
{
id: '5f87ac112ae598023a42df1a',
title: 'Salon Appointment Scheduler',
link: `${relationalDatabasesBase}/salon-appointment-scheduler`,
superBlock: SuperBlocks.RelationalDb
}, },
{ {
id: '5f9771307d4d22b9d2b75a94', id: '5f9771307d4d22b9d2b75a94',
title: 'World Cup Database', title: 'World Cup Database',
link: `${relationalDatabasesBase}/world-cup-database`, link: `${relationalDatabaseBase}/build-a-world-cup-database-project/build-a-world-cup-database`,
superBlock: SuperBlocks.RelationalDb certSlug: 'relational-database-v8'
},
{
id: '5f87ac112ae598023a42df1a',
title: 'Salon Appointment Scheduler',
link: `${relationalDatabaseBase}/build-a-salon-appointment-scheduler-project/build-a-salon-appointment-scheduler`,
certSlug: 'relational-database-v8'
}, },
{ {
id: '602d9ff222201c65d2a019f2', id: '602d9ff222201c65d2a019f2',
title: 'Periodic Table Database', title: 'Periodic Table Database',
link: `${relationalDatabasesBase}/periodic-table-database`, link: `${relationalDatabaseBase}/build-a-periodic-table-database-project/build-a-periodic-table-database`,
superBlock: SuperBlocks.RelationalDb certSlug: 'relational-database-v8'
}, },
{ {
id: '602da04c22201c65d2a019f4', id: '602da04c22201c65d2a019f4',
title: 'Number Guessing Game', title: 'Number Guessing Game',
link: `${relationalDatabasesBase}/number-guessing-game`, link: `${relationalDatabaseBase}/build-a-number-guessing-game-project/build-a-number-guessing-game`,
superBlock: SuperBlocks.RelationalDb certSlug: 'relational-database-v8'
} }
] ]
}, },
@ -746,8 +745,11 @@ certMap.forEach(cert => {
if (cert.title !== 'Legacy Full Stack') { if (cert.title !== 'Legacy Full Stack') {
if (cert.title.startsWith('Legacy')) { if (cert.title.startsWith('Legacy')) {
legacyProjectMap[cert.title] = cert.projects; legacyProjectMap[cert.title] = cert.projects;
// temporary hiding of RDBMS cert } else if (
// should do suggestion on line 33 and use front matter to hide it cert.title.startsWith('Relational') &&
deploymentEnv == 'staging'
) {
projectMap[cert.title] = cert.projects;
} else if (!cert.title.startsWith('Relational')) { } else if (!cert.title.startsWith('Relational')) {
projectMap[cert.title] = cert.projects; projectMap[cert.title] = cert.projects;
} }

View File

@ -115,16 +115,21 @@ class ShowCodeAlly extends Component<ShowCodeAllyProps, ShowCodeAllyState> {
componentDidMount(): void { componentDidMount(): void {
const { const {
updateChallengeMeta,
challengeMounted, challengeMounted,
data: { data: {
challengeNode: { challengeNode: {
challenge: { challengeType, title } challenge: { challengeType, helpCategory, title }
} }
}, },
pageContext: { challengeMeta } pageContext: { challengeMeta },
updateChallengeMeta
} = this.props; } = this.props;
updateChallengeMeta({ ...challengeMeta, title, challengeType }); updateChallengeMeta({
...challengeMeta,
title,
challengeType,
helpCategory
});
challengeMounted(challengeMeta.id); challengeMounted(challengeMeta.id);
this._container?.focus(); this._container?.focus();
} }

View File

@ -10,7 +10,7 @@ const {
getChallengesDirForLang getChallengesDirForLang
} = require('../../curriculum/getChallenges'); } = require('../../curriculum/getChallenges');
const { curriculumLocale } = envData; const { curriculumLocale, deploymentEnv } = envData;
exports.localeChallengesRootDir = getChallengesDirForLang(curriculumLocale); exports.localeChallengesRootDir = getChallengesDirForLang(curriculumLocale);
@ -38,6 +38,12 @@ exports.replaceChallengeNode = () => {
exports.buildChallenges = async function buildChallenges() { exports.buildChallenges = async function buildChallenges() {
const curriculum = await getChallengesForLang(curriculumLocale); const curriculum = await getChallengesForLang(curriculumLocale);
// temp removal of rdbms from production
if (deploymentEnv !== 'staging') {
delete curriculum['13-relational-databases'];
}
const superBlocks = Object.keys(curriculum); const superBlocks = Object.keys(curriculum);
const blocks = superBlocks const blocks = superBlocks
.map(superBlock => curriculum[superBlock].blocks) .map(superBlock => curriculum[superBlock].blocks)

View File

@ -14,7 +14,7 @@ export const certTypes = {
dataAnalysisPyV7: 'isDataAnalysisPyCertV7', dataAnalysisPyV7: 'isDataAnalysisPyCertV7',
machineLearningPyV7: 'isMachineLearningPyCertV7', machineLearningPyV7: 'isMachineLearningPyCertV7',
fullStack: 'isFullStackCert', fullStack: 'isFullStackCert',
relationalDatabasesV8: 'isRelationalDatabasesCertV8' relationalDatabaseV8: 'isRelationalDatabaseCertV8'
}; };
export enum SuperBlocks { export enum SuperBlocks {
@ -23,7 +23,7 @@ export enum SuperBlocks {
JsAlgoDataStruct = 'javascript-algorithms-and-data-structures', JsAlgoDataStruct = 'javascript-algorithms-and-data-structures',
FrontEndDevLibs = 'front-end-development-libraries', FrontEndDevLibs = 'front-end-development-libraries',
DataVis = 'data-visualization', DataVis = 'data-visualization',
RelationalDb = 'relational-databases', RelationalDb = 'relational-database',
BackEndDevApis = 'back-end-development-and-apis', BackEndDevApis = 'back-end-development-and-apis',
QualityAssurance = 'quality-assurance', QualityAssurance = 'quality-assurance',
SciCompPy = 'scientific-computing-with-python', SciCompPy = 'scientific-computing-with-python',
@ -49,7 +49,7 @@ export const certIds = {
sciCompPyV7Id: '5e44431b903586ffb414c951', sciCompPyV7Id: '5e44431b903586ffb414c951',
dataAnalysisPyV7Id: '5e46fc95ac417301a38fb934', dataAnalysisPyV7Id: '5e46fc95ac417301a38fb934',
machineLearningPyV7Id: '5e46fc95ac417301a38fb935', machineLearningPyV7Id: '5e46fc95ac417301a38fb935',
relationalDatabasesV8Id: '606243f50267e718b1e755f4' relationalDatabaseV8Id: '606243f50267e718b1e755f4'
}; };
export const completionHours = { export const completionHours = {
@ -68,7 +68,7 @@ export const completionHours = {
[certTypes.sciCompPyV7]: 300, [certTypes.sciCompPyV7]: 300,
[certTypes.dataAnalysisPyV7]: 300, [certTypes.dataAnalysisPyV7]: 300,
[certTypes.machineLearningPyV7]: 300, [certTypes.machineLearningPyV7]: 300,
[certTypes.relationalDatabasesV8]: 300 [certTypes.relationalDatabaseV8]: 300
}; };
export const certSlugTypeMap = { export const certSlugTypeMap = {
@ -92,7 +92,7 @@ export const certSlugTypeMap = {
'scientific-computing-with-python-v7': certTypes.sciCompPyV7, 'scientific-computing-with-python-v7': certTypes.sciCompPyV7,
'data-analysis-with-python-v7': certTypes.dataAnalysisPyV7, 'data-analysis-with-python-v7': certTypes.dataAnalysisPyV7,
'machine-learning-with-python-v7': certTypes.machineLearningPyV7, 'machine-learning-with-python-v7': certTypes.machineLearningPyV7,
'relational-databases-v8': certTypes.relationalDatabasesV8 'relational-database-v8': certTypes.relationalDatabaseV8
}; };
export const superBlockCertTypeMap = { export const superBlockCertTypeMap = {
@ -114,7 +114,7 @@ export const superBlockCertTypeMap = {
[SuperBlocks.SciCompPy]: certTypes.sciCompPyV7, [SuperBlocks.SciCompPy]: certTypes.sciCompPyV7,
[SuperBlocks.DataAnalysisPy]: certTypes.dataAnalysisPyV7, [SuperBlocks.DataAnalysisPy]: certTypes.dataAnalysisPyV7,
[SuperBlocks.MachineLearningPy]: certTypes.machineLearningPyV7, [SuperBlocks.MachineLearningPy]: certTypes.machineLearningPyV7,
[SuperBlocks.RelationalDb]: certTypes.relationalDatabasesV8, [SuperBlocks.RelationalDb]: certTypes.relationalDatabaseV8,
// post-modern // post-modern
// TODO: use enum // TODO: use enum
@ -137,7 +137,7 @@ export const certTypeIdMap = {
[certTypes.sciCompPyV7]: certIds.sciCompPyV7Id, [certTypes.sciCompPyV7]: certIds.sciCompPyV7Id,
[certTypes.dataAnalysisPyV7]: certIds.dataAnalysisPyV7Id, [certTypes.dataAnalysisPyV7]: certIds.dataAnalysisPyV7Id,
[certTypes.machineLearningPyV7]: certIds.machineLearningPyV7Id, [certTypes.machineLearningPyV7]: certIds.machineLearningPyV7Id,
[certTypes.relationalDatabasesV8]: certIds.relationalDatabasesV8Id [certTypes.relationalDatabaseV8]: certIds.relationalDatabaseV8Id
}; };
export const certTypeTitleMap = { export const certTypeTitleMap = {
@ -156,7 +156,7 @@ export const certTypeTitleMap = {
[certTypes.sciCompPyV7]: 'Scientific Computing with Python', [certTypes.sciCompPyV7]: 'Scientific Computing with Python',
[certTypes.dataAnalysisPyV7]: 'Data Analysis with Python', [certTypes.dataAnalysisPyV7]: 'Data Analysis with Python',
[certTypes.machineLearningPyV7]: 'Machine Learning with Python', [certTypes.machineLearningPyV7]: 'Machine Learning with Python',
[certTypes.relationalDatabasesV8]: 'Relational Databases' [certTypes.relationalDatabaseV8]: 'Relational Database'
}; };
export const oldDataVizId = '561add10cb82ac38a17513b3'; export const oldDataVizId = '561add10cb82ac38a17513b3';

View File

@ -1,11 +1,11 @@
{ {
"name": "Build a Celestial Bodies Database Project", "name": "Build a Celestial Bodies Database Project",
"isUpcomingChange": true, "isUpcomingChange": false,
"order": 2, "order": 2,
"time": "30 hours", "time": "30 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "relational-databases", "superBlock": "relational-database",
"challengeOrder": [ "challengeOrder": [
[ [
"5f1a4ef5d5d6b5ab580fc6ae", "5f1a4ef5d5d6b5ab580fc6ae",

View File

@ -1,11 +1,11 @@
{ {
"name": "Build a Number Guessing Game Project", "name": "Build a Number Guessing Game Project",
"isUpcomingChange": true, "isUpcomingChange": false,
"order": 13, "order": 13,
"time": "30 hours", "time": "30 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "relational-databases", "superBlock": "relational-database",
"challengeOrder": [ "challengeOrder": [
[ [
"602da04c22201c65d2a019f4", "602da04c22201c65d2a019f4",

View File

@ -1,11 +1,11 @@
{ {
"name": "Build a Periodic Table Database Project", "name": "Build a Periodic Table Database Project",
"isUpcomingChange": true, "isUpcomingChange": false,
"order": 12, "order": 12,
"time": "30 hours", "time": "30 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "relational-databases", "superBlock": "relational-database",
"challengeOrder": [ "challengeOrder": [
[ [
"602d9ff222201c65d2a019f2", "602d9ff222201c65d2a019f2",

View File

@ -1,11 +1,11 @@
{ {
"name": "Build a Salon Appointment Scheduler Project", "name": "Build a Salon Appointment Scheduler Project",
"isUpcomingChange": true, "isUpcomingChange": false,
"order": 9, "order": 9,
"time": "30 hours", "time": "30 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "relational-databases", "superBlock": "relational-database",
"challengeOrder": [ "challengeOrder": [
[ [
"5f87ac112ae598023a42df1a", "5f87ac112ae598023a42df1a",

View File

@ -1,11 +1,11 @@
{ {
"name": "Build a World Cup Database Project", "name": "Build a World Cup Database Project",
"isUpcomingChange": true, "isUpcomingChange": false,
"order": 6, "order": 6,
"time": "30 hours", "time": "30 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "relational-databases", "superBlock": "relational-database",
"challengeOrder": [ "challengeOrder": [
[ [
"5f9771307d4d22b9d2b75a94", "5f9771307d4d22b9d2b75a94",

View File

@ -1,11 +1,11 @@
{ {
"name": "Learn Advanced Bash by Building a Kitty Ipsum Translator", "name": "Learn Advanced Bash by Building a Kitty Ipsum Translator",
"isUpcomingChange": true, "isUpcomingChange": false,
"order": 7, "order": 7,
"time": "5 hours", "time": "5 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "relational-databases", "superBlock": "relational-database",
"challengeOrder": [ "challengeOrder": [
[ [
"602da0de22201c65d2a019f6", "602da0de22201c65d2a019f6",

View File

@ -1,11 +1,11 @@
{ {
"name": "Learn Bash and SQL by Building a Bike Rental Shop", "name": "Learn Bash and SQL by Building a Bike Rental Shop",
"isUpcomingChange": true, "isUpcomingChange": false,
"order": 8, "order": 8,
"time": "5 hours", "time": "5 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "relational-databases", "superBlock": "relational-database",
"challengeOrder": [ "challengeOrder": [
[ [
"5f5b969a05380d2179fe6e18", "5f5b969a05380d2179fe6e18",

View File

@ -1,11 +1,11 @@
{ {
"name": "Learn Bash by Building a Boilerplate", "name": "Learn Bash by Building a Boilerplate",
"isUpcomingChange": true, "isUpcomingChange": false,
"order": 0, "order": 0,
"time": "5 hours", "time": "5 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "relational-databases", "superBlock": "relational-database",
"challengeOrder": [ "challengeOrder": [
[ [
"5ea8adfab628f68d805bfc5e", "5ea8adfab628f68d805bfc5e",

View File

@ -1,11 +1,11 @@
{ {
"name": "Learn Bash Scripting by Building Five Programs", "name": "Learn Bash Scripting by Building Five Programs",
"isUpcomingChange": true, "isUpcomingChange": false,
"order": 3, "order": 3,
"time": "5 hours", "time": "5 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "relational-databases", "superBlock": "relational-database",
"challengeOrder": [ "challengeOrder": [
[ [
"5f5904ac738bc2fa9efecf5a", "5f5904ac738bc2fa9efecf5a",

View File

@ -1,11 +1,11 @@
{ {
"name": "Learn Git by Building an SQL Reference Object", "name": "Learn Git by Building an SQL Reference Object",
"isUpcomingChange": true, "isUpcomingChange": false,
"order": 11, "order": 11,
"time": "5 hours", "time": "5 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "relational-databases", "superBlock": "relational-database",
"challengeOrder": [ "challengeOrder": [
[ [
"5fa323cdaf6a73463d590659", "5fa323cdaf6a73463d590659",

View File

@ -1,11 +1,11 @@
{ {
"name": "Learn Nano by Building a Castle", "name": "Learn Nano by Building a Castle",
"isUpcomingChange": true, "isUpcomingChange": false,
"order": 10, "order": 10,
"time": "5 hours", "time": "5 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "relational-databases", "superBlock": "relational-database",
"challengeOrder": [ "challengeOrder": [
[ [
"5f32db63eb37f7e17323f459", "5f32db63eb37f7e17323f459",

View File

@ -1,11 +1,11 @@
{ {
"name": "Learn Relational Databases by Building a Mario Database", "name": "Learn Relational Databases by Building a Mario Database",
"isUpcomingChange": true, "isUpcomingChange": false,
"order": 1, "order": 1,
"time": "5 hours", "time": "5 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "relational-databases", "superBlock": "relational-database",
"challengeOrder": [ "challengeOrder": [
[ [
"5f2c289f164c29556da632fd", "5f2c289f164c29556da632fd",

View File

@ -1,11 +1,11 @@
{ {
"name": "Learn SQL by Building a Student Database: Part 1", "name": "Learn SQL by Building a Student Database: Part 1",
"isUpcomingChange": true, "isUpcomingChange": false,
"order": 4, "order": 4,
"time": "5 hours", "time": "5 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "relational-databases", "superBlock": "relational-database",
"challengeOrder": [ "challengeOrder": [
[ [
"602da0c222201c65d2a019f5", "602da0c222201c65d2a019f5",

View File

@ -1,11 +1,11 @@
{ {
"name": "Learn SQL by Building a Student Database: Part 2", "name": "Learn SQL by Building a Student Database: Part 2",
"isUpcomingChange": true, "isUpcomingChange": false,
"order": 5, "order": 5,
"time": "5 hours", "time": "5 hours",
"template": "", "template": "",
"required": [], "required": [],
"superBlock": "relational-databases", "superBlock": "relational-database",
"challengeOrder": [ "challengeOrder": [
[ [
"618590adb0730ca724e37672", "618590adb0730ca724e37672",

View File

@ -1,7 +1,7 @@
--- ---
id: 606243f50267e718b1e755f4 id: 606243f50267e718b1e755f4
title: 關係數據庫認證 title: 關係數據庫認證
certification: relational-databases certification: relational-database
challengeType: 7 challengeType: 7
isPrivate: true isPrivate: true
tests: tests:

View File

@ -1,7 +1,7 @@
--- ---
id: 606243f50267e718b1e755f4 id: 606243f50267e718b1e755f4
title: 关系数据库认证 title: 关系数据库认证
certification: relational-databases certification: relational-database
challengeType: 7 challengeType: 7
isPrivate: true isPrivate: true
tests: tests:

View File

@ -1,6 +1,6 @@
id: 606243f50267e718b1e755f4 id: 606243f50267e718b1e755f4
title: Relational Databases Certification title: Relational Database Certification
certification: relational-databases certification: relational-database
challengeType: 7 challengeType: 7
isPrivate: true isPrivate: true
tests: tests:

View File

@ -9,7 +9,7 @@ dashedName: build-a-mario-database
# --description-- # --description--
In this 165 lesson course, you will learn the basics of relational databases by creating a PostgreSQL database filled with video game characters. In this 165 lesson course, you will learn the basics of a relational database by creating a PostgreSQL database filled with video game characters.
# --instructions-- # --instructions--

View File

@ -1,7 +1,7 @@
--- ---
id: 606243f50267e718b1e755f4 id: 606243f50267e718b1e755f4
title: Certificación en Base de Datos Relacionales title: Certificación en Base de Datos Relacionales
certification: relational-databases certification: relational-database
challengeType: 7 challengeType: 7
isPrivate: true isPrivate: true
tests: tests:

View File

@ -1,7 +1,7 @@
--- ---
id: 606243f50267e718b1e755f4 id: 606243f50267e718b1e755f4
title: Certificazione Database Relazionali title: Certificazione Database Relazionali
certification: relational-databases certification: relational-database
challengeType: 7 challengeType: 7
isPrivate: true isPrivate: true
tests: tests:

View File

@ -1,7 +1,7 @@
--- ---
id: 606243f50267e718b1e755f4 id: 606243f50267e718b1e755f4
title: リレーショナルデータベース認定証 title: リレーショナルデータベース認定証
certification: relational-databases certification: relational-database
challengeType: 7 challengeType: 7
isPrivate: true isPrivate: true
tests: tests:

View File

@ -1,7 +1,7 @@
--- ---
id: 606243f50267e718b1e755f4 id: 606243f50267e718b1e755f4
title: Certificação de banco de dados relacional title: Certificação de banco de dados relacional
certification: relational-databases certification: relational-database
challengeType: 7 challengeType: 7
isPrivate: true isPrivate: true
tests: tests:

View File

@ -1,7 +1,7 @@
--- ---
id: 606243f50267e718b1e755f4 id: 606243f50267e718b1e755f4
title: Сертифікація реляційних баз даних title: Сертифікація реляційних баз даних
certification: relational-databases certification: relational-database
challengeType: 7 challengeType: 7
isPrivate: true isPrivate: true
tests: tests:

View File

@ -25,7 +25,7 @@ const superBlockToOrder = {
'javascript-algorithms-and-data-structures': 1, 'javascript-algorithms-and-data-structures': 1,
'front-end-development-libraries': 2, 'front-end-development-libraries': 2,
'data-visualization': 3, 'data-visualization': 3,
'relational-databases': 4, 'relational-database': 4,
'back-end-development-and-apis': 5, 'back-end-development-and-apis': 5,
'quality-assurance': 6, 'quality-assurance': 6,
'scientific-computing-with-python': 7, 'scientific-computing-with-python': 7,
@ -40,7 +40,7 @@ const superBlockToNewOrder = {
'javascript-algorithms-and-data-structures': 1, 'javascript-algorithms-and-data-structures': 1,
'front-end-development-libraries': 2, 'front-end-development-libraries': 2,
'data-visualization': 3, 'data-visualization': 3,
'relational-databases': 4, 'relational-database': 4,
'back-end-development-and-apis': 5, 'back-end-development-and-apis': 5,
'quality-assurance': 6, 'quality-assurance': 6,
'scientific-computing-with-python': 7, 'scientific-computing-with-python': 7,

View File

@ -25,7 +25,7 @@ describe('getSuperOrder', () => {
expect(getSuperOrder('javascript-algorithms-and-data-structures')).toBe(1); expect(getSuperOrder('javascript-algorithms-and-data-structures')).toBe(1);
expect(getSuperOrder('front-end-development-libraries')).toBe(2); expect(getSuperOrder('front-end-development-libraries')).toBe(2);
expect(getSuperOrder('data-visualization')).toBe(3); expect(getSuperOrder('data-visualization')).toBe(3);
expect(getSuperOrder('relational-databases')).toBe(4); expect(getSuperOrder('relational-database')).toBe(4);
expect(getSuperOrder('back-end-development-and-apis')).toBe(5); expect(getSuperOrder('back-end-development-and-apis')).toBe(5);
expect(getSuperOrder('quality-assurance')).toBe(6); expect(getSuperOrder('quality-assurance')).toBe(6);
expect(getSuperOrder('scientific-computing-with-python')).toBe(7); expect(getSuperOrder('scientific-computing-with-python')).toBe(7);
@ -54,7 +54,7 @@ describe('getSuperOrder', () => {
getSuperOrder('data-visualization', { showNewCurriculum: true }) getSuperOrder('data-visualization', { showNewCurriculum: true })
).toBe(3); ).toBe(3);
expect( expect(
getSuperOrder('relational-databases', { showNewCurriculum: true }) getSuperOrder('relational-database', { showNewCurriculum: true })
).toBe(4); ).toBe(4);
expect( expect(
getSuperOrder('back-end-development-and-apis', { getSuperOrder('back-end-development-and-apis', {

View File

@ -58,7 +58,7 @@ describe('Landing page', () => {
}); });
it('Has links to all the certifications', function () { it('Has links to all the certifications', function () {
cy.get(selectors.certifications).children().its('length').should('eq', 11); cy.get(selectors.certifications).children().its('length').should('eq', 12);
cy.wrap(certifications).each(cert => { cy.wrap(certifications).each(cert => {
cy.get(selectors.certifications).contains(cert); cy.get(selectors.certifications).contains(cert);
}); });

View File

@ -11,6 +11,7 @@ const superBlockNames = [
'JavaScript Algorithms and Data Structures Certification', 'JavaScript Algorithms and Data Structures Certification',
'Front End Development Libraries Certification', 'Front End Development Libraries Certification',
'Data Visualization Certification', 'Data Visualization Certification',
'Relational Database Certification',
'Back End Development and APIs Certification', 'Back End Development and APIs Certification',
'Quality Assurance Certification', 'Quality Assurance Certification',
'Scientific Computing with Python Certification', 'Scientific Computing with Python Certification',
@ -42,7 +43,7 @@ describe('Learn Landing page (not logged in)', () => {
const superBlocks = document.querySelectorAll( const superBlocks = document.querySelectorAll(
`${selectors.challengeMap} > li > a` `${selectors.challengeMap} > li > a`
); );
expect(superBlocks).to.have.length(12); expect(superBlocks).to.have.length(13);
superBlocks.forEach((superBlock, idx) => { superBlocks.forEach((superBlock, idx) => {
expect(superBlock.innerText).to.have.string(superBlockNames[idx]); expect(superBlock.innerText).to.have.string(superBlockNames[idx]);

View File

@ -10,7 +10,7 @@ describe('Settings certifications area', () => {
it('Should render the default settings page', () => { it('Should render the default settings page', () => {
cy.visit('/settings/'); cy.visit('/settings/');
cy.findAllByText('Claim Certification').should($btns => { cy.findAllByText('Claim Certification').should($btns => {
expect($btns).to.have.length(15); expect($btns).to.have.length(16);
}); });
cy.findByText('Show Certification').should('not.exist'); cy.findByText('Show Certification').should('not.exist');
cy.contains('Agree'); cy.contains('Agree');

View File

@ -34,6 +34,7 @@ module.exports = {
isSciCompPyCertV7: true, isSciCompPyCertV7: true,
isDataAnalysisPyCertV7: true, isDataAnalysisPyCertV7: true,
isMachineLearningPyCertV7: true, isMachineLearningPyCertV7: true,
isRelationalDatabaseCertV8: true,
completedChallenges: [ completedChallenges: [
{ id: 'bd7123c8c441eddfaeb5bdef', completedDate: 1475094716730, files: [] }, { id: 'bd7123c8c441eddfaeb5bdef', completedDate: 1475094716730, files: [] },
{ id: '5895f70bf9fc0f352b528e64', completedDate: 1537207306322, files: [] }, { id: '5895f70bf9fc0f352b528e64', completedDate: 1537207306322, files: [] },
@ -4628,6 +4629,82 @@ module.exports = {
completedDate: 1538239301985, completedDate: 1538239301985,
challengeType: 7, challengeType: 7,
files: [] files: []
},
{
completedDate: 1642566694752,
id: '602da04c22201c65d2a019f4',
files: []
},
{
completedDate: 1642566450182,
id: '602d9ff222201c65d2a019f2',
files: []
},
{
completedDate: 1642566442917,
id: '5fa323cdaf6a73463d590659',
files: []
},
{
completedDate: 1642566429622,
id: '5f32db63eb37f7e17323f459',
files: []
},
{
completedDate: 1642566416673,
id: '5f87ac112ae598023a42df1a',
files: []
},
{
completedDate: 1642566406680,
id: '5f5b969a05380d2179fe6e18',
files: []
},
{
completedDate: 1642566390464,
id: '602da0de22201c65d2a019f6',
files: []
},
{
completedDate: 1642566369992,
id: '5f9771307d4d22b9d2b75a94',
files: []
},
{
completedDate: 1642566358706,
id: '618590adb0730ca724e37672',
files: []
},
{
completedDate: 1642566353635,
id: '602da0c222201c65d2a019f5',
files: []
},
{
completedDate: 1642566336874,
id: '5f5904ac738bc2fa9efecf5a',
files: []
},
{
completedDate: 1642566305566,
id: '5f1a4ef5d5d6b5ab580fc6ae',
files: []
},
{
completedDate: 1642566297762,
id: '5f2c289f164c29556da632fd',
files: []
},
{
completedDate: 1642566255203,
id: '5ea8adfab628f68d805bfc5e',
files: []
},
{
completedDate: 1642615978255,
id: '606243f50267e718b1e755f4',
challengeType: 7,
files: []
} }
], ],
portfolio: [], portfolio: [],

View File

@ -59,6 +59,7 @@ const authUser = {
isSciCompPyCertV7: false, isSciCompPyCertV7: false,
isDataAnalysisPyCertV7: false, isDataAnalysisPyCertV7: false,
isMachineLearningPyCertV7: false, isMachineLearningPyCertV7: false,
isRelationalDatabaseCertV8: false,
completedChallenges: [], completedChallenges: [],
portfolio: [], portfolio: [],
yearsTopContributor: envVariables.includes('--top-contributor') yearsTopContributor: envVariables.includes('--top-contributor')
@ -118,6 +119,7 @@ const blankUser = {
isSciCompPyCertV7: false, isSciCompPyCertV7: false,
isDataAnalysisPyCertV7: false, isDataAnalysisPyCertV7: false,
isMachineLearningPyCertV7: false, isMachineLearningPyCertV7: false,
isRelationalDatabaseCertV8: false,
completedChallenges: [], completedChallenges: [],
portfolio: [], portfolio: [],
yearsTopContributor: [], yearsTopContributor: [],