diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8c0da811..41bf1aa0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7023,4 +7023,4 @@ snapshots: dependencies: zod: 3.22.4 - zod@3.22.4: {} + zod@3.22.4: {} \ No newline at end of file diff --git a/src/components/Button.jsx b/src/components/Button.jsx index 39bb8135..304e26dc 100644 --- a/src/components/Button.jsx +++ b/src/components/Button.jsx @@ -3,13 +3,15 @@ import React from "react"; import { FiArrowRightCircle } from "react-icons/fi"; import { Link } from "react-router-dom"; -function Button({ link, title }) { +function Button({ link, title, ...props }) { return (
diff --git a/src/components/FAQ.jsx b/src/components/FAQ.jsx index efbd23b1..20cc1893 100644 --- a/src/components/FAQ.jsx +++ b/src/components/FAQ.jsx @@ -15,6 +15,7 @@ function FAQ({ questions = [] }) {

diff --git a/src/pages/landingPage/sections/OurEvents.jsx b/src/pages/landingPage/sections/OurEvents.jsx index 4b57995d..6e8829a2 100644 --- a/src/pages/landingPage/sections/OurEvents.jsx +++ b/src/pages/landingPage/sections/OurEvents.jsx @@ -44,7 +44,12 @@ function OurEvents() {

Upcoming Events

-
{isError && ( @@ -99,6 +104,7 @@ function UpcomingEventCard({ event }) {
diff --git a/src/pages/landingPage/sections/StatsSection.jsx b/src/pages/landingPage/sections/StatsSection.jsx index c941abcf..a28c0806 100644 --- a/src/pages/landingPage/sections/StatsSection.jsx +++ b/src/pages/landingPage/sections/StatsSection.jsx @@ -35,7 +35,7 @@ function StatsSection() { A community geared towards holistic results{" "} -
+
teams diff --git a/src/pages/landingPage/sections/TestimonialSection.jsx b/src/pages/landingPage/sections/TestimonialSection.jsx index 87e2bb58..2f5a9672 100644 --- a/src/pages/landingPage/sections/TestimonialSection.jsx +++ b/src/pages/landingPage/sections/TestimonialSection.jsx @@ -6,7 +6,10 @@ import { testimonialData } from "../data"; function TestimonialSection() { return ( -
+

What people are saying about us{" "}

diff --git a/src/pages/landingPage/sections/WhatWeDo.jsx b/src/pages/landingPage/sections/WhatWeDo.jsx index 3036da0a..4b34ba97 100644 --- a/src/pages/landingPage/sections/WhatWeDo.jsx +++ b/src/pages/landingPage/sections/WhatWeDo.jsx @@ -25,7 +25,7 @@ function WhatWeDoCard({ card, index }) { const { title, description, image, link } = card; return (
diff --git a/tests/pages/landing-page.spec.js b/tests/pages/landing-page.spec.js index 51cba0bf..4d6ae05a 100644 --- a/tests/pages/landing-page.spec.js +++ b/tests/pages/landing-page.spec.js @@ -21,4 +21,95 @@ test.describe("Landing page tests", () => { }) ).toBeVisible(); }); + + // eslint-disable-next-line quotes + test('Check "View More" button functionality', async ({ page }) => { + // Verify that the "View More" button is present and clickable + // eslint-disable-next-line quotes + const viewMoreButton = page.locator('text="View More"').first(); + await expect(viewMoreButton).toBeVisible(); + await expect(viewMoreButton).toBeEnabled(); + + await viewMoreButton.click(); + await page.waitForTimeout(1000); + }); + + // Test "HOW WE WORK" section + test("Check 'HOW WE WORK' section title and content", async ({ page }) => { + // eslint-disable-next-line quotes + const howWeWorkSection = page.locator('text="How we work"').first(); + await expect(howWeWorkSection).toBeVisible(); + }); + + test("Check 'WHAT WE DO' section title and content", async ({ page }) => { + // eslint-disable-next-line quotes + const whatWeDoSection = page.locator('text="what we do"'); + await expect(whatWeDoSection).toBeVisible(); + + const whatWeDoContent = page.locator(".what-we-do-content").first(); + await expect(whatWeDoContent).toBeVisible(); + }); + + test("Check 'OUR EVENTS' section title, events card, and 'View More' button", async ({ + page, + }) => { + // eslint-disable-next-line quotes + const ourEventsSection = page.locator('text="our events"').first(); + await expect(ourEventsSection).toBeVisible(); + + // checks if at least one event card is displayed + const eventCards = page.locator("data-testid=event-cards").first(); + await expect(eventCards).toBeVisible(); + + const viewMoreEventsButton = page.locator("data-testid=events-view-more"); + await expect(viewMoreEventsButton).toBeVisible(); + await expect(viewMoreEventsButton).toBeEnabled(); + await viewMoreEventsButton.click(); + expect(page.url()).toBe("http://localhost:5173/events"); + }); + + test("Check 'OUR IMPACT' section title and stats card", async ({ page }) => { + // eslint-disable-next-line quotes + const ourImpactSection = page.getByText("our impact"); + await ourImpactSection.scrollIntoViewIfNeeded(); + await expect(ourImpactSection).toBeVisible(); + + const statsCards = page.locator(".stats-card"); + await expect(statsCards).toBeVisible(); + }); + + test("Check 'TESTIMONIALS' section title and testimonial card in marquee", async ({ + page, + }) => { + // eslint-disable-next-line quotes + const testimonialsSection = page.getByRole("heading", { + name: "testimonials", + }); + // await testimonialsSection.waitFor({ state: "visible", timeout: 60000 }); + await testimonialsSection.scrollIntoViewIfNeeded(); + await expect(testimonialsSection).toBeVisible(); + + // check if there's at least one testimonial card displayed + const testimonialCards = page.getByTestId("testimonial-card").first(); + await testimonialCards.waitFor({ state: "visible", timeout: 60000 }); + await testimonialCards.scrollIntoViewIfNeeded(); + await expect(testimonialCards).toBeVisible(); + }); + + test("Check 'FAQ' section title and FAQ accordion", async ({ page }) => { + // eslint-disable-next-line quotes + // check if faq section is visible + const faqSection = page.getByRole("heading", { name: "faq" }); + await expect(faqSection).toBeVisible(); + + // check if at least one FAQ accordion is visible + const faqAccordions = page.getByTestId("faq-accordion").first(); + await expect(faqAccordions).toBeVisible(); + + // check if clicking accordion, displays answer + await faqAccordions.click(); + + const accordionContent = page.getByTestId("accordion-answer").first(); + await expect(accordionContent).toBeVisible(); + }); }); diff --git a/vite.config.js.timestamp-1724936058326-f5c1406d3f0ad.mjs b/vite.config.js.timestamp-1724936058326-f5c1406d3f0ad.mjs new file mode 100644 index 00000000..2807eb5a --- /dev/null +++ b/vite.config.js.timestamp-1724936058326-f5c1406d3f0ad.mjs @@ -0,0 +1,37 @@ +// vite.config.js +import path, { dirname } from "path"; +import { fileURLToPath } from "url"; +import react from "file:///home/andrew-dev/Desktop/Dev/SYT/SYT-Web-Redesign/node_modules/.pnpm/@vitejs+plugin-react@4.3.1_vite@5.4.2_@types+node@20.16.2_/node_modules/@vitejs/plugin-react/dist/index.mjs"; +import million from "file:///home/andrew-dev/Desktop/Dev/SYT/SYT-Web-Redesign/node_modules/.pnpm/million@3.1.11_rollup@4.21.1/node_modules/million/dist/packages/compiler.mjs"; +import { defineConfig, loadEnv } from "file:///home/andrew-dev/Desktop/Dev/SYT/SYT-Web-Redesign/node_modules/.pnpm/vite@5.4.2_@types+node@20.16.2/node_modules/vite/dist/node/index.js"; +var __vite_injected_original_import_meta_url = "file:///home/andrew-dev/Desktop/Dev/SYT/SYT-Web-Redesign/vite.config.js"; +var __filename = fileURLToPath(__vite_injected_original_import_meta_url); +var __dirname = dirname(__filename); +var vite_config_default = defineConfig(({ mode }) => { + const env = loadEnv(mode, process.cwd(), ""); + return { + define: { + "process.env.REACT_APP_API_BASE_URL": JSON.stringify( + env.REACT_APP_API_BASE_URL + ) + }, + plugins: [million.vite({ auto: true }), react()], + test: { + include: ["src/**/*.test.js"] + }, + server: { + watch: { + usePolling: true + } + }, + resolve: { + alias: { + "@": path.resolve(__dirname, "./src") + } + } + }; +}); +export { + vite_config_default as default +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCIvaG9tZS9hbmRyZXctZGV2L0Rlc2t0b3AvRGV2L1NZVC9TWVQtV2ViLVJlZGVzaWduXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCIvaG9tZS9hbmRyZXctZGV2L0Rlc2t0b3AvRGV2L1NZVC9TWVQtV2ViLVJlZGVzaWduL3ZpdGUuY29uZmlnLmpzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9ob21lL2FuZHJldy1kZXYvRGVza3RvcC9EZXYvU1lUL1NZVC1XZWItUmVkZXNpZ24vdml0ZS5jb25maWcuanNcIjsvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG4vLy8gPHJlZmVyZW5jZSB0eXBlcz1cInZpdGVzdFwiIC8+XG5pbXBvcnQgcGF0aCwgeyBkaXJuYW1lIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwidXJsXCI7XG5pbXBvcnQgcmVhY3QgZnJvbSBcIkB2aXRlanMvcGx1Z2luLXJlYWN0XCI7XG5pbXBvcnQgbWlsbGlvbiBmcm9tIFwibWlsbGlvbi9jb21waWxlclwiO1xuaW1wb3J0IHsgZGVmaW5lQ29uZmlnLCBsb2FkRW52IH0gZnJvbSBcInZpdGVcIjtcblxuY29uc3QgX19maWxlbmFtZSA9IGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKTtcbmNvbnN0IF9fZGlybmFtZSA9IGRpcm5hbWUoX19maWxlbmFtZSk7XG5cbi8vIGh0dHBzOi8vdml0ZWpzLmRldi9jb25maWcvXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoKHsgbW9kZSB9KSA9PiB7XG4gIGNvbnN0IGVudiA9IGxvYWRFbnYobW9kZSwgcHJvY2Vzcy5jd2QoKSwgXCJcIik7XG4gIHJldHVybiB7XG4gICAgZGVmaW5lOiB7XG4gICAgICBcInByb2Nlc3MuZW52LlJFQUNUX0FQUF9BUElfQkFTRV9VUkxcIjogSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGVudi5SRUFDVF9BUFBfQVBJX0JBU0VfVVJMXG4gICAgICApLFxuICAgIH0sXG4gICAgcGx1Z2luczogW21pbGxpb24udml0ZSh7IGF1dG86IHRydWUgfSksIHJlYWN0KCldLFxuICAgIHRlc3Q6IHtcbiAgICAgIGluY2x1ZGU6IFtcInNyYy8qKi8qLnRlc3QuanNcIl0sXG4gICAgfSxcbiAgICBzZXJ2ZXI6IHtcbiAgICAgIHdhdGNoOiB7XG4gICAgICAgIHVzZVBvbGxpbmc6IHRydWUsXG4gICAgICB9LFxuICAgIH0sXG4gICAgcmVzb2x2ZToge1xuICAgICAgYWxpYXM6IHtcbiAgICAgICAgXCJAXCI6IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsIFwiLi9zcmNcIiksXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59KTtcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFHQSxPQUFPLFFBQVEsZUFBZTtBQUM5QixTQUFTLHFCQUFxQjtBQUM5QixPQUFPLFdBQVc7QUFDbEIsT0FBTyxhQUFhO0FBQ3BCLFNBQVMsY0FBYyxlQUFlO0FBUG9LLElBQU0sMkNBQTJDO0FBUzNQLElBQU0sYUFBYSxjQUFjLHdDQUFlO0FBQ2hELElBQU0sWUFBWSxRQUFRLFVBQVU7QUFHcEMsSUFBTyxzQkFBUSxhQUFhLENBQUMsRUFBRSxLQUFLLE1BQU07QUFDeEMsUUFBTSxNQUFNLFFBQVEsTUFBTSxRQUFRLElBQUksR0FBRyxFQUFFO0FBQzNDLFNBQU87QUFBQSxJQUNMLFFBQVE7QUFBQSxNQUNOLHNDQUFzQyxLQUFLO0FBQUEsUUFDekMsSUFBSTtBQUFBLE1BQ047QUFBQSxJQUNGO0FBQUEsSUFDQSxTQUFTLENBQUMsUUFBUSxLQUFLLEVBQUUsTUFBTSxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFBQSxJQUMvQyxNQUFNO0FBQUEsTUFDSixTQUFTLENBQUMsa0JBQWtCO0FBQUEsSUFDOUI7QUFBQSxJQUNBLFFBQVE7QUFBQSxNQUNOLE9BQU87QUFBQSxRQUNMLFlBQVk7QUFBQSxNQUNkO0FBQUEsSUFDRjtBQUFBLElBQ0EsU0FBUztBQUFBLE1BQ1AsT0FBTztBQUFBLFFBQ0wsS0FBSyxLQUFLLFFBQVEsV0FBVyxPQUFPO0FBQUEsTUFDdEM7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGLENBQUM7IiwKICAibmFtZXMiOiBbXQp9Cg==