mirror of
https://github.com/freeCodeCamp/freeCodeCamp.git
synced 2025-12-19 18:18:27 -05:00
feat: release a2-english exam (#63136)
This commit is contained in:
@@ -38,6 +38,7 @@ describe('certificate routes', () => {
|
|||||||
data: {
|
data: {
|
||||||
completedChallenges: [],
|
completedChallenges: [],
|
||||||
name: 'fcc',
|
name: 'fcc',
|
||||||
|
isA2EnglishCert: false,
|
||||||
isRespWebDesignCert: false,
|
isRespWebDesignCert: false,
|
||||||
isJsAlgoDataStructCert: false,
|
isJsAlgoDataStructCert: false,
|
||||||
isFrontEndLibsCert: false,
|
isFrontEndLibsCert: false,
|
||||||
@@ -135,6 +136,7 @@ describe('certificate routes', () => {
|
|||||||
},
|
},
|
||||||
isCertMap: {
|
isCertMap: {
|
||||||
is2018DataVisCert: false,
|
is2018DataVisCert: false,
|
||||||
|
isA2EnglishCert: false,
|
||||||
isApisMicroservicesCert: false,
|
isApisMicroservicesCert: false,
|
||||||
isBackEndCert: false,
|
isBackEndCert: false,
|
||||||
isCollegeAlgebraPyCertV8: false,
|
isCollegeAlgebraPyCertV8: false,
|
||||||
@@ -238,7 +240,8 @@ describe('certificate routes', () => {
|
|||||||
isInfosecCertV7: true,
|
isInfosecCertV7: true,
|
||||||
isMachineLearningPyCertV7: true,
|
isMachineLearningPyCertV7: true,
|
||||||
isCollegeAlgebraPyCertV8: true,
|
isCollegeAlgebraPyCertV8: true,
|
||||||
isFoundationalCSharpCertV8: true
|
isFoundationalCSharpCertV8: true,
|
||||||
|
isA2EnglishCert: true
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1394,7 +1394,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"a2-english-for-developers": {
|
"a2-english-for-developers": {
|
||||||
"title": "A2 English for Developers (Beta) Certification",
|
"title": "A2 English for Developers Certification",
|
||||||
"intro": [
|
"intro": [
|
||||||
"In this English for Developers Curriculum, you'll learn the essentials of English communication. This will follow the A2 level of the Common European Framework of Reference (CEFR). And we've focused on vocabulary that is particularly useful for developers.",
|
"In this English for Developers Curriculum, you'll learn the essentials of English communication. This will follow the A2 level of the Common European Framework of Reference (CEFR). And we've focused on vocabulary that is particularly useful for developers.",
|
||||||
"The first half of the curriculum will help you get comfortable with English grammar and usage. It will give you tons of hands-on practice. You'll learn basics like introducing yourself, making small talk, and discussing your work.",
|
"The first half of the curriculum will help you get comfortable with English grammar and usage. It will give you tons of hands-on practice. You'll learn basics like introducing yourself, making small talk, and discussing your work.",
|
||||||
@@ -2372,7 +2372,10 @@
|
|||||||
"Open up this page to review concepts around the basics of HTML elements, semantic HTML, tables, forms and accessibility."
|
"Open up this page to review concepts around the basics of HTML elements, semantic HTML, tables, forms and accessibility."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"qpra": { "title": "30", "intro": [] },
|
"qpra": {
|
||||||
|
"title": "30",
|
||||||
|
"intro": []
|
||||||
|
},
|
||||||
"lecture-understanding-computer-internet-and-tooling-basics": {
|
"lecture-understanding-computer-internet-and-tooling-basics": {
|
||||||
"title": "Understanding Computer, Internet, and Tooling Basics",
|
"title": "Understanding Computer, Internet, and Tooling Basics",
|
||||||
"intro": [
|
"intro": [
|
||||||
@@ -4170,7 +4173,10 @@
|
|||||||
"Open up this page to review all of the concepts taught including variables, strings, booleans, functions, objects, arrays, debugging, working with the DOM and more."
|
"Open up this page to review all of the concepts taught including variables, strings, booleans, functions, objects, arrays, debugging, working with the DOM and more."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"kagw": { "title": "258", "intro": [] },
|
"kagw": {
|
||||||
|
"title": "258",
|
||||||
|
"intro": []
|
||||||
|
},
|
||||||
"lecture-introduction-to-javascript-libraries-and-frameworks": {
|
"lecture-introduction-to-javascript-libraries-and-frameworks": {
|
||||||
"title": "Introduction to JavaScript Libraries and Frameworks",
|
"title": "Introduction to JavaScript Libraries and Frameworks",
|
||||||
"intro": [
|
"intro": [
|
||||||
@@ -4443,11 +4449,26 @@
|
|||||||
"In this lesson, you will learn about TypeScript configuration files and how to use them."
|
"In this lesson, you will learn about TypeScript configuration files and how to use them."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"trvf": { "title": "293", "intro": [] },
|
"trvf": {
|
||||||
"kwmg": { "title": "294", "intro": [] },
|
"title": "293",
|
||||||
"nodx": { "title": "295", "intro": [] },
|
"intro": []
|
||||||
"erfj": { "title": "296", "intro": [] },
|
},
|
||||||
"muyw": { "title": "297", "intro": [] },
|
"kwmg": {
|
||||||
|
"title": "294",
|
||||||
|
"intro": []
|
||||||
|
},
|
||||||
|
"nodx": {
|
||||||
|
"title": "295",
|
||||||
|
"intro": []
|
||||||
|
},
|
||||||
|
"erfj": {
|
||||||
|
"title": "296",
|
||||||
|
"intro": []
|
||||||
|
},
|
||||||
|
"muyw": {
|
||||||
|
"title": "297",
|
||||||
|
"intro": []
|
||||||
|
},
|
||||||
"review-typescript": {
|
"review-typescript": {
|
||||||
"title": "Typescript Review",
|
"title": "Typescript Review",
|
||||||
"intro": [
|
"intro": [
|
||||||
@@ -4465,8 +4486,14 @@
|
|||||||
"Review the Front End Libraries concepts to prepare for the upcoming quiz."
|
"Review the Front End Libraries concepts to prepare for the upcoming quiz."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"rdzk": { "title": "301", "intro": [] },
|
"rdzk": {
|
||||||
"vtpz": { "title": "302", "intro": [] },
|
"title": "301",
|
||||||
|
"intro": []
|
||||||
|
},
|
||||||
|
"vtpz": {
|
||||||
|
"title": "302",
|
||||||
|
"intro": []
|
||||||
|
},
|
||||||
"lecture-introduction-to-python": {
|
"lecture-introduction-to-python": {
|
||||||
"title": "Introduction to Python",
|
"title": "Introduction to Python",
|
||||||
"intro": [
|
"intro": [
|
||||||
@@ -7570,8 +7597,14 @@
|
|||||||
"title": "Introducing Yourself Basics",
|
"title": "Introducing Yourself Basics",
|
||||||
"intro": ["", ""]
|
"intro": ["", ""]
|
||||||
},
|
},
|
||||||
"es-a1-learn-meet-luna": { "title": "Meet Luna", "intro": ["", ""] },
|
"es-a1-learn-meet-luna": {
|
||||||
"es-a1-learn-meet-mateo": { "title": "Meet Mateo", "intro": ["", ""] },
|
"title": "Meet Luna",
|
||||||
|
"intro": ["", ""]
|
||||||
|
},
|
||||||
|
"es-a1-learn-meet-mateo": {
|
||||||
|
"title": "Meet Mateo",
|
||||||
|
"intro": ["", ""]
|
||||||
|
},
|
||||||
"es-a1-learn-meet-julieta": {
|
"es-a1-learn-meet-julieta": {
|
||||||
"title": "Meet Julieta",
|
"title": "Meet Julieta",
|
||||||
"intro": ["", ""]
|
"intro": ["", ""]
|
||||||
@@ -8010,7 +8043,10 @@
|
|||||||
"Open up this page to review concepts around the basics of HTML elements, semantic HTML, tables, forms and accessibility."
|
"Open up this page to review concepts around the basics of HTML elements, semantic HTML, tables, forms and accessibility."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"qpra": { "title": "30", "intro": [] },
|
"qpra": {
|
||||||
|
"title": "30",
|
||||||
|
"intro": []
|
||||||
|
},
|
||||||
"lecture-understanding-computer-internet-and-tooling-basics": {
|
"lecture-understanding-computer-internet-and-tooling-basics": {
|
||||||
"title": "Understanding Computer, Internet, and Tooling Basics",
|
"title": "Understanding Computer, Internet, and Tooling Basics",
|
||||||
"intro": [
|
"intro": [
|
||||||
@@ -8736,7 +8772,10 @@
|
|||||||
"title": "Single Finals",
|
"title": "Single Finals",
|
||||||
"intro": ["", ""]
|
"intro": ["", ""]
|
||||||
},
|
},
|
||||||
"zh-a1-learn-initials": { "title": "Initials", "intro": ["", ""] },
|
"zh-a1-learn-initials": {
|
||||||
|
"title": "Initials",
|
||||||
|
"intro": ["", ""]
|
||||||
|
},
|
||||||
"zh-a1-learn-compound-finals": {
|
"zh-a1-learn-compound-finals": {
|
||||||
"title": "Compound Finals",
|
"title": "Compound Finals",
|
||||||
"intro": ["", ""]
|
"intro": ["", ""]
|
||||||
@@ -8787,12 +8826,18 @@
|
|||||||
"title": "Introducing Others Basics",
|
"title": "Introducing Others Basics",
|
||||||
"intro": ["", ""]
|
"intro": ["", ""]
|
||||||
},
|
},
|
||||||
"zh-a1-learn-the-team": { "title": "The Team", "intro": ["", ""] },
|
"zh-a1-learn-the-team": {
|
||||||
|
"title": "The Team",
|
||||||
|
"intro": ["", ""]
|
||||||
|
},
|
||||||
"zh-a1-learn-a-new-colleague": {
|
"zh-a1-learn-a-new-colleague": {
|
||||||
"title": "A New Colleague",
|
"title": "A New Colleague",
|
||||||
"intro": ["", ""]
|
"intro": ["", ""]
|
||||||
},
|
},
|
||||||
"zh-a1-learn-my-family": { "title": "My Family", "intro": ["", ""] },
|
"zh-a1-learn-my-family": {
|
||||||
|
"title": "My Family",
|
||||||
|
"intro": ["", ""]
|
||||||
|
},
|
||||||
"zh-a1-practice-introducing-others": {
|
"zh-a1-practice-introducing-others": {
|
||||||
"title": "Introducing Others Practice",
|
"title": "Introducing Others Practice",
|
||||||
"intro": ["", ""]
|
"intro": ["", ""]
|
||||||
@@ -8955,7 +9000,9 @@
|
|||||||
"part-12": "Containers",
|
"part-12": "Containers",
|
||||||
"part-13": "Using Relational Databases"
|
"part-13": "Using Relational Databases"
|
||||||
},
|
},
|
||||||
"modules": { "basic-html": "Basic HTML" },
|
"modules": {
|
||||||
|
"basic-html": "Basic HTML"
|
||||||
|
},
|
||||||
"module-intros": {
|
"module-intros": {
|
||||||
"basic-html": {
|
"basic-html": {
|
||||||
"title": "Basic HTML",
|
"title": "Basic HTML",
|
||||||
@@ -8968,7 +9015,9 @@
|
|||||||
"daily-coding-challenge": {
|
"daily-coding-challenge": {
|
||||||
"title": "Daily Coding Challenge",
|
"title": "Daily Coding Challenge",
|
||||||
"blocks": {
|
"blocks": {
|
||||||
"daily-coding-challenge": { "title": "Daily Coding Challenge" }
|
"daily-coding-challenge": {
|
||||||
|
"title": "Daily Coding Challenge"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"misc-text": {
|
"misc-text": {
|
||||||
|
|||||||
@@ -57,7 +57,6 @@ export const ConditionalDonationAlert = ({
|
|||||||
const betaCertifications: SuperBlocks[] = [];
|
const betaCertifications: SuperBlocks[] = [];
|
||||||
|
|
||||||
const unfinishedCertifications = [
|
const unfinishedCertifications = [
|
||||||
SuperBlocks.A2English,
|
|
||||||
SuperBlocks.B1English,
|
SuperBlocks.B1English,
|
||||||
SuperBlocks.A1Spanish,
|
SuperBlocks.A1Spanish,
|
||||||
SuperBlocks.A2Spanish,
|
SuperBlocks.A2Spanish,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "A2 English for Developers Certification Exam",
|
"name": "A2 English for Developers Certification Exam",
|
||||||
"isUpcomingChange": true,
|
"isUpcomingChange": false,
|
||||||
"dashedName": "en-a2-certification-exam",
|
"dashedName": "en-a2-certification-exam",
|
||||||
"helpCategory": "English",
|
"helpCategory": "English",
|
||||||
"challengeOrder": [
|
"challengeOrder": [
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ test.describe('Public profile certifications', () => {
|
|||||||
|
|
||||||
await expect(
|
await expect(
|
||||||
page.getByRole('link', { name: /View.+Certification/ })
|
page.getByRole('link', { name: /View.+Certification/ })
|
||||||
).toHaveCount(19);
|
).toHaveCount(20);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Should show claimed certifications if the username includes uppercase characters', async ({
|
test('Should show claimed certifications if the username includes uppercase characters', async ({
|
||||||
@@ -48,7 +48,7 @@ test.describe('Public profile certifications', () => {
|
|||||||
await page.waitForURL('/certifiedboozer');
|
await page.waitForURL('/certifiedboozer');
|
||||||
await expect(
|
await expect(
|
||||||
page.getByRole('link', { name: /View.+Certification/ })
|
page.getByRole('link', { name: /View.+Certification/ })
|
||||||
).toHaveCount(19);
|
).toHaveCount(20);
|
||||||
});
|
});
|
||||||
|
|
||||||
test.afterAll(() => {
|
test.afterAll(() => {
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ const LANDING_PAGE_LINKS = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
slug: 'a2-english-for-developers',
|
slug: 'a2-english-for-developers',
|
||||||
name: 'A2 English for Developers (Beta) Certification'
|
name: 'A2 English for Developers Certification'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
slug: 'b1-english-for-developers',
|
slug: 'b1-english-for-developers',
|
||||||
|
|||||||
@@ -32,8 +32,8 @@ export enum Certification {
|
|||||||
PythonV9 = 'python-v9',
|
PythonV9 = 'python-v9',
|
||||||
RelationalDbV9 = 'relational-databases-v9',
|
RelationalDbV9 = 'relational-databases-v9',
|
||||||
BackEndDevApisV9 = 'back-end-development-and-apis-v9',
|
BackEndDevApisV9 = 'back-end-development-and-apis-v9',
|
||||||
|
A2English = 'a2-english-for-developers',
|
||||||
FullStackDeveloperV9 = 'full-stack-developer-v9',
|
FullStackDeveloperV9 = 'full-stack-developer-v9',
|
||||||
A2English = 'a2-english-for-developers-v8',
|
|
||||||
B1English = 'b1-english-for-developers-v8',
|
B1English = 'b1-english-for-developers-v8',
|
||||||
A2Spanish = 'a2-professional-spanish-v8',
|
A2Spanish = 'a2-professional-spanish-v8',
|
||||||
A2Chinese = 'a2-professional-chinese-v8',
|
A2Chinese = 'a2-professional-chinese-v8',
|
||||||
@@ -54,6 +54,7 @@ export function isCertification(x: string): x is Certification {
|
|||||||
// "Current" certifications are the subset of standard certifications that are
|
// "Current" certifications are the subset of standard certifications that are
|
||||||
// live and not legacy.
|
// live and not legacy.
|
||||||
export const currentCertifications = [
|
export const currentCertifications = [
|
||||||
|
Certification.A2English,
|
||||||
Certification.FoundationalCSharp
|
Certification.FoundationalCSharp
|
||||||
] as const;
|
] as const;
|
||||||
|
|
||||||
@@ -95,7 +96,6 @@ export const upcomingCertifications = [
|
|||||||
Certification.RelationalDbV9,
|
Certification.RelationalDbV9,
|
||||||
Certification.BackEndDevApisV9,
|
Certification.BackEndDevApisV9,
|
||||||
Certification.FullStackDeveloperV9,
|
Certification.FullStackDeveloperV9,
|
||||||
Certification.A2English,
|
|
||||||
Certification.B1English,
|
Certification.B1English,
|
||||||
Certification.A2Spanish,
|
Certification.A2Spanish,
|
||||||
Certification.A2Chinese,
|
Certification.A2Chinese,
|
||||||
@@ -205,11 +205,11 @@ export const certSlugTypeMap = {
|
|||||||
[Certification.RelationalDb]: certTypes.relationalDatabaseV8,
|
[Certification.RelationalDb]: certTypes.relationalDatabaseV8,
|
||||||
[Certification.CollegeAlgebraPy]: certTypes.collegeAlgebraPyV8,
|
[Certification.CollegeAlgebraPy]: certTypes.collegeAlgebraPyV8,
|
||||||
[Certification.FoundationalCSharp]: certTypes.foundationalCSharpV8,
|
[Certification.FoundationalCSharp]: certTypes.foundationalCSharpV8,
|
||||||
|
[Certification.A2English]: certTypes.a2English,
|
||||||
|
|
||||||
// upcoming
|
// upcoming
|
||||||
[Certification.RespWebDesignV9]: certTypes.respWebDesignV9,
|
[Certification.RespWebDesignV9]: certTypes.respWebDesignV9,
|
||||||
[Certification.JsV9]: certTypes.javascriptV9,
|
[Certification.JsV9]: certTypes.javascriptV9
|
||||||
[Certification.A2English]: certTypes.a2English
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export const superBlockCertTypeMap = {
|
export const superBlockCertTypeMap = {
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ export const superBlockList = [
|
|||||||
path: 'foundational-c-sharp-with-microsoft'
|
path: 'foundational-c-sharp-with-microsoft'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'A2 English for Developers (Beta)',
|
name: 'A2 English for Developers',
|
||||||
path: 'a2-english-for-developers'
|
path: 'a2-english-for-developers'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user