From fd146084929d6d4c977e2d952359b45aeebe2c48 Mon Sep 17 00:00:00 2001
From: Tom <20648924+moT01@users.noreply.github.com>
Date: Fri, 18 Feb 2022 10:29:30 -0600
Subject: [PATCH] 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
---
api-server/src/common/models/user.json | 5 ++
api-server/src/server/boot/certificate.js | 13 ++--
api-server/src/server/boot/challenge.js | 8 +-
api-server/src/server/boot/user.js | 1 +
api-server/src/server/utils/certTypes.json | 2 +-
.../server/utils/getDynamicPropsForUser.js | 3 +-
.../src/server/utils/publicUserProps.js | 1 +
api-server/src/server/utils/user-stats.js | 3 +-
.../locales/chinese-traditional/intro.json | 2 +-
client/i18n/locales/chinese/intro.json | 2 +-
client/i18n/locales/english/intro.json | 12 +--
client/i18n/locales/english/links.json | 2 +-
client/i18n/locales/espanol/intro.json | 2 +-
client/i18n/locales/italian/intro.json | 2 +-
client/i18n/locales/japanese/intro.json | 2 +-
client/i18n/locales/portuguese/intro.json | 2 +-
client/i18n/locales/ukrainian/intro.json | 2 +-
.../src/client-only-routes/show-settings.tsx | 8 +-
.../src/components/profile/profile.test.tsx | 3 +-
.../src/components/settings/certification.js | 13 +++-
.../components/settings/certification.test.js | 1 +
.../index.md | 8 +-
.../learn-relational-databases/index.md | 2 +-
client/src/redux/index.js | 10 +--
client/src/redux/prop-types.ts | 2 +
client/src/resources/cert-and-project-map.ts | 46 +++++------
.../templates/Challenges/codeally/show.tsx | 13 +++-
client/utils/build-challenges.js | 8 +-
config/certification-settings.ts | 16 ++--
.../meta.json | 4 +-
.../meta.json | 4 +-
.../meta.json | 4 +-
.../meta.json | 4 +-
.../meta.json | 4 +-
.../meta.json | 4 +-
.../meta.json | 4 +-
.../meta.json | 4 +-
.../meta.json | 4 +-
.../meta.json | 4 +-
.../learn-nano-by-building-a-castle/meta.json | 4 +-
.../meta.json | 4 +-
.../meta.json | 4 +-
.../meta.json | 4 +-
.../relational-database-certification.yml} | 2 +-
.../relational-database-certification.yml} | 2 +-
.../relational-database-certification.yml} | 4 +-
.../build-a-mario-database.md | 2 +-
.../relational-database-certification.yml} | 2 +-
.../relational-database-certification.yml} | 2 +-
.../relational-database-certification.yml} | 2 +-
.../relational-database-certification.yml} | 2 +-
.../relational-database-certification.yml} | 2 +-
curriculum/utils.js | 4 +-
curriculum/utils.test.js | 4 +-
cypress/integration/landing.js | 2 +-
cypress/integration/learn/index.js | 3 +-
.../integration/settings/certifications.js | 2 +-
tools/scripts/seed/certifiedUserData.js | 77 +++++++++++++++++++
tools/scripts/seed/seedAuthUser.js | 2 +
59 files changed, 240 insertions(+), 124 deletions(-)
rename client/src/pages/learn/{relational-databases => relational-database}/index.md (50%)
rename client/src/pages/learn/{relational-databases => relational-database}/learn-relational-databases/index.md (77%)
rename curriculum/challenges/chinese-traditional/00-certifications/{relational-databases-certification/relational-databases-certification.yml => relational-database-certification/relational-database-certification.yml} (92%)
rename curriculum/challenges/chinese/00-certifications/{relational-databases-certification/relational-databases-certification.yml => relational-database-certification/relational-database-certification.yml} (92%)
rename curriculum/challenges/english/00-certifications/{relational-databases-certification/relational-databases-certification.yml => relational-database-certification/relational-database-certification.yml} (83%)
rename curriculum/challenges/espanol/00-certifications/{relational-databases-certification/relational-databases-certification.yml => relational-database-certification/relational-database-certification.yml} (93%)
rename curriculum/challenges/italian/00-certifications/{relational-databases-certification/relational-databases-certification.yml => relational-database-certification/relational-database-certification.yml} (93%)
rename curriculum/challenges/japanese/00-certifications/{relational-databases-certification/relational-databases-certification.yml => relational-database-certification/relational-database-certification.yml} (93%)
rename curriculum/challenges/portuguese/00-certifications/{relational-databases-certification/relational-databases-certification.yml => relational-database-certification/relational-database-certification.yml} (93%)
rename curriculum/challenges/ukrainian/00-certifications/{relational-databases-certification/relational-databases-certification.yml => relational-database-certification/relational-database-certification.yml} (94%)
diff --git a/api-server/src/common/models/user.json b/api-server/src/common/models/user.json
index c2ad7540d5..88419eaedb 100644
--- a/api-server/src/common/models/user.json
+++ b/api-server/src/common/models/user.json
@@ -200,6 +200,11 @@
"description": "Camper is machine learning with Python certified",
"default": false
},
+ "isRelationalDatabaseCertV8": {
+ "type": "boolean",
+ "description": "Camper is relational database certified",
+ "default": false
+ },
"completedChallenges": {
"type": [
{
diff --git a/api-server/src/server/boot/certificate.js b/api-server/src/server/boot/certificate.js
index 9f38a1189b..ebc438f122 100644
--- a/api-server/src/server/boot/certificate.js
+++ b/api-server/src/server/boot/certificate.js
@@ -36,7 +36,7 @@ const {
sciCompPyV7Id,
dataAnalysisPyV7Id,
machineLearningPyV7Id,
- relationalDatabasesV8Id
+ relationalDatabaseV8Id
} = certIds;
const log = debug('fcc:certification');
@@ -128,8 +128,8 @@ function createCertTypeIds(allChallenges) {
machineLearningPyV7Id,
allChallenges
),
- [certTypes.relationalDatabasesV8]: getCertById(
- relationalDatabasesV8Id,
+ [certTypes.relationalDatabaseV8]: getCertById(
+ relationalDatabaseV8Id,
allChallenges
)
};
@@ -217,7 +217,8 @@ function getUserIsCertMap(user) {
isFullStackCert = false,
isSciCompPyCertV7 = false,
isDataAnalysisPyCertV7 = false,
- isMachineLearningPyCertV7 = false
+ isMachineLearningPyCertV7 = false,
+ isRelationalDatabaseCertV8 = false
} = user;
return {
@@ -235,7 +236,8 @@ function getUserIsCertMap(user) {
isFullStackCert,
isSciCompPyCertV7,
isDataAnalysisPyCertV7,
- isMachineLearningPyCertV7
+ isMachineLearningPyCertV7,
+ isRelationalDatabaseCertV8
};
}
@@ -378,6 +380,7 @@ function createShowCert(app) {
isSciCompPyCertV7: true,
isDataAnalysisPyCertV7: true,
isMachineLearningPyCertV7: true,
+ isRelationalDatabaseCertV8: true,
isHonest: true,
username: true,
name: true,
diff --git a/api-server/src/server/boot/challenge.js b/api-server/src/server/boot/challenge.js
index 2b14a79f58..7a35072406 100644
--- a/api-server/src/server/boot/challenge.js
+++ b/api-server/src/server/boot/challenge.js
@@ -394,10 +394,8 @@ function createCoderoadChallengeCompleted(app) {
if (!userWebhookToken)
return res.send(`'coderoad-user-token' not found in request headers`);
- const tutorialRepoPath = tutorialId?.split(':')[0];
- const tutorialSplit = tutorialRepoPath?.split('/');
- const tutorialOrg = tutorialSplit?.[0];
- const tutorialRepoName = tutorialSplit?.[1];
+ const tutorialRepo = tutorialId?.split(':')[0];
+ const tutorialOrg = tutorialRepo?.split('/')?.[0];
// 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
@@ -408,7 +406,7 @@ function createCoderoadChallengeCompleted(app) {
// validate tutorial name is in codeRoadChallenges object
const challenge = codeRoadChallenges.find(challenge =>
- challenge.url?.includes(tutorialRepoName)
+ challenge.url?.endsWith(tutorialRepo)
);
if (!challenge) return res.send('Tutorial name is not valid');
diff --git a/api-server/src/server/boot/user.js b/api-server/src/server/boot/user.js
index e8b5af2bef..3bd732bad5 100644
--- a/api-server/src/server/boot/user.js
+++ b/api-server/src/server/boot/user.js
@@ -250,6 +250,7 @@ function postResetProgress(req, res, next) {
isSciCompPyCertV7: false,
isDataAnalysisPyCertV7: false,
isMachineLearningPyCertV7: false,
+ isRelationalDatabaseCertV8: false,
completedChallenges: []
},
function (err) {
diff --git a/api-server/src/server/utils/certTypes.json b/api-server/src/server/utils/certTypes.json
index 9d928781e8..5bf9b76dd0 100644
--- a/api-server/src/server/utils/certTypes.json
+++ b/api-server/src/server/utils/certTypes.json
@@ -14,5 +14,5 @@
"dataAnalysisPyV7": "isDataAnalysisPyCertV7",
"machineLearningPyV7": "isMachineLearningPyCertV7",
"fullStack": "isFullStackCert",
- "relationalDatabasesV8": "isRelationalDatabasesV8"
+ "relationalDatabaseV8": "isRelationalDatabaseV8"
}
diff --git a/api-server/src/server/utils/getDynamicPropsForUser.js b/api-server/src/server/utils/getDynamicPropsForUser.js
index e4700f438f..6f55c39c9d 100644
--- a/api-server/src/server/utils/getDynamicPropsForUser.js
+++ b/api-server/src/server/utils/getDynamicPropsForUser.js
@@ -9,7 +9,8 @@ function getCompletedCertCount(user) {
'isRespWebDesignCert',
'isSciCompPyCertV7',
'isDataAnalysisPyCertV7',
- 'isMachineLearningPyCertV7'
+ 'isMachineLearningPyCertV7',
+ 'isRelationalDatabaseCertV8'
].reduce((sum, key) => (user[key] ? sum + 1 : sum), 0);
}
diff --git a/api-server/src/server/utils/publicUserProps.js b/api-server/src/server/utils/publicUserProps.js
index 95fdeea73d..ca71fd21de 100644
--- a/api-server/src/server/utils/publicUserProps.js
+++ b/api-server/src/server/utils/publicUserProps.js
@@ -25,6 +25,7 @@ export const publicUserProps = [
'isQaCertV7',
'isInfosecCertV7',
'isJsAlgoDataStructCert',
+ 'isRelationalDatabaseCertV8',
'isRespWebDesignCert',
'isSciCompPyCertV7',
'isDataAnalysisPyCertV7',
diff --git a/api-server/src/server/utils/user-stats.js b/api-server/src/server/utils/user-stats.js
index 95203071b9..7acd506432 100644
--- a/api-server/src/server/utils/user-stats.js
+++ b/api-server/src/server/utils/user-stats.js
@@ -131,7 +131,8 @@ function getCompletedCertCount(user) {
'isRespWebDesignCert',
'isSciCompPyCertV7',
'isDataAnalysisPyCertV7',
- 'isMachineLearningPyCertV7'
+ 'isMachineLearningPyCertV7',
+ 'isRelationalDatabaseCertV8'
].reduce((sum, key) => (user[key] ? sum + 1 : sum), 0);
}
diff --git a/client/i18n/locales/chinese-traditional/intro.json b/client/i18n/locales/chinese-traditional/intro.json
index 93657bd14a..33eefcc545 100644
--- a/client/i18n/locales/chinese-traditional/intro.json
+++ b/client/i18n/locales/chinese-traditional/intro.json
@@ -425,7 +425,7 @@
}
}
},
- "relational-databases": {
+ "relational-database": {
"title": "關係型數據庫",
"intro": [
"對於這些課程,你將使用真正的開發者工具和軟件,包括 VS Code、PostgreSQL 和 Linux / Unix 命令行,來完成交互式教程和構建項目。",
diff --git a/client/i18n/locales/chinese/intro.json b/client/i18n/locales/chinese/intro.json
index 215327dc86..3b375486cf 100644
--- a/client/i18n/locales/chinese/intro.json
+++ b/client/i18n/locales/chinese/intro.json
@@ -425,7 +425,7 @@
}
}
},
- "relational-databases": {
+ "relational-database": {
"title": "关系型数据库",
"intro": [
"对于这些课程,你将使用真正的开发者工具和软件,包括 VS Code、PostgreSQL 和 Linux / Unix 命令行,来完成交互式教程和构建项目。",
diff --git a/client/i18n/locales/english/intro.json b/client/i18n/locales/english/intro.json
index 69e84d1b7f..b4d7d1b9fb 100644
--- a/client/i18n/locales/english/intro.json
+++ b/client/i18n/locales/english/intro.json
@@ -410,12 +410,12 @@
}
}
},
- "relational-databases": {
- "title": "Relational Databases",
+ "relational-database": {
+ "title": "Relational Database",
"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.",
"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."
],
"blocks": {
@@ -498,14 +498,14 @@
"learn-relational-databases-by-building-a-mario-database": {
"title": "Learn Relational Databases by Building a Mario Database",
"intro": [
- "Relational databases organize 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."
+ "A relational database organizes data into tables that are linked together through relationships.",
+ "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": {
"title": "Learn SQL by Building a Student Database: Part 1",
"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."
]
},
diff --git a/client/i18n/locales/english/links.json b/client/i18n/locales/english/links.json
index 3fb8e84afa..d94c781872 100644
--- a/client/i18n/locales/english/links.json
+++ b/client/i18n/locales/english/links.json
@@ -26,6 +26,6 @@
"HTML-CSS": "HTML-CSS",
"JavaScript": "JavaScript",
"Python": "Python",
- "Relational Databases": "Relational Databases"
+ "Backend Development": "Backend Development"
}
}
diff --git a/client/i18n/locales/espanol/intro.json b/client/i18n/locales/espanol/intro.json
index 81e08e9f4f..364033e512 100644
--- a/client/i18n/locales/espanol/intro.json
+++ b/client/i18n/locales/espanol/intro.json
@@ -425,7 +425,7 @@
}
}
},
- "relational-databases": {
+ "relational-database": {
"title": "Bases de Datos Relacionales",
"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.",
diff --git a/client/i18n/locales/italian/intro.json b/client/i18n/locales/italian/intro.json
index 481612df2b..2262230767 100644
--- a/client/i18n/locales/italian/intro.json
+++ b/client/i18n/locales/italian/intro.json
@@ -425,7 +425,7 @@
}
}
},
- "relational-databases": {
+ "relational-database": {
"title": "Database relazionali",
"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.",
diff --git a/client/i18n/locales/japanese/intro.json b/client/i18n/locales/japanese/intro.json
index 157ab71a55..2196a249d2 100644
--- a/client/i18n/locales/japanese/intro.json
+++ b/client/i18n/locales/japanese/intro.json
@@ -425,7 +425,7 @@
}
}
},
- "relational-databases": {
+ "relational-database": {
"title": "リレーショナルデータベース",
"intro": [
"このコースでは、VS Code、PostgreSQL、そして Linux / Unix コマンドラインを含む本格的な開発者ツールとソフトウェアを使用して、インタラクティブなチュートリアルを完了し、プロジェクトを構築します。",
diff --git a/client/i18n/locales/portuguese/intro.json b/client/i18n/locales/portuguese/intro.json
index d06bb95709..7cdde5c2cf 100644
--- a/client/i18n/locales/portuguese/intro.json
+++ b/client/i18n/locales/portuguese/intro.json
@@ -425,7 +425,7 @@
}
}
},
- "relational-databases": {
+ "relational-database": {
"title": "Bancos de dados relacionais",
"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.",
diff --git a/client/i18n/locales/ukrainian/intro.json b/client/i18n/locales/ukrainian/intro.json
index cb3710d9ea..b11f2aa570 100644
--- a/client/i18n/locales/ukrainian/intro.json
+++ b/client/i18n/locales/ukrainian/intro.json
@@ -425,7 +425,7 @@
}
}
},
- "relational-databases": {
+ "relational-database": {
"title": "Реляційна база даних",
"intro": [
"Для цих курсів ви будете використовувати реальні інструменти розробника та програмне забезпечення, включаючи VS-код, PostgreSQL, і командний рядок Linux / Unix для завершення інтерактивних уроків і створення проєктів.",
diff --git a/client/src/client-only-routes/show-settings.tsx b/client/src/client-only-routes/show-settings.tsx
index ced9d1fea1..c31ac63e98 100644
--- a/client/src/client-only-routes/show-settings.tsx
+++ b/client/src/client-only-routes/show-settings.tsx
@@ -27,7 +27,7 @@ import {
import { User } from '../redux/prop-types';
import { submitNewAbout, updateUserFlag, verifyCert } from '../redux/settings';
-const { apiLocation, showUpcomingChanges } = envData;
+const { apiLocation, deploymentEnv } = envData;
// TODO: update types for actions
interface ShowSettingsProps {
@@ -98,6 +98,7 @@ export function ShowSettings(props: ShowSettingsProps): JSX.Element {
isSciCompPyCertV7,
isDataAnalysisPyCertV7,
isMachineLearningPyCertV7,
+ isRelationalDatabaseCertV8,
isEmailVerified,
isHonest,
sendQuincyEmail,
@@ -195,13 +196,14 @@ export function ShowSettings(props: ShowSettingsProps): JSX.Element {
isJsAlgoDataStructCert={isJsAlgoDataStructCert}
isMachineLearningPyCertV7={isMachineLearningPyCertV7}
isQaCertV7={isQaCertV7}
+ isRelationalDatabaseCertV8={isRelationalDatabaseCertV8}
isRespWebDesignCert={isRespWebDesignCert}
isSciCompPyCertV7={isSciCompPyCertV7}
username={username}
verifyCert={verifyCert}
/>
- {showUpcomingChanges && }
- {showUpcomingChanges && }
+ {deploymentEnv == 'staging' && }
+ {deploymentEnv == 'staging' && }
diff --git a/client/src/components/profile/profile.test.tsx b/client/src/components/profile/profile.test.tsx
index dcf17cb0ef..5d4e5157c0 100644
--- a/client/src/components/profile/profile.test.tsx
+++ b/client/src/components/profile/profile.test.tsx
@@ -70,7 +70,8 @@ const userProps = {
isRespWebDesignCert: true,
isSciCompPyCertV7: true,
isDataAnalysisPyCertV7: true,
- isMachineLearningPyCertV7: true
+ isMachineLearningPyCertV7: true,
+ isRelationalDatabaseCertV8: true
},
// eslint-disable-next-line @typescript-eslint/no-empty-function
navigate: () => {}
diff --git a/client/src/components/settings/certification.js b/client/src/components/settings/certification.js
index 08ee698269..233137a5a5 100644
--- a/client/src/components/settings/certification.js
+++ b/client/src/components/settings/certification.js
@@ -47,6 +47,7 @@ const propTypes = {
isJsAlgoDataStructCert: PropTypes.bool,
isMachineLearningPyCertV7: PropTypes.bool,
isQaCertV7: PropTypes.bool,
+ isRelationalDatabaseCertV8: PropTypes.bool,
isRespWebDesignCert: PropTypes.bool,
isSciCompPyCertV7: PropTypes.bool,
t: PropTypes.func.isRequired,
@@ -71,7 +72,8 @@ const isCertSelector = ({
isRespWebDesignCert,
isSciCompPyCertV7,
isDataAnalysisPyCertV7,
- isMachineLearningPyCertV7
+ isMachineLearningPyCertV7,
+ isRelationalDatabaseCertV8
}) => ({
is2018DataVisCert,
isApisMicroservicesCert,
@@ -87,7 +89,8 @@ const isCertSelector = ({
isRespWebDesignCert,
isSciCompPyCertV7,
isDataAnalysisPyCertV7,
- isMachineLearningPyCertV7
+ isMachineLearningPyCertV7,
+ isRelationalDatabaseCertV8
});
const isCertMapSelector = createSelector(
@@ -106,7 +109,8 @@ const isCertMapSelector = createSelector(
isBackEndCert,
isSciCompPyCertV7,
isDataAnalysisPyCertV7,
- isMachineLearningPyCertV7
+ isMachineLearningPyCertV7,
+ isRelationalDatabaseCertV8
}) => ({
'Responsive Web Design': isRespWebDesignCert,
'JavaScript Algorithms and Data Structures': isJsAlgoDataStructCert,
@@ -118,6 +122,7 @@ const isCertMapSelector = createSelector(
'Scientific Computing with Python': isSciCompPyCertV7,
'Data Analysis with Python': isDataAnalysisPyCertV7,
'Machine Learning with Python': isMachineLearningPyCertV7,
+ 'Relational Database': isRelationalDatabaseCertV8,
'Legacy Front End': isFrontEndCert,
'Legacy Data Visualization': isDataVisCert,
'Legacy Back End': isBackEndCert,
@@ -164,7 +169,9 @@ export class CertificationSettings extends Component {
if (!completedProject) {
return null;
}
+
const { solution, challengeFiles } = completedProject;
+
const onClickHandler = () =>
this.setState({
solutionViewer: {
diff --git a/client/src/components/settings/certification.test.js b/client/src/components/settings/certification.test.js
index a85b65d573..ec30f974d5 100644
--- a/client/src/components/settings/certification.test.js
+++ b/client/src/components/settings/certification.test.js
@@ -233,6 +233,7 @@ const defaultTestProps = {
isSciCompPyCertV7: false,
isDataAnalysisPyCertV7: false,
isMachineLearningPyCertV7: false,
+ isRelationalDatabaseCertV8: false,
username: 'developmentuser',
verifyCert: () => {},
errors: {},
diff --git a/client/src/pages/learn/relational-databases/index.md b/client/src/pages/learn/relational-database/index.md
similarity index 50%
rename from client/src/pages/learn/relational-databases/index.md
rename to client/src/pages/learn/relational-database/index.md
index afce9c161d..02c0a75dbd 100644
--- a/client/src/pages/learn/relational-databases/index.md
+++ b/client/src/pages/learn/relational-database/index.md
@@ -1,10 +1,10 @@
---
-title: Relational Databases
-superBlock: relational-databases
-certification: relational-databases
+title: Relational Database
+superBlock: relational-database
+certification: relational-database
---
-## Introduction to Relational Databases
+## Introduction to Relational Database
This introduction is a stub
diff --git a/client/src/pages/learn/relational-databases/learn-relational-databases/index.md b/client/src/pages/learn/relational-database/learn-relational-databases/index.md
similarity index 77%
rename from client/src/pages/learn/relational-databases/learn-relational-databases/index.md
rename to client/src/pages/learn/relational-database/learn-relational-databases/index.md
index 1ca88646e8..57d5e35f03 100644
--- a/client/src/pages/learn/relational-databases/learn-relational-databases/index.md
+++ b/client/src/pages/learn/relational-database/learn-relational-databases/index.md
@@ -1,7 +1,7 @@
---
title: Introduction to Relational Databases
block: Learn Relational Databases
-superBlock: Relational Databases
+superBlock: Relational Database
---
## Placeholder
diff --git a/client/src/redux/index.js b/client/src/redux/index.js
index fe94146a40..16fbb5e8dd 100644
--- a/client/src/redux/index.js
+++ b/client/src/redux/index.js
@@ -281,7 +281,7 @@ export const certificatesByNameSelector = username => state => {
isSciCompPyCertV7,
isDataAnalysisPyCertV7,
isMachineLearningPyCertV7,
- isRelationalDatabasesCertV8
+ isRelationalDatabaseCertV8
} = userByNameSelector(username)(state);
return {
hasModernCert:
@@ -296,7 +296,7 @@ export const certificatesByNameSelector = username => state => {
isSciCompPyCertV7 ||
isDataAnalysisPyCertV7 ||
isMachineLearningPyCertV7 ||
- isRelationalDatabasesCertV8,
+ isRelationalDatabaseCertV8,
hasLegacyCert:
isFrontEndCert || isBackEndCert || isDataVisCert || isInfosecQaCert,
isFullStackCert,
@@ -352,9 +352,9 @@ export const certificatesByNameSelector = username => state => {
certSlug: 'machine-learning-with-python-v7'
},
{
- show: isRelationalDatabasesCertV8,
- title: 'Relational Databases Certification',
- certSlug: 'relational-databases-v8'
+ show: isRelationalDatabaseCertV8,
+ title: 'Relational Database Certification',
+ certSlug: 'relational-database-v8'
}
],
legacyCerts: [
diff --git a/client/src/redux/prop-types.ts b/client/src/redux/prop-types.ts
index a637269ebb..ca0a538ffa 100644
--- a/client/src/redux/prop-types.ts
+++ b/client/src/redux/prop-types.ts
@@ -31,6 +31,7 @@ export const UserPropType = PropTypes.shape({
isQaCertV7: PropTypes.bool,
isInfosecCertV7: PropTypes.bool,
isJsAlgoDataStructCert: PropTypes.bool,
+ isRelationalDatabaseCertV8: PropTypes.bool,
isRespWebDesignCert: PropTypes.bool,
isSciCompPyCertV7: PropTypes.bool,
isDataAnalysisPyCertV7: PropTypes.bool,
@@ -302,6 +303,7 @@ export type ClaimedCertifications = {
isQaCertV7: boolean;
isInfosecCertV7: boolean;
isJsAlgoDataStructCert: boolean;
+ isRelationalDatabaseCertV8: boolean;
isRespWebDesignCert: boolean;
isSciCompPyCertV7: boolean;
isDataAnalysisPyCertV7: boolean;
diff --git a/client/src/resources/cert-and-project-map.ts b/client/src/resources/cert-and-project-map.ts
index e8ea47859c..c76fb09b45 100644
--- a/client/src/resources/cert-and-project-map.ts
+++ b/client/src/resources/cert-and-project-map.ts
@@ -1,7 +1,7 @@
import { SuperBlocks } from '../../../config/certification-settings';
import envData from '../../../config/env.json';
-const { showNewCurriculum, showUpcomingChanges } = envData;
+const { deploymentEnv, showNewCurriculum, showUpcomingChanges } = envData;
const responsiveWebBase =
'/learn/responsive-web-design/responsive-web-design-projects';
@@ -12,8 +12,7 @@ const jsAlgoBase =
const feLibsBase =
'/learn/front-end-development-libraries/front-end-development-libraries-projects';
const dataVisBase = '/learn/data-visualization/data-visualization-projects';
-const relationalDatabasesBase =
- '/learn/relational-databases/learn-relational-databases';
+const relationalDatabaseBase = '/learn/relational-database';
const apiMicroBase =
'/learn/back-end-development-and-apis/back-end-development-and-apis-projects';
const qaBase = '/learn/quality-assurance/quality-assurance-projects';
@@ -458,39 +457,39 @@ const certMap = [
},
{
id: '606243f50267e718b1e755f4',
- title: 'Relational Databases',
- certSlug: SuperBlocks.RelationalDb,
- flag: 'isRelationalDatabasesCert',
+ title: 'Relational Database',
+ certSlug: 'relational-database-v8',
+ flag: 'isRelationalDatabaseCertV8',
projects: [
{
id: '5f1a4ef5d5d6b5ab580fc6ae',
title: 'Celestial Bodies Database',
- link: `${relationalDatabasesBase}/celestial-bodies-database`,
- superBlock: SuperBlocks.RelationalDb
- },
- {
- id: '5f87ac112ae598023a42df1a',
- title: 'Salon Appointment Scheduler',
- link: `${relationalDatabasesBase}/salon-appointment-scheduler`,
- superBlock: SuperBlocks.RelationalDb
+ link: `${relationalDatabaseBase}/build-a-celestial-bodies-database-project/build-a-celestial-bodies-database`,
+ certSlug: 'relational-database-v8'
},
{
id: '5f9771307d4d22b9d2b75a94',
title: 'World Cup Database',
- link: `${relationalDatabasesBase}/world-cup-database`,
- superBlock: SuperBlocks.RelationalDb
+ link: `${relationalDatabaseBase}/build-a-world-cup-database-project/build-a-world-cup-database`,
+ 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',
title: 'Periodic Table Database',
- link: `${relationalDatabasesBase}/periodic-table-database`,
- superBlock: SuperBlocks.RelationalDb
+ link: `${relationalDatabaseBase}/build-a-periodic-table-database-project/build-a-periodic-table-database`,
+ certSlug: 'relational-database-v8'
},
{
id: '602da04c22201c65d2a019f4',
title: 'Number Guessing Game',
- link: `${relationalDatabasesBase}/number-guessing-game`,
- superBlock: SuperBlocks.RelationalDb
+ link: `${relationalDatabaseBase}/build-a-number-guessing-game-project/build-a-number-guessing-game`,
+ certSlug: 'relational-database-v8'
}
]
},
@@ -746,8 +745,11 @@ certMap.forEach(cert => {
if (cert.title !== 'Legacy Full Stack') {
if (cert.title.startsWith('Legacy')) {
legacyProjectMap[cert.title] = cert.projects;
- // temporary hiding of RDBMS cert
- // should do suggestion on line 33 and use front matter to hide it
+ } else if (
+ cert.title.startsWith('Relational') &&
+ deploymentEnv == 'staging'
+ ) {
+ projectMap[cert.title] = cert.projects;
} else if (!cert.title.startsWith('Relational')) {
projectMap[cert.title] = cert.projects;
}
diff --git a/client/src/templates/Challenges/codeally/show.tsx b/client/src/templates/Challenges/codeally/show.tsx
index 883deb9236..fa54870ce7 100644
--- a/client/src/templates/Challenges/codeally/show.tsx
+++ b/client/src/templates/Challenges/codeally/show.tsx
@@ -115,16 +115,21 @@ class ShowCodeAlly extends Component {
componentDidMount(): void {
const {
- updateChallengeMeta,
challengeMounted,
data: {
challengeNode: {
- challenge: { challengeType, title }
+ challenge: { challengeType, helpCategory, title }
}
},
- pageContext: { challengeMeta }
+ pageContext: { challengeMeta },
+ updateChallengeMeta
} = this.props;
- updateChallengeMeta({ ...challengeMeta, title, challengeType });
+ updateChallengeMeta({
+ ...challengeMeta,
+ title,
+ challengeType,
+ helpCategory
+ });
challengeMounted(challengeMeta.id);
this._container?.focus();
}
diff --git a/client/utils/build-challenges.js b/client/utils/build-challenges.js
index 06d8bb882d..a15a521aa4 100644
--- a/client/utils/build-challenges.js
+++ b/client/utils/build-challenges.js
@@ -10,7 +10,7 @@ const {
getChallengesDirForLang
} = require('../../curriculum/getChallenges');
-const { curriculumLocale } = envData;
+const { curriculumLocale, deploymentEnv } = envData;
exports.localeChallengesRootDir = getChallengesDirForLang(curriculumLocale);
@@ -38,6 +38,12 @@ exports.replaceChallengeNode = () => {
exports.buildChallenges = async function buildChallenges() {
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 blocks = superBlocks
.map(superBlock => curriculum[superBlock].blocks)
diff --git a/config/certification-settings.ts b/config/certification-settings.ts
index a4f26e4222..b77396bb8a 100644
--- a/config/certification-settings.ts
+++ b/config/certification-settings.ts
@@ -14,7 +14,7 @@ export const certTypes = {
dataAnalysisPyV7: 'isDataAnalysisPyCertV7',
machineLearningPyV7: 'isMachineLearningPyCertV7',
fullStack: 'isFullStackCert',
- relationalDatabasesV8: 'isRelationalDatabasesCertV8'
+ relationalDatabaseV8: 'isRelationalDatabaseCertV8'
};
export enum SuperBlocks {
@@ -23,7 +23,7 @@ export enum SuperBlocks {
JsAlgoDataStruct = 'javascript-algorithms-and-data-structures',
FrontEndDevLibs = 'front-end-development-libraries',
DataVis = 'data-visualization',
- RelationalDb = 'relational-databases',
+ RelationalDb = 'relational-database',
BackEndDevApis = 'back-end-development-and-apis',
QualityAssurance = 'quality-assurance',
SciCompPy = 'scientific-computing-with-python',
@@ -49,7 +49,7 @@ export const certIds = {
sciCompPyV7Id: '5e44431b903586ffb414c951',
dataAnalysisPyV7Id: '5e46fc95ac417301a38fb934',
machineLearningPyV7Id: '5e46fc95ac417301a38fb935',
- relationalDatabasesV8Id: '606243f50267e718b1e755f4'
+ relationalDatabaseV8Id: '606243f50267e718b1e755f4'
};
export const completionHours = {
@@ -68,7 +68,7 @@ export const completionHours = {
[certTypes.sciCompPyV7]: 300,
[certTypes.dataAnalysisPyV7]: 300,
[certTypes.machineLearningPyV7]: 300,
- [certTypes.relationalDatabasesV8]: 300
+ [certTypes.relationalDatabaseV8]: 300
};
export const certSlugTypeMap = {
@@ -92,7 +92,7 @@ export const certSlugTypeMap = {
'scientific-computing-with-python-v7': certTypes.sciCompPyV7,
'data-analysis-with-python-v7': certTypes.dataAnalysisPyV7,
'machine-learning-with-python-v7': certTypes.machineLearningPyV7,
- 'relational-databases-v8': certTypes.relationalDatabasesV8
+ 'relational-database-v8': certTypes.relationalDatabaseV8
};
export const superBlockCertTypeMap = {
@@ -114,7 +114,7 @@ export const superBlockCertTypeMap = {
[SuperBlocks.SciCompPy]: certTypes.sciCompPyV7,
[SuperBlocks.DataAnalysisPy]: certTypes.dataAnalysisPyV7,
[SuperBlocks.MachineLearningPy]: certTypes.machineLearningPyV7,
- [SuperBlocks.RelationalDb]: certTypes.relationalDatabasesV8,
+ [SuperBlocks.RelationalDb]: certTypes.relationalDatabaseV8,
// post-modern
// TODO: use enum
@@ -137,7 +137,7 @@ export const certTypeIdMap = {
[certTypes.sciCompPyV7]: certIds.sciCompPyV7Id,
[certTypes.dataAnalysisPyV7]: certIds.dataAnalysisPyV7Id,
[certTypes.machineLearningPyV7]: certIds.machineLearningPyV7Id,
- [certTypes.relationalDatabasesV8]: certIds.relationalDatabasesV8Id
+ [certTypes.relationalDatabaseV8]: certIds.relationalDatabaseV8Id
};
export const certTypeTitleMap = {
@@ -156,7 +156,7 @@ export const certTypeTitleMap = {
[certTypes.sciCompPyV7]: 'Scientific Computing with Python',
[certTypes.dataAnalysisPyV7]: 'Data Analysis with Python',
[certTypes.machineLearningPyV7]: 'Machine Learning with Python',
- [certTypes.relationalDatabasesV8]: 'Relational Databases'
+ [certTypes.relationalDatabaseV8]: 'Relational Database'
};
export const oldDataVizId = '561add10cb82ac38a17513b3';
diff --git a/curriculum/challenges/_meta/build-a-celestial-bodies-database-project/meta.json b/curriculum/challenges/_meta/build-a-celestial-bodies-database-project/meta.json
index 68c4ceb839..88ecc38e2b 100644
--- a/curriculum/challenges/_meta/build-a-celestial-bodies-database-project/meta.json
+++ b/curriculum/challenges/_meta/build-a-celestial-bodies-database-project/meta.json
@@ -1,11 +1,11 @@
{
"name": "Build a Celestial Bodies Database Project",
- "isUpcomingChange": true,
+ "isUpcomingChange": false,
"order": 2,
"time": "30 hours",
"template": "",
"required": [],
- "superBlock": "relational-databases",
+ "superBlock": "relational-database",
"challengeOrder": [
[
"5f1a4ef5d5d6b5ab580fc6ae",
diff --git a/curriculum/challenges/_meta/build-a-number-guessing-game-project/meta.json b/curriculum/challenges/_meta/build-a-number-guessing-game-project/meta.json
index ba24ecc4a5..6456dcd700 100644
--- a/curriculum/challenges/_meta/build-a-number-guessing-game-project/meta.json
+++ b/curriculum/challenges/_meta/build-a-number-guessing-game-project/meta.json
@@ -1,11 +1,11 @@
{
"name": "Build a Number Guessing Game Project",
- "isUpcomingChange": true,
+ "isUpcomingChange": false,
"order": 13,
"time": "30 hours",
"template": "",
"required": [],
- "superBlock": "relational-databases",
+ "superBlock": "relational-database",
"challengeOrder": [
[
"602da04c22201c65d2a019f4",
diff --git a/curriculum/challenges/_meta/build-a-periodic-table-database-project/meta.json b/curriculum/challenges/_meta/build-a-periodic-table-database-project/meta.json
index 79a4746a3e..d6814a81f1 100644
--- a/curriculum/challenges/_meta/build-a-periodic-table-database-project/meta.json
+++ b/curriculum/challenges/_meta/build-a-periodic-table-database-project/meta.json
@@ -1,11 +1,11 @@
{
"name": "Build a Periodic Table Database Project",
- "isUpcomingChange": true,
+ "isUpcomingChange": false,
"order": 12,
"time": "30 hours",
"template": "",
"required": [],
- "superBlock": "relational-databases",
+ "superBlock": "relational-database",
"challengeOrder": [
[
"602d9ff222201c65d2a019f2",
diff --git a/curriculum/challenges/_meta/build-a-salon-appointment-scheduler-project/meta.json b/curriculum/challenges/_meta/build-a-salon-appointment-scheduler-project/meta.json
index 6aae90b711..151e920c3e 100644
--- a/curriculum/challenges/_meta/build-a-salon-appointment-scheduler-project/meta.json
+++ b/curriculum/challenges/_meta/build-a-salon-appointment-scheduler-project/meta.json
@@ -1,11 +1,11 @@
{
"name": "Build a Salon Appointment Scheduler Project",
- "isUpcomingChange": true,
+ "isUpcomingChange": false,
"order": 9,
"time": "30 hours",
"template": "",
"required": [],
- "superBlock": "relational-databases",
+ "superBlock": "relational-database",
"challengeOrder": [
[
"5f87ac112ae598023a42df1a",
diff --git a/curriculum/challenges/_meta/build-a-world-cup-database-project/meta.json b/curriculum/challenges/_meta/build-a-world-cup-database-project/meta.json
index d9fa1f4266..95d26a56ed 100644
--- a/curriculum/challenges/_meta/build-a-world-cup-database-project/meta.json
+++ b/curriculum/challenges/_meta/build-a-world-cup-database-project/meta.json
@@ -1,11 +1,11 @@
{
"name": "Build a World Cup Database Project",
- "isUpcomingChange": true,
+ "isUpcomingChange": false,
"order": 6,
"time": "30 hours",
"template": "",
"required": [],
- "superBlock": "relational-databases",
+ "superBlock": "relational-database",
"challengeOrder": [
[
"5f9771307d4d22b9d2b75a94",
diff --git a/curriculum/challenges/_meta/learn-advanced-bash-by-building-a-kitty-ipsum-translator/meta.json b/curriculum/challenges/_meta/learn-advanced-bash-by-building-a-kitty-ipsum-translator/meta.json
index 1ac4caca34..f0c97ea190 100644
--- a/curriculum/challenges/_meta/learn-advanced-bash-by-building-a-kitty-ipsum-translator/meta.json
+++ b/curriculum/challenges/_meta/learn-advanced-bash-by-building-a-kitty-ipsum-translator/meta.json
@@ -1,11 +1,11 @@
{
"name": "Learn Advanced Bash by Building a Kitty Ipsum Translator",
- "isUpcomingChange": true,
+ "isUpcomingChange": false,
"order": 7,
"time": "5 hours",
"template": "",
"required": [],
- "superBlock": "relational-databases",
+ "superBlock": "relational-database",
"challengeOrder": [
[
"602da0de22201c65d2a019f6",
diff --git a/curriculum/challenges/_meta/learn-bash-and-sql-by-building-a-bike-rental-shop/meta.json b/curriculum/challenges/_meta/learn-bash-and-sql-by-building-a-bike-rental-shop/meta.json
index 60ee24ea16..f39348ff16 100644
--- a/curriculum/challenges/_meta/learn-bash-and-sql-by-building-a-bike-rental-shop/meta.json
+++ b/curriculum/challenges/_meta/learn-bash-and-sql-by-building-a-bike-rental-shop/meta.json
@@ -1,11 +1,11 @@
{
"name": "Learn Bash and SQL by Building a Bike Rental Shop",
- "isUpcomingChange": true,
+ "isUpcomingChange": false,
"order": 8,
"time": "5 hours",
"template": "",
"required": [],
- "superBlock": "relational-databases",
+ "superBlock": "relational-database",
"challengeOrder": [
[
"5f5b969a05380d2179fe6e18",
diff --git a/curriculum/challenges/_meta/learn-bash-by-building-a-boilerplate/meta.json b/curriculum/challenges/_meta/learn-bash-by-building-a-boilerplate/meta.json
index 5ad28f5376..d81bb52045 100644
--- a/curriculum/challenges/_meta/learn-bash-by-building-a-boilerplate/meta.json
+++ b/curriculum/challenges/_meta/learn-bash-by-building-a-boilerplate/meta.json
@@ -1,11 +1,11 @@
{
"name": "Learn Bash by Building a Boilerplate",
- "isUpcomingChange": true,
+ "isUpcomingChange": false,
"order": 0,
"time": "5 hours",
"template": "",
"required": [],
- "superBlock": "relational-databases",
+ "superBlock": "relational-database",
"challengeOrder": [
[
"5ea8adfab628f68d805bfc5e",
diff --git a/curriculum/challenges/_meta/learn-bash-scripting-by-building-five-programs/meta.json b/curriculum/challenges/_meta/learn-bash-scripting-by-building-five-programs/meta.json
index 4a20b841ab..d4f9dd1ee0 100644
--- a/curriculum/challenges/_meta/learn-bash-scripting-by-building-five-programs/meta.json
+++ b/curriculum/challenges/_meta/learn-bash-scripting-by-building-five-programs/meta.json
@@ -1,11 +1,11 @@
{
"name": "Learn Bash Scripting by Building Five Programs",
- "isUpcomingChange": true,
+ "isUpcomingChange": false,
"order": 3,
"time": "5 hours",
"template": "",
"required": [],
- "superBlock": "relational-databases",
+ "superBlock": "relational-database",
"challengeOrder": [
[
"5f5904ac738bc2fa9efecf5a",
diff --git a/curriculum/challenges/_meta/learn-git-by-building-an-sql-reference-object/meta.json b/curriculum/challenges/_meta/learn-git-by-building-an-sql-reference-object/meta.json
index deba86d91b..1952706d55 100644
--- a/curriculum/challenges/_meta/learn-git-by-building-an-sql-reference-object/meta.json
+++ b/curriculum/challenges/_meta/learn-git-by-building-an-sql-reference-object/meta.json
@@ -1,11 +1,11 @@
{
"name": "Learn Git by Building an SQL Reference Object",
- "isUpcomingChange": true,
+ "isUpcomingChange": false,
"order": 11,
"time": "5 hours",
"template": "",
"required": [],
- "superBlock": "relational-databases",
+ "superBlock": "relational-database",
"challengeOrder": [
[
"5fa323cdaf6a73463d590659",
diff --git a/curriculum/challenges/_meta/learn-nano-by-building-a-castle/meta.json b/curriculum/challenges/_meta/learn-nano-by-building-a-castle/meta.json
index 8ccfda7124..c27e3dc562 100644
--- a/curriculum/challenges/_meta/learn-nano-by-building-a-castle/meta.json
+++ b/curriculum/challenges/_meta/learn-nano-by-building-a-castle/meta.json
@@ -1,11 +1,11 @@
{
"name": "Learn Nano by Building a Castle",
- "isUpcomingChange": true,
+ "isUpcomingChange": false,
"order": 10,
"time": "5 hours",
"template": "",
"required": [],
- "superBlock": "relational-databases",
+ "superBlock": "relational-database",
"challengeOrder": [
[
"5f32db63eb37f7e17323f459",
diff --git a/curriculum/challenges/_meta/learn-relational-databases-by-building-a-mario-database/meta.json b/curriculum/challenges/_meta/learn-relational-databases-by-building-a-mario-database/meta.json
index e61c925498..2257d224ed 100644
--- a/curriculum/challenges/_meta/learn-relational-databases-by-building-a-mario-database/meta.json
+++ b/curriculum/challenges/_meta/learn-relational-databases-by-building-a-mario-database/meta.json
@@ -1,11 +1,11 @@
{
"name": "Learn Relational Databases by Building a Mario Database",
- "isUpcomingChange": true,
+ "isUpcomingChange": false,
"order": 1,
"time": "5 hours",
"template": "",
"required": [],
- "superBlock": "relational-databases",
+ "superBlock": "relational-database",
"challengeOrder": [
[
"5f2c289f164c29556da632fd",
diff --git a/curriculum/challenges/_meta/learn-sql-by-building-a-student-database-part-1/meta.json b/curriculum/challenges/_meta/learn-sql-by-building-a-student-database-part-1/meta.json
index bc8739f768..333e643b12 100644
--- a/curriculum/challenges/_meta/learn-sql-by-building-a-student-database-part-1/meta.json
+++ b/curriculum/challenges/_meta/learn-sql-by-building-a-student-database-part-1/meta.json
@@ -1,11 +1,11 @@
{
"name": "Learn SQL by Building a Student Database: Part 1",
- "isUpcomingChange": true,
+ "isUpcomingChange": false,
"order": 4,
"time": "5 hours",
"template": "",
"required": [],
- "superBlock": "relational-databases",
+ "superBlock": "relational-database",
"challengeOrder": [
[
"602da0c222201c65d2a019f5",
diff --git a/curriculum/challenges/_meta/learn-sql-by-building-a-student-database-part-2/meta.json b/curriculum/challenges/_meta/learn-sql-by-building-a-student-database-part-2/meta.json
index d5d3cc40b2..fe70fa6405 100644
--- a/curriculum/challenges/_meta/learn-sql-by-building-a-student-database-part-2/meta.json
+++ b/curriculum/challenges/_meta/learn-sql-by-building-a-student-database-part-2/meta.json
@@ -1,11 +1,11 @@
{
"name": "Learn SQL by Building a Student Database: Part 2",
- "isUpcomingChange": true,
+ "isUpcomingChange": false,
"order": 5,
"time": "5 hours",
"template": "",
"required": [],
- "superBlock": "relational-databases",
+ "superBlock": "relational-database",
"challengeOrder": [
[
"618590adb0730ca724e37672",
diff --git a/curriculum/challenges/chinese-traditional/00-certifications/relational-databases-certification/relational-databases-certification.yml b/curriculum/challenges/chinese-traditional/00-certifications/relational-database-certification/relational-database-certification.yml
similarity index 92%
rename from curriculum/challenges/chinese-traditional/00-certifications/relational-databases-certification/relational-databases-certification.yml
rename to curriculum/challenges/chinese-traditional/00-certifications/relational-database-certification/relational-database-certification.yml
index 120644b088..8670cdb48b 100644
--- a/curriculum/challenges/chinese-traditional/00-certifications/relational-databases-certification/relational-databases-certification.yml
+++ b/curriculum/challenges/chinese-traditional/00-certifications/relational-database-certification/relational-database-certification.yml
@@ -1,7 +1,7 @@
---
id: 606243f50267e718b1e755f4
title: 關係數據庫認證
-certification: relational-databases
+certification: relational-database
challengeType: 7
isPrivate: true
tests:
diff --git a/curriculum/challenges/chinese/00-certifications/relational-databases-certification/relational-databases-certification.yml b/curriculum/challenges/chinese/00-certifications/relational-database-certification/relational-database-certification.yml
similarity index 92%
rename from curriculum/challenges/chinese/00-certifications/relational-databases-certification/relational-databases-certification.yml
rename to curriculum/challenges/chinese/00-certifications/relational-database-certification/relational-database-certification.yml
index 4d95f8af54..0909d4ed2e 100644
--- a/curriculum/challenges/chinese/00-certifications/relational-databases-certification/relational-databases-certification.yml
+++ b/curriculum/challenges/chinese/00-certifications/relational-database-certification/relational-database-certification.yml
@@ -1,7 +1,7 @@
---
id: 606243f50267e718b1e755f4
title: 关系数据库认证
-certification: relational-databases
+certification: relational-database
challengeType: 7
isPrivate: true
tests:
diff --git a/curriculum/challenges/english/00-certifications/relational-databases-certification/relational-databases-certification.yml b/curriculum/challenges/english/00-certifications/relational-database-certification/relational-database-certification.yml
similarity index 83%
rename from curriculum/challenges/english/00-certifications/relational-databases-certification/relational-databases-certification.yml
rename to curriculum/challenges/english/00-certifications/relational-database-certification/relational-database-certification.yml
index fda2831795..dd82e0c819 100644
--- a/curriculum/challenges/english/00-certifications/relational-databases-certification/relational-databases-certification.yml
+++ b/curriculum/challenges/english/00-certifications/relational-database-certification/relational-database-certification.yml
@@ -1,6 +1,6 @@
id: 606243f50267e718b1e755f4
-title: Relational Databases Certification
-certification: relational-databases
+title: Relational Database Certification
+certification: relational-database
challengeType: 7
isPrivate: true
tests:
diff --git a/curriculum/challenges/english/13-relational-databases/learn-relational-databases-by-building-a-mario-database/build-a-mario-database.md b/curriculum/challenges/english/13-relational-databases/learn-relational-databases-by-building-a-mario-database/build-a-mario-database.md
index 86d5e63515..155648a129 100644
--- a/curriculum/challenges/english/13-relational-databases/learn-relational-databases-by-building-a-mario-database/build-a-mario-database.md
+++ b/curriculum/challenges/english/13-relational-databases/learn-relational-databases-by-building-a-mario-database/build-a-mario-database.md
@@ -9,7 +9,7 @@ dashedName: build-a-mario-database
# --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--
diff --git a/curriculum/challenges/espanol/00-certifications/relational-databases-certification/relational-databases-certification.yml b/curriculum/challenges/espanol/00-certifications/relational-database-certification/relational-database-certification.yml
similarity index 93%
rename from curriculum/challenges/espanol/00-certifications/relational-databases-certification/relational-databases-certification.yml
rename to curriculum/challenges/espanol/00-certifications/relational-database-certification/relational-database-certification.yml
index ef02a56073..040194ab98 100644
--- a/curriculum/challenges/espanol/00-certifications/relational-databases-certification/relational-databases-certification.yml
+++ b/curriculum/challenges/espanol/00-certifications/relational-database-certification/relational-database-certification.yml
@@ -1,7 +1,7 @@
---
id: 606243f50267e718b1e755f4
title: Certificación en Base de Datos Relacionales
-certification: relational-databases
+certification: relational-database
challengeType: 7
isPrivate: true
tests:
diff --git a/curriculum/challenges/italian/00-certifications/relational-databases-certification/relational-databases-certification.yml b/curriculum/challenges/italian/00-certifications/relational-database-certification/relational-database-certification.yml
similarity index 93%
rename from curriculum/challenges/italian/00-certifications/relational-databases-certification/relational-databases-certification.yml
rename to curriculum/challenges/italian/00-certifications/relational-database-certification/relational-database-certification.yml
index fbb1bfeb88..f0d483d276 100644
--- a/curriculum/challenges/italian/00-certifications/relational-databases-certification/relational-databases-certification.yml
+++ b/curriculum/challenges/italian/00-certifications/relational-database-certification/relational-database-certification.yml
@@ -1,7 +1,7 @@
---
id: 606243f50267e718b1e755f4
title: Certificazione Database Relazionali
-certification: relational-databases
+certification: relational-database
challengeType: 7
isPrivate: true
tests:
diff --git a/curriculum/challenges/japanese/00-certifications/relational-databases-certification/relational-databases-certification.yml b/curriculum/challenges/japanese/00-certifications/relational-database-certification/relational-database-certification.yml
similarity index 93%
rename from curriculum/challenges/japanese/00-certifications/relational-databases-certification/relational-databases-certification.yml
rename to curriculum/challenges/japanese/00-certifications/relational-database-certification/relational-database-certification.yml
index c28e1f3f56..03c14a6c5a 100644
--- a/curriculum/challenges/japanese/00-certifications/relational-databases-certification/relational-databases-certification.yml
+++ b/curriculum/challenges/japanese/00-certifications/relational-database-certification/relational-database-certification.yml
@@ -1,7 +1,7 @@
---
id: 606243f50267e718b1e755f4
title: リレーショナルデータベース認定証
-certification: relational-databases
+certification: relational-database
challengeType: 7
isPrivate: true
tests:
diff --git a/curriculum/challenges/portuguese/00-certifications/relational-databases-certification/relational-databases-certification.yml b/curriculum/challenges/portuguese/00-certifications/relational-database-certification/relational-database-certification.yml
similarity index 93%
rename from curriculum/challenges/portuguese/00-certifications/relational-databases-certification/relational-databases-certification.yml
rename to curriculum/challenges/portuguese/00-certifications/relational-database-certification/relational-database-certification.yml
index 83ec9f9963..2a974aa8d9 100644
--- a/curriculum/challenges/portuguese/00-certifications/relational-databases-certification/relational-databases-certification.yml
+++ b/curriculum/challenges/portuguese/00-certifications/relational-database-certification/relational-database-certification.yml
@@ -1,7 +1,7 @@
---
id: 606243f50267e718b1e755f4
title: Certificação de banco de dados relacional
-certification: relational-databases
+certification: relational-database
challengeType: 7
isPrivate: true
tests:
diff --git a/curriculum/challenges/ukrainian/00-certifications/relational-databases-certification/relational-databases-certification.yml b/curriculum/challenges/ukrainian/00-certifications/relational-database-certification/relational-database-certification.yml
similarity index 94%
rename from curriculum/challenges/ukrainian/00-certifications/relational-databases-certification/relational-databases-certification.yml
rename to curriculum/challenges/ukrainian/00-certifications/relational-database-certification/relational-database-certification.yml
index d6cc1d5b7d..cbeb03bf12 100644
--- a/curriculum/challenges/ukrainian/00-certifications/relational-databases-certification/relational-databases-certification.yml
+++ b/curriculum/challenges/ukrainian/00-certifications/relational-database-certification/relational-database-certification.yml
@@ -1,7 +1,7 @@
---
id: 606243f50267e718b1e755f4
title: Сертифікація реляційних баз даних
-certification: relational-databases
+certification: relational-database
challengeType: 7
isPrivate: true
tests:
diff --git a/curriculum/utils.js b/curriculum/utils.js
index 6c45d7c3b1..7ade57a122 100644
--- a/curriculum/utils.js
+++ b/curriculum/utils.js
@@ -25,7 +25,7 @@ const superBlockToOrder = {
'javascript-algorithms-and-data-structures': 1,
'front-end-development-libraries': 2,
'data-visualization': 3,
- 'relational-databases': 4,
+ 'relational-database': 4,
'back-end-development-and-apis': 5,
'quality-assurance': 6,
'scientific-computing-with-python': 7,
@@ -40,7 +40,7 @@ const superBlockToNewOrder = {
'javascript-algorithms-and-data-structures': 1,
'front-end-development-libraries': 2,
'data-visualization': 3,
- 'relational-databases': 4,
+ 'relational-database': 4,
'back-end-development-and-apis': 5,
'quality-assurance': 6,
'scientific-computing-with-python': 7,
diff --git a/curriculum/utils.test.js b/curriculum/utils.test.js
index c3926ca4c8..2f71941dfe 100644
--- a/curriculum/utils.test.js
+++ b/curriculum/utils.test.js
@@ -25,7 +25,7 @@ describe('getSuperOrder', () => {
expect(getSuperOrder('javascript-algorithms-and-data-structures')).toBe(1);
expect(getSuperOrder('front-end-development-libraries')).toBe(2);
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('quality-assurance')).toBe(6);
expect(getSuperOrder('scientific-computing-with-python')).toBe(7);
@@ -54,7 +54,7 @@ describe('getSuperOrder', () => {
getSuperOrder('data-visualization', { showNewCurriculum: true })
).toBe(3);
expect(
- getSuperOrder('relational-databases', { showNewCurriculum: true })
+ getSuperOrder('relational-database', { showNewCurriculum: true })
).toBe(4);
expect(
getSuperOrder('back-end-development-and-apis', {
diff --git a/cypress/integration/landing.js b/cypress/integration/landing.js
index 37a1de19dd..ebeb2b1b48 100644
--- a/cypress/integration/landing.js
+++ b/cypress/integration/landing.js
@@ -58,7 +58,7 @@ describe('Landing page', () => {
});
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.get(selectors.certifications).contains(cert);
});
diff --git a/cypress/integration/learn/index.js b/cypress/integration/learn/index.js
index d819b66a5d..4f6b548899 100644
--- a/cypress/integration/learn/index.js
+++ b/cypress/integration/learn/index.js
@@ -11,6 +11,7 @@ const superBlockNames = [
'JavaScript Algorithms and Data Structures Certification',
'Front End Development Libraries Certification',
'Data Visualization Certification',
+ 'Relational Database Certification',
'Back End Development and APIs Certification',
'Quality Assurance Certification',
'Scientific Computing with Python Certification',
@@ -42,7 +43,7 @@ describe('Learn Landing page (not logged in)', () => {
const superBlocks = document.querySelectorAll(
`${selectors.challengeMap} > li > a`
);
- expect(superBlocks).to.have.length(12);
+ expect(superBlocks).to.have.length(13);
superBlocks.forEach((superBlock, idx) => {
expect(superBlock.innerText).to.have.string(superBlockNames[idx]);
diff --git a/cypress/integration/settings/certifications.js b/cypress/integration/settings/certifications.js
index 8d6daa5b90..ad242e24f0 100644
--- a/cypress/integration/settings/certifications.js
+++ b/cypress/integration/settings/certifications.js
@@ -10,7 +10,7 @@ describe('Settings certifications area', () => {
it('Should render the default settings page', () => {
cy.visit('/settings/');
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.contains('Agree');
diff --git a/tools/scripts/seed/certifiedUserData.js b/tools/scripts/seed/certifiedUserData.js
index 9b3e21ccc9..55c4c2b1fa 100644
--- a/tools/scripts/seed/certifiedUserData.js
+++ b/tools/scripts/seed/certifiedUserData.js
@@ -34,6 +34,7 @@ module.exports = {
isSciCompPyCertV7: true,
isDataAnalysisPyCertV7: true,
isMachineLearningPyCertV7: true,
+ isRelationalDatabaseCertV8: true,
completedChallenges: [
{ id: 'bd7123c8c441eddfaeb5bdef', completedDate: 1475094716730, files: [] },
{ id: '5895f70bf9fc0f352b528e64', completedDate: 1537207306322, files: [] },
@@ -4628,6 +4629,82 @@ module.exports = {
completedDate: 1538239301985,
challengeType: 7,
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: [],
diff --git a/tools/scripts/seed/seedAuthUser.js b/tools/scripts/seed/seedAuthUser.js
index aa23504a69..ef12f31d2f 100644
--- a/tools/scripts/seed/seedAuthUser.js
+++ b/tools/scripts/seed/seedAuthUser.js
@@ -59,6 +59,7 @@ const authUser = {
isSciCompPyCertV7: false,
isDataAnalysisPyCertV7: false,
isMachineLearningPyCertV7: false,
+ isRelationalDatabaseCertV8: false,
completedChallenges: [],
portfolio: [],
yearsTopContributor: envVariables.includes('--top-contributor')
@@ -118,6 +119,7 @@ const blankUser = {
isSciCompPyCertV7: false,
isDataAnalysisPyCertV7: false,
isMachineLearningPyCertV7: false,
+ isRelationalDatabaseCertV8: false,
completedChallenges: [],
portfolio: [],
yearsTopContributor: [],