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: [],