From 2353c3448e225fbb02bdb7b3eb9b53cfe75c30f2 Mon Sep 17 00:00:00 2001 From: luke-h1 Date: Sun, 5 Jan 2025 15:43:55 +0000 Subject: [PATCH] feat(frontend): add new job --- .../ExperienceItem/ExperienceItem.test.tsx | 48 ++++++++++--- .../ExperienceItem.test.tsx.snap | 70 +++++++++++++++++++ src/config/jobs.ts | 14 +++- 3 files changed, 123 insertions(+), 9 deletions(-) diff --git a/src/components/ExperienceItem/ExperienceItem.test.tsx b/src/components/ExperienceItem/ExperienceItem.test.tsx index 5ccd011c2..0fb9c6237 100644 --- a/src/components/ExperienceItem/ExperienceItem.test.tsx +++ b/src/components/ExperienceItem/ExperienceItem.test.tsx @@ -10,6 +10,10 @@ const skyBet = companies.find( company => company.title === 'Sky Betting & Gaming', ) as Company; +const flutter = companies.find( + company => company.title === 'Flutter UKI', +) as Company; + describe('ExperienceItem', () => { test.each(companies)('should render title for %s', company => { const { container } = render(); @@ -21,7 +25,7 @@ describe('ExperienceItem', () => { test('renders all jobs', () => { render(); - const list = screen.getByTestId(`ExperienceItem-list-HiveIT`); + const list = screen.getByTestId('ExperienceItem-list-HiveIT'); const items = within(list).getAllByRole('listitem'); expect(items).toHaveLength(3); @@ -30,7 +34,7 @@ describe('ExperienceItem', () => { test('renders in desc order', () => { render(); - const list = screen.getByTestId(`ExperienceItem-list-HiveIT`); + const list = screen.getByTestId('ExperienceItem-list-HiveIT'); const items = within(list).getAllByRole('listitem'); expect(items[0]).toHaveTextContent('Software Engineer'); @@ -41,7 +45,7 @@ describe('ExperienceItem', () => { test('renders correct dates', () => { render(); - const list = screen.getByTestId(`ExperienceItem-list-HiveIT`); + const list = screen.getByTestId('ExperienceItem-list-HiveIT'); const items = within(list).getAllByRole('listitem'); expect(items[0]).toHaveTextContent('May 2022 — Aug 2023'); @@ -70,7 +74,7 @@ describe('ExperienceItem', () => { expect( screen.getByTestId(`HiveIT-${toCamelCase(job.title)}-description`), - ).toHaveTextContent(job.description); + ).toHaveTextContent(job.description as string); }); }); @@ -78,17 +82,17 @@ describe('ExperienceItem', () => { test('renders all jobs', () => { render(); - const list = screen.getByTestId(`ExperienceItem-list-SkyBetting&Gaming`); + const list = screen.getByTestId('ExperienceItem-list-SkyBetting&Gaming'); const items = within(list).getAllByRole('listitem'); expect(items).toHaveLength(1); expect(items[0]).toHaveTextContent('Software Engineer'); }); - test('renders correct dates', () => { + test('renders correct date range', () => { render(); - const list = screen.getByTestId(`ExperienceItem-list-SkyBetting&Gaming`); + const list = screen.getByTestId('ExperienceItem-list-SkyBetting&Gaming'); const items = within(list).getAllByRole('listitem'); expect(items[0]).toHaveTextContent('Aug 2023 — Nov 2024'); @@ -107,7 +111,35 @@ describe('ExperienceItem', () => { expect( screen.getByTestId('SkyBetting&Gaming-SoftwareEngineer-description'), - ).toHaveTextContent(skyBet.jobs[0].description); + ).toHaveTextContent(skyBet.jobs[0].description as string); + }); + }); + + describe('Flutter', () => { + test('renders all jobs', () => { + render(); + const list = screen.getByTestId('ExperienceItem-list-FlutterUKI'); + const items = within(list).getAllByRole('listitem'); + expect(items).toHaveLength(1); + + expect(items[0]).toHaveTextContent('Software Developer'); + }); + + test('renders correct date range', () => { + render(); + + const list = screen.getByTestId('ExperienceItem-list-FlutterUKI'); + const items = within(list).getAllByRole('listitem'); + + expect(items[0]).toHaveTextContent('Jan 2025 — Now'); + }); + + test('renders description', () => { + render(); + + expect( + screen.getByTestId('FlutterUKI-SoftwareDeveloper-description'), + ).toHaveTextContent('No description yet'); }); }); }); diff --git a/src/components/ExperienceItem/__snapshots__/ExperienceItem.test.tsx.snap b/src/components/ExperienceItem/__snapshots__/ExperienceItem.test.tsx.snap index b06914d1d..5c41bcd69 100644 --- a/src/components/ExperienceItem/__snapshots__/ExperienceItem.test.tsx.snap +++ b/src/components/ExperienceItem/__snapshots__/ExperienceItem.test.tsx.snap @@ -231,3 +231,73 @@ exports[`ExperienceItem should render title for { id: 2, title: 'Sky Betting & G `; + +exports[`ExperienceItem should render title for { id: 3, title: 'Flutter UKI', jobs: [Array] } 1`] = ` +
+ +
+

+ Flutter UKI +

+
    +
  • +
    +
    +

    + Software Developer +

    +

    + Leeds, UK +

    +
    +
    +

    + No description yet +

    +
    +
    +

    + Jan 2025 + — + + Now +
    +

    +
    +
    +
  • +
+
+
+`; diff --git a/src/config/jobs.ts b/src/config/jobs.ts index 618b026a8..a6f3a6da1 100644 --- a/src/config/jobs.ts +++ b/src/config/jobs.ts @@ -4,7 +4,7 @@ interface Job { location: string; startDate: string; endDate?: string; - description: string; + description?: string; } export interface Company { @@ -58,5 +58,17 @@ const companies: Company[] = [ }, ], }, + { + id: 3, + title: 'Flutter UKI', + jobs: [ + { + id: 5, + title: 'Software Developer', + location: 'Leeds, UK', + startDate: '06/01/2025', + }, + ], + }, ]; export default companies;