From 559626814e7329a5e9127a2d8b36ffa928e25d0b Mon Sep 17 00:00:00 2001 From: Tom <20648924+moT01@users.noreply.github.com> Date: Fri, 12 Apr 2024 03:15:14 -0500 Subject: [PATCH] feat(client): add linkedIn credential id to share btn (#54346) --- .../client-only-routes/show-certification.tsx | 10 ++++--- e2e/certification.spec.ts | 4 +-- shared/config/certification-settings.test.ts | 10 +++++++ shared/config/certification-settings.ts | 26 +++++++++++++++++++ 4 files changed, 45 insertions(+), 5 deletions(-) create mode 100644 shared/config/certification-settings.test.ts diff --git a/client/src/client-only-routes/show-certification.tsx b/client/src/client-only-routes/show-certification.tsx index 280662b6710..aaaafc9d4bf 100644 --- a/client/src/client-only-routes/show-certification.tsx +++ b/client/src/client-only-routes/show-certification.tsx @@ -35,8 +35,10 @@ import { import { PaymentContext } from '../../../shared/config/donation-settings'; import ribbon from '../assets/images/ribbon.svg'; import { + CertSlug, certTypes, - certTypeTitleMap + certTypeTitleMap, + linkedInCredentialIds } from '../../../shared/config/certification-settings'; import MultiTierDonationForm from '../components/Donation/multi-tier-donation-form'; import callGA from '../analytics/call-ga'; @@ -48,7 +50,7 @@ const localeCode = getLangCode(clientLocale); type Cert = { username: string; name: string; - certName: string; + certSlug: CertSlug; certTitle: string; completionTime: number; date: number; @@ -218,6 +220,7 @@ const ShowCertification = (props: ShowCertificationProps): JSX.Element => { name: userFullName = null, username, certTitle, + certSlug, completionTime } = cert; @@ -286,6 +289,7 @@ const ShowCertification = (props: ShowCertificationProps): JSX.Element => { ); const urlFriendlyCertTitle = encodeURIComponent(certTitle); + const linkedInCredentialId = `${username}-${linkedInCredentialIds[certSlug]}`; const shareCertBtns = ( @@ -296,7 +300,7 @@ const ShowCertification = (props: ShowCertificationProps): JSX.Element => { variant='primary' href={`https://www.linkedin.com/profile/add?startTask=CERTIFICATION_NAME&name=${urlFriendlyCertTitle}&organizationId=4831032&issueYear=${certYear}&issueMonth=${ certMonth + 1 - }&certUrl=${certURL}`} + }&certUrl=${certURL}&certId=${linkedInCredentialId}`} target='_blank' data-playwright-test-label='linkedin-share-btn' > diff --git a/e2e/certification.spec.ts b/e2e/certification.spec.ts index f82b516190c..cb8a3bb1de7 100644 --- a/e2e/certification.spec.ts +++ b/e2e/certification.spec.ts @@ -55,7 +55,7 @@ test.describe('Certification page - Non Microsoft', () => { await expect(linkedinLink).toBeVisible(); await expect(linkedinLink).toHaveAttribute( 'href', - `https://www.linkedin.com/profile/add?startTask=CERTIFICATION_NAME&name=Responsive%20Web%20Design&organizationId=4831032&issueYear=2018&issueMonth=8&certUrl=https://freecodecamp.org/certification/certifieduser/responsive-web-design` + `https://www.linkedin.com/profile/add?startTask=CERTIFICATION_NAME&name=Responsive%20Web%20Design&organizationId=4831032&issueYear=2018&issueMonth=8&certUrl=https://freecodecamp.org/certification/certifieduser/responsive-web-design&certId=certifieduser-rwd` ); const twitterLink = certLink.getByTestId('twitter-share-btn'); @@ -191,7 +191,7 @@ test.describe('Certification page - Microsoft', () => { await expect(linkedinLink).toBeVisible(); await expect(linkedinLink).toHaveAttribute( 'href', - 'https://www.linkedin.com/profile/add?startTask=CERTIFICATION_NAME&name=Foundational%20C%23%20with%20Microsoft&organizationId=4831032&issueYear=2023&issueMonth=9&certUrl=https://freecodecamp.org/certification/certifieduser/foundational-c-sharp-with-microsoft' + 'https://www.linkedin.com/profile/add?startTask=CERTIFICATION_NAME&name=Foundational%20C%23%20with%20Microsoft&organizationId=4831032&issueYear=2023&issueMonth=9&certUrl=https://freecodecamp.org/certification/certifieduser/foundational-c-sharp-with-microsoft&certId=certifieduser-fcswm' ); const twitterLink = certLink.getByTestId('twitter-share-btn'); diff --git a/shared/config/certification-settings.test.ts b/shared/config/certification-settings.test.ts new file mode 100644 index 00000000000..312eb6b24f5 --- /dev/null +++ b/shared/config/certification-settings.test.ts @@ -0,0 +1,10 @@ +import { Certification, linkedInCredentialIds } from './certification-settings'; + +describe('linkedInCredentialIds', () => { + it('should contain a value for all certifications', () => { + const allCertifications = Object.values(Certification).sort(); + const linkedInCredentialIdsKeys = Object.keys(linkedInCredentialIds).sort(); + + expect(linkedInCredentialIdsKeys).toEqual(allCertifications); + }); +}); diff --git a/shared/config/certification-settings.ts b/shared/config/certification-settings.ts index de01cc92b81..f84a57ca033 100644 --- a/shared/config/certification-settings.ts +++ b/shared/config/certification-settings.ts @@ -255,4 +255,30 @@ export const certTypeTitleMap = { 'JavaScript Algorithms and Data Structures (Beta)' }; +export type CertSlug = (typeof Certification)[keyof typeof Certification]; + +export const linkedInCredentialIds = { + [Certification.LegacyFrontEnd]: 'lfe', + [Certification.LegacyBackEnd]: 'lbe', + [Certification.LegacyDataVis]: 'ldv', + [Certification.LegacyInfoSecQa]: 'lisaqa', + [Certification.LegacyFullStack]: 'lfs', + [Certification.RespWebDesign]: 'rwd', + [Certification.FrontEndDevLibs]: 'fedl', + [Certification.JsAlgoDataStruct]: 'ljaads', + [Certification.DataVis]: 'dv', + [Certification.BackEndDevApis]: 'bedaa', + [Certification.QualityAssurance]: 'qa', + [Certification.InfoSec]: 'is', + [Certification.SciCompPy]: 'scwp', + [Certification.DataAnalysisPy]: 'dawp', + [Certification.MachineLearningPy]: 'mlwp', + [Certification.RelationalDb]: 'rd', + [Certification.CollegeAlgebraPy]: 'cawp', + [Certification.FoundationalCSharp]: 'fcswm', + [Certification.UpcomingPython]: 'up', + [Certification.JsAlgoDataStructNew]: 'jaads', + [Certification.A2English]: 'a2efd' +}; + export const oldDataVizId = '561add10cb82ac38a17513b3';