feat: release rdbms as beta (#45428)

This commit is contained in:
Tom
2022-03-22 01:05:38 -05:00
committed by GitHub
parent 1036cde22e
commit a428284804
13 changed files with 130 additions and 86 deletions

View File

@ -157,7 +157,8 @@ function sendCertifiedEmail(
isInfosecCertV7, isInfosecCertV7,
isSciCompPyCertV7, isSciCompPyCertV7,
isDataAnalysisPyCertV7, isDataAnalysisPyCertV7,
isMachineLearningPyCertV7 isMachineLearningPyCertV7,
isRelationalDatabaseCertV8
}, },
send$ send$
) { ) {
@ -172,7 +173,8 @@ function sendCertifiedEmail(
!isInfosecCertV7 || !isInfosecCertV7 ||
!isSciCompPyCertV7 || !isSciCompPyCertV7 ||
!isDataAnalysisPyCertV7 || !isDataAnalysisPyCertV7 ||
!isMachineLearningPyCertV7 !isMachineLearningPyCertV7 ||
!isRelationalDatabaseCertV8
) { ) {
return Observable.just(false); return Observable.just(false);
} }

View File

@ -767,6 +767,7 @@
"legacy-desc": "These courses are no longer part of the certification path, but are still available for you to further your learning.", "legacy-desc": "These courses are no longer part of the certification path, but are still available for you to further your learning.",
"viewing-upcoming-change": "You are looking at a beta page. ", "viewing-upcoming-change": "You are looking at a beta page. ",
"go-back-to-learn": "Go back to the stable version of the curriculum.", "go-back-to-learn": "Go back to the stable version of the curriculum.",
"read-database-cert-article": "Please read this forum post before proceeding." "read-database-cert-article": "Please read this forum post before proceeding.",
"english-only": "The courses in this section are only available in English. We are only able to translate the titles and introductions at the moment, not the lessons themselves."
} }
} }

View File

@ -1,7 +1,7 @@
import { SuperBlocks } from '../../../config/certification-settings'; import { SuperBlocks } from '../../../config/certification-settings';
import envData from '../../../config/env.json'; import envData from '../../../config/env.json';
const { deploymentEnv, showNewCurriculum, showUpcomingChanges } = envData; const { showNewCurriculum, showUpcomingChanges } = envData;
const responsiveWebBase = const responsiveWebBase =
'/learn/responsive-web-design/responsive-web-design-projects'; '/learn/responsive-web-design/responsive-web-design-projects';
@ -455,44 +455,6 @@ const certMap = [
} }
] ]
}, },
{
id: '606243f50267e718b1e755f4',
title: 'Relational Database',
certSlug: 'relational-database-v8',
flag: 'isRelationalDatabaseCertV8',
projects: [
{
id: '5f1a4ef5d5d6b5ab580fc6ae',
title: 'Celestial Bodies Database',
link: `${relationalDatabaseBase}/build-a-celestial-bodies-database-project/build-a-celestial-bodies-database`,
certSlug: 'relational-database-v8'
},
{
id: '5f9771307d4d22b9d2b75a94',
title: 'World Cup Database',
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: `${relationalDatabaseBase}/build-a-periodic-table-database-project/build-a-periodic-table-database`,
certSlug: 'relational-database-v8'
},
{
id: '602da04c22201c65d2a019f4',
title: 'Number Guessing Game',
link: `${relationalDatabaseBase}/build-a-number-guessing-game-project/build-a-number-guessing-game`,
certSlug: 'relational-database-v8'
}
]
},
{ {
id: '561add10cb82ac38a17523bc', id: '561add10cb82ac38a17523bc',
title: 'Back End Development and APIs', title: 'Back End Development and APIs',
@ -721,6 +683,44 @@ const certMap = [
certSlug: 'machine-learning-with-python-v7' certSlug: 'machine-learning-with-python-v7'
} }
] ]
},
{
id: '606243f50267e718b1e755f4',
title: 'Relational Database',
certSlug: 'relational-database-v8',
flag: 'isRelationalDatabaseCertV8',
projects: [
{
id: '5f1a4ef5d5d6b5ab580fc6ae',
title: 'Celestial Bodies Database',
link: `${relationalDatabaseBase}/build-a-celestial-bodies-database-project/build-a-celestial-bodies-database`,
certSlug: 'relational-database-v8'
},
{
id: '5f9771307d4d22b9d2b75a94',
title: 'World Cup Database',
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: `${relationalDatabaseBase}/build-a-periodic-table-database-project/build-a-periodic-table-database`,
certSlug: 'relational-database-v8'
},
{
id: '602da04c22201c65d2a019f4',
title: 'Number Guessing Game',
link: `${relationalDatabaseBase}/build-a-number-guessing-game-project/build-a-number-guessing-game`,
certSlug: 'relational-database-v8'
}
]
} }
] as const; ] as const;
@ -745,12 +745,7 @@ certMap.forEach(cert => {
if (cert.title !== 'Legacy Full Stack') { if (cert.title !== 'Legacy Full Stack') {
if (cert.title.startsWith('Legacy')) { if (cert.title.startsWith('Legacy')) {
legacyProjectMap[cert.title] = cert.projects; legacyProjectMap[cert.title] = cert.projects;
} else if ( } else {
cert.title.startsWith('Relational') &&
deploymentEnv == 'staging'
) {
projectMap[cert.title] = cert.projects;
} else if (!cert.title.startsWith('Relational')) {
projectMap[cert.title] = cert.projects; projectMap[cert.title] = cert.projects;
} }
} }

View File

@ -256,7 +256,7 @@ class ShowCodeAlly extends Component<ShowCodeAllyProps> {
<div className='ca-description'> <div className='ca-description'>
<Trans i18nKey='learn.github-required'> <Trans i18nKey='learn.github-required'>
<a <a
href='https://github.com' href='https://github.com/join'
rel='noopener noreferrer' rel='noopener noreferrer'
target='_blank' target='_blank'
title={t('learn.github-link')} title={t('learn.github-link')}

View File

@ -5,6 +5,7 @@ import type { WithTranslation } from 'react-i18next';
import { import {
backend, backend,
backEndProject, backEndProject,
codeAllyCert,
frontEndProject, frontEndProject,
pythonProject pythonProject
} from '../../../../utils/challenge-types'; } from '../../../../utils/challenge-types';
@ -101,6 +102,12 @@ export class SolutionForm extends Component<FormProps> {
: 'https://replit.com/@camperbot/hello'); : 'https://replit.com/@camperbot/hello');
break; break;
case codeAllyCert:
formFields = solutionField;
options.isEditorLinkAllowed = true;
solutionLink = solutionLink + 'https://your-git-repo.url/files';
break;
default: default:
formFields = solutionField; formFields = solutionField;
solutionLink = solutionLink =

View File

@ -4,6 +4,9 @@ import { Alert } from '@freecodecamp/react-bootstrap';
import { SuperBlocks } from '../../../../../config/certification-settings'; import { SuperBlocks } from '../../../../../config/certification-settings';
import { isNewRespCert, isRelationalDbCert } from '../../../utils/is-a-cert'; import { isNewRespCert, isRelationalDbCert } from '../../../utils/is-a-cert';
import { Link } from '../../../components/helpers'; import { Link } from '../../../components/helpers';
import envData from '../../../../../config/env.json';
const { clientLocale } = envData;
interface LegacyLinksProps { interface LegacyLinksProps {
superBlock: SuperBlocks; superBlock: SuperBlocks;
@ -28,6 +31,11 @@ function LegacyLinks({ superBlock }: LegacyLinksProps): JSX.Element {
else if (isRelationalDbCert(superBlock)) else if (isRelationalDbCert(superBlock))
return ( return (
<> <>
{clientLocale != 'english' && (
<Alert bsStyle='info'>
<p>{t('intro:misc-text.english-only')}</p>
</Alert>
)}
<Alert bsStyle='info'> <Alert bsStyle='info'>
<p> <p>
{t('intro:misc-text.viewing-upcoming-change')}{' '} {t('intro:misc-text.viewing-upcoming-change')}{' '}

View File

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

View File

@ -20,6 +20,7 @@ exports.backend = backend;
exports.frontEndProject = frontEndProject; exports.frontEndProject = frontEndProject;
exports.backEndProject = backEndProject; exports.backEndProject = backEndProject;
exports.pythonProject = pythonProject; exports.pythonProject = pythonProject;
exports.codeAllyCert = codeAllyCert;
exports.challengeTypes = { exports.challengeTypes = {
html, html,

View File

@ -25,19 +25,19 @@ const superBlockToOrder = {
'javascript-algorithms-and-data-structures': 1, 'javascript-algorithms-and-data-structures': 1,
'front-end-development-libraries': 2, 'front-end-development-libraries': 2,
'data-visualization': 3, 'data-visualization': 3,
'relational-database': 4, 'back-end-development-and-apis': 4,
'back-end-development-and-apis': 5, 'quality-assurance': 5,
'quality-assurance': 6, 'scientific-computing-with-python': 6,
'scientific-computing-with-python': 7, 'data-analysis-with-python': 7,
'data-analysis-with-python': 8, 'information-security': 8,
'information-security': 9, 'machine-learning-with-python': 9,
'machine-learning-with-python': 10, 'coding-interview-prep': 10,
'coding-interview-prep': 11 'relational-database': 12
}; };
const superBlockToNewOrder = { const superBlockToNewOrder = {
...superBlockToOrder, ...superBlockToOrder,
'2022/responsive-web-design': 12 '2022/responsive-web-design': 11
}; };
function getSuperOrder( function getSuperOrder(

View File

@ -31,14 +31,14 @@ describe('getSuperOrder', () => {
expect(getSuperOrder('javascript-algorithms-and-data-structures')).toBe(1); expect(getSuperOrder('javascript-algorithms-and-data-structures')).toBe(1);
expect(getSuperOrder('front-end-development-libraries')).toBe(2); expect(getSuperOrder('front-end-development-libraries')).toBe(2);
expect(getSuperOrder('data-visualization')).toBe(3); expect(getSuperOrder('data-visualization')).toBe(3);
expect(getSuperOrder('relational-database')).toBe(4); expect(getSuperOrder('back-end-development-and-apis')).toBe(4);
expect(getSuperOrder('back-end-development-and-apis')).toBe(5); expect(getSuperOrder('quality-assurance')).toBe(5);
expect(getSuperOrder('quality-assurance')).toBe(6); expect(getSuperOrder('scientific-computing-with-python')).toBe(6);
expect(getSuperOrder('scientific-computing-with-python')).toBe(7); expect(getSuperOrder('data-analysis-with-python')).toBe(7);
expect(getSuperOrder('data-analysis-with-python')).toBe(8); expect(getSuperOrder('information-security')).toBe(8);
expect(getSuperOrder('information-security')).toBe(9); expect(getSuperOrder('machine-learning-with-python')).toBe(9);
expect(getSuperOrder('machine-learning-with-python')).toBe(10); expect(getSuperOrder('coding-interview-prep')).toBe(10);
expect(getSuperOrder('coding-interview-prep')).toBe(11); expect(getSuperOrder('relational-database')).toBe(12);
}); });
it('returns a different order if passed the option showNewCurriculum: true', () => { it('returns a different order if passed the option showNewCurriculum: true', () => {
@ -59,36 +59,36 @@ describe('getSuperOrder', () => {
expect( expect(
getSuperOrder('data-visualization', { showNewCurriculum: true }) getSuperOrder('data-visualization', { showNewCurriculum: true })
).toBe(3); ).toBe(3);
expect(
getSuperOrder('relational-database', { showNewCurriculum: true })
).toBe(4);
expect( expect(
getSuperOrder('back-end-development-and-apis', { getSuperOrder('back-end-development-and-apis', {
showNewCurriculum: true showNewCurriculum: true
}) })
).toBe(5); ).toBe(4);
expect( expect(
getSuperOrder('quality-assurance', { showNewCurriculum: true }) getSuperOrder('quality-assurance', { showNewCurriculum: true })
).toBe(6); ).toBe(5);
expect( expect(
getSuperOrder('scientific-computing-with-python', { getSuperOrder('scientific-computing-with-python', {
showNewCurriculum: true showNewCurriculum: true
}) })
).toBe(7); ).toBe(6);
expect( expect(
getSuperOrder('data-analysis-with-python', { showNewCurriculum: true }) getSuperOrder('data-analysis-with-python', { showNewCurriculum: true })
).toBe(8); ).toBe(7);
expect( expect(
getSuperOrder('information-security', { showNewCurriculum: true }) getSuperOrder('information-security', { showNewCurriculum: true })
).toBe(9); ).toBe(8);
expect( expect(
getSuperOrder('machine-learning-with-python', { showNewCurriculum: true }) getSuperOrder('machine-learning-with-python', { showNewCurriculum: true })
).toBe(10); ).toBe(9);
expect( expect(
getSuperOrder('coding-interview-prep', { showNewCurriculum: true }) getSuperOrder('coding-interview-prep', { showNewCurriculum: true })
).toBe(11); ).toBe(10);
expect( expect(
getSuperOrder('2022/responsive-web-design', { showNewCurriculum: true }) getSuperOrder('2022/responsive-web-design', { showNewCurriculum: true })
).toBe(11);
expect(
getSuperOrder('relational-database', { showNewCurriculum: true })
).toBe(12); ).toBe(12);
}); });
}); });

View File

@ -17,7 +17,8 @@ const certifications = [
'Data Analysis with Python', 'Data Analysis with Python',
'Information Security', 'Information Security',
'Machine Learning with Python', 'Machine Learning with Python',
'Responsive Web Design (Beta)' 'Responsive Web Design (Beta)',
'Relational Database (Beta)'
]; ];
describe('Landing page', () => { describe('Landing page', () => {

View File

@ -0,0 +1,35 @@
describe('CodeAlly cert challenge', function () {
describe('before completing the project', function () {
before(() => {
cy.exec('npm run seed');
cy.login();
cy.visit(
'/learn/relational-database/build-a-celestial-bodies-database-project/build-a-celestial-bodies-database'
);
});
it('should not allow you to submit a URL', function () {
cy.get('input[name="solution"]')
.type('https://example.com')
.type('{enter}');
cy.contains('You must complete the project first.');
});
});
describe('after completing the project', function () {
before(() => {
cy.exec('npm run seed:certified-user');
cy.login();
cy.visit(
'/learn/relational-database/build-a-celestial-bodies-database-project/build-a-celestial-bodies-database'
);
});
it('should allow you to submit a URL', function () {
cy.get('input[name="solution"]')
.type('https://example.com')
.type('{enter}');
cy.get('.completion-modal-body');
});
});
});

View File

@ -11,7 +11,6 @@ const superBlockNames = [
'JavaScript Algorithms and Data Structures Certification', 'JavaScript Algorithms and Data Structures Certification',
'Front End Development Libraries Certification', 'Front End Development Libraries Certification',
'Data Visualization Certification', 'Data Visualization Certification',
'Relational Database (Beta) Certification',
'Back End Development and APIs Certification', 'Back End Development and APIs Certification',
'Quality Assurance Certification', 'Quality Assurance Certification',
'Scientific Computing with Python Certification', 'Scientific Computing with Python Certification',
@ -19,7 +18,8 @@ const superBlockNames = [
'Information Security Certification', 'Information Security Certification',
'Machine Learning with Python Certification', 'Machine Learning with Python Certification',
'Coding Interview Prep (Thousands of hours of challenges)', 'Coding Interview Prep (Thousands of hours of challenges)',
'Responsive Web Design (Beta) Certification' 'Responsive Web Design (Beta) Certification',
'Relational Database (Beta) Certification'
]; ];
describe('Learn Landing page (not logged in)', () => { describe('Learn Landing page (not logged in)', () => {