diff --git a/src/app/pages/foundation/foundation.js b/src/app/pages/foundation/foundation.tsx similarity index 52% rename from src/app/pages/foundation/foundation.js rename to src/app/pages/foundation/foundation.tsx index 01e2f8873..599fda2b0 100644 --- a/src/app/pages/foundation/foundation.js +++ b/src/app/pages/foundation/foundation.tsx @@ -4,25 +4,61 @@ import LoaderPage from '~/components/jsx-helpers/loader-page'; import ClippedImage from '~/components/clipped-image/clipped-image'; import './foundation.scss'; +type FunderData = { + funderName: string; + url?: string; +}; + +type ImageData = { + file: string; +}; + +type FoundationGroupData = { + groupTitle: string; + description: string; + funders: FunderData[]; + image?: ImageData; +}; + +type FoundationPageData = { + bannerImage: { + meta: { + downloadUrl: string; + }; + }; + bannerHeading: string; + bannerDescription: string; + funderGroups: FoundationGroupData[]; + disclaimer: string; +}; + const slug = 'pages/supporters'; -function Funder({data}) { - return ( - data.url ? - {data.funderName} : - {data.funderName} +function Funder({data}: {data: FunderData}) { + return data.url ? ( + {data.funderName} + ) : ( + {data.funderName} ); } -function Funders({data}) { +function Funders({data}: {data: FunderData[]}) { return (
{testimonial.block}
+{testimonial?.block}
- -{testimonial.name}
- {testimonial.address1}
- {testimonial.address2}
+ -{testimonial?.name}
+
+ {testimonial?.address1}
+
+ {testimonial?.address2}
Thanks to generous funders who support our mission.
', + funderGroups: [ + { + groupTitle: 'Major Funders', + description: 'Organizations that provide significant support', + funders: [ + { + funderName: 'Test Foundation', + url: 'https://example.com' + }, + { + funderName: 'Another Supporter' + } + ] + }, + { + groupTitle: 'Secondary Funders', + description: 'Organizations that provide support', + image: {file: '/path/to/image'}, + funders: [] + } + ], + disclaimer: 'All funders listed have provided support to OpenStax.' +}; + +global.fetch = jest.fn().mockImplementation((args: [string]) => { + const payload = args.includes('pages/supporters') ? mockFoundationData : {}; + + return Promise.resolve({ + ok: true, + json() { + return Promise.resolve(payload); + } + }); +}); + +describe('foundation page', () => { + it('displays funder groups', async () => { + render( +Learn about our institutional partnership program.
' + }, + { + heading: 'Benefits', + description: + 'Discover the benefits of partnering with us.
' + } + ] + ], + quote: 'OpenStax has transformed our teaching approach.', + quoteAuthor: 'Dr. Jane Smith', + quoteTitle: 'Professor of Biology', + quoteSchool: 'State University', + applicationQuote: 'The application process was straightforward.', + applicationQuoteAuthor: 'Prof. John Doe', + applicationQuoteTitle: 'Department Chair', + applicationQuoteSchool: 'Community College' +}; + +global.fetch = jest.fn().mockImplementation((args: [string]) => { + const payload = args.includes('pages/institutional-partnership') + ? mockApplicationData + : {}; + + return Promise.resolve({ + ok: true, + json() { + return Promise.resolve(payload); + } + }); +}); + +function Component() { + return ( +