From 42a4fc42936178457cbc396fd812b1b863460752 Mon Sep 17 00:00:00 2001 From: Naytitorn Chaovirachot Date: Sun, 24 Nov 2024 17:11:22 +0700 Subject: [PATCH] add most test for page render --- .babelrc | 3 + __tests__/Home.test.tsx | 23 - __tests__/page/adminPage.test.ts | 30 ++ __tests__/page/authPage.test.ts | 40 ++ __tests__/page/businessPage.test.ts | 33 ++ __tests__/page/calendarPage.test.ts | 19 + __tests__/page/errorLoadingPage.test.ts | 29 ++ __tests__/page/homePage.test.ts | 18 + __tests__/page/investmentPage.test.ts | 34 ++ __tests__/page/legalPage.test.ts | 26 ++ __tests__/page/otherPage.test.ts | 44 ++ __tests__/page/userPage.test.ts | 29 ++ __tests__/page/verificationPage.test.ts | 38 ++ jest.config.ts | 4 + package-lock.json | 546 ++++++++++++++++++++++++ package.json | 2 + src/app/business/apply/page.tsx | 4 +- src/app/not-found.tsx | 4 +- src/components/alert/noData/alert.tsx | 4 +- 19 files changed, 900 insertions(+), 30 deletions(-) create mode 100644 .babelrc delete mode 100644 __tests__/Home.test.tsx create mode 100644 __tests__/page/adminPage.test.ts create mode 100644 __tests__/page/authPage.test.ts create mode 100644 __tests__/page/businessPage.test.ts create mode 100644 __tests__/page/calendarPage.test.ts create mode 100644 __tests__/page/errorLoadingPage.test.ts create mode 100644 __tests__/page/homePage.test.ts create mode 100644 __tests__/page/investmentPage.test.ts create mode 100644 __tests__/page/legalPage.test.ts create mode 100644 __tests__/page/otherPage.test.ts create mode 100644 __tests__/page/userPage.test.ts create mode 100644 __tests__/page/verificationPage.test.ts diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..1a6571b --- /dev/null +++ b/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["next/babel"] +} \ No newline at end of file diff --git a/__tests__/Home.test.tsx b/__tests__/Home.test.tsx deleted file mode 100644 index f7280df..0000000 --- a/__tests__/Home.test.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import { render, screen } from "@testing-library/react"; -import Home from "@/app/page"; -import '@testing-library/jest-dom' - -// Mock Cookies -jest.mock("next/headers", () => ({ - cookies: jest.fn(() => ({ - getAll: jest.fn(() => [{ name: "test", value: "cookieValue" }]), // Simulate returning cookies - setAll: jest.fn(), // Simulate setAll method - })), -})); - -describe("Test Setup", () => { - it("should be true", () => { - expect(true).toBe(true); - }); -}); - -describe("Home Component", () => { - it("renders without crashing", async () => { - render(await Home()); - }); -}); \ No newline at end of file diff --git a/__tests__/page/adminPage.test.ts b/__tests__/page/adminPage.test.ts new file mode 100644 index 0000000..21332be --- /dev/null +++ b/__tests__/page/adminPage.test.ts @@ -0,0 +1,30 @@ +import { render } from "@testing-library/react"; + +// Pages - Admin +import AdminPage from "@/app/admin/page"; +import BusinesssApplicationAdminPage from "@/app/admin/business/page"; +import ProjectAdminPage from "@/app/admin/business/[businessId]/projects/page"; + +// Mock Cookies +jest.mock("next/headers", () => ({ + cookies: jest.fn(() => ({ + getAll: jest.fn(() => [{ name: "test", value: "cookieValue" }]), // Simulate returning cookies + setAll: jest.fn(), // Simulate setAll method + })), +})); + +// Admin Pages +describe("Admin Pages", () => { + it("Admin Page should render without crashing", async () => { + render(await AdminPage()); + }); + + // it("Business Application Admin Page should render without crashing", async () => { + // render(await BusinesssApplicationAdminPage()); + // }); + + it("Project Admin Page should render without crashing", async () => { + render(await ProjectAdminPage({ params: { businessId: "1" } })); + }); +}); + diff --git a/__tests__/page/authPage.test.ts b/__tests__/page/authPage.test.ts new file mode 100644 index 0000000..2da8bc9 --- /dev/null +++ b/__tests__/page/authPage.test.ts @@ -0,0 +1,40 @@ +import { render } from "@testing-library/react"; + +// Pages - Auth +import Signup from "@/app/auth/signup/page"; +import Login from "@/app/auth/page"; + +// Mock Cookies +jest.mock("next/headers", () => ({ + cookies: jest.fn(() => ({ + getAll: jest.fn(() => [{ name: "test", value: "cookieValue" }]), // Simulate returning cookies + setAll: jest.fn(), // Simulate setAll method + })), +})); + +// Mock Router +jest.mock('next/navigation', () => ({ + useRouter: jest.fn().mockReturnValue({ + push: jest.fn(), + replace: jest.fn(), + prefetch: jest.fn(), + pathname: '/', + query: {}, + asPath: '/', + }), + usePathname: jest.fn(() => '/'), + useSearchParams: jest.fn(() => ({})), +})); + + +describe("Signup Page", () => { + it("should render without crashing", () => { + render(Signup()); + }); +}); + +describe("Login Page", () => { + it("should render without crashing", () => { + render(Login()); + }); +}); \ No newline at end of file diff --git a/__tests__/page/businessPage.test.ts b/__tests__/page/businessPage.test.ts new file mode 100644 index 0000000..a402576 --- /dev/null +++ b/__tests__/page/businessPage.test.ts @@ -0,0 +1,33 @@ +import { render } from "@testing-library/react"; + +// Pages - Business +import ApplyBusiness from "@/app/business/apply/page"; + +// Mock Cookies +jest.mock("next/headers", () => ({ + cookies: jest.fn(() => ({ + getAll: jest.fn(() => [{ name: "test", value: "cookieValue" }]), // Simulate returning cookies + setAll: jest.fn(), // Simulate setAll method + })), +})); + +// Mock Router +jest.mock('next/navigation', () => ({ + useRouter: jest.fn().mockReturnValue({ + push: jest.fn(), + replace: jest.fn(), + prefetch: jest.fn(), + pathname: '/', + query: {}, + asPath: '/', + }), + usePathname: jest.fn(() => '/'), + useSearchParams: jest.fn(() => ({})), +})); + +// Business Pages +// describe("Business Pages", () => { +// it("Apply Business Page should render without crashing", async () => { +// render(await ApplyBusiness()); +// }); +// }); \ No newline at end of file diff --git a/__tests__/page/calendarPage.test.ts b/__tests__/page/calendarPage.test.ts new file mode 100644 index 0000000..a697a2a --- /dev/null +++ b/__tests__/page/calendarPage.test.ts @@ -0,0 +1,19 @@ +import { render } from "@testing-library/react"; + +// Pages - Calendar +import ManageMeetingPage from "@/app/calendar/manage/page"; + +// Mock Cookies +jest.mock("next/headers", () => ({ + cookies: jest.fn(() => ({ + getAll: jest.fn(() => [{ name: "test", value: "cookieValue" }]), // Simulate returning cookies + setAll: jest.fn(), // Simulate setAll method + })), +})); + +// Calendar Pages +describe("Calendar Pages", () => { + // it("Manage Meeting Page should render without crashing", async () => { + // render(await ManageMeetingPage()); + // }); +}); \ No newline at end of file diff --git a/__tests__/page/errorLoadingPage.test.ts b/__tests__/page/errorLoadingPage.test.ts new file mode 100644 index 0000000..75b2cb2 --- /dev/null +++ b/__tests__/page/errorLoadingPage.test.ts @@ -0,0 +1,29 @@ +import { render } from "@testing-library/react"; + +// Error and Loading Pages +import Error from "@/app/error"; +import Loading from "@/app/loading"; +import NotFound from "@/app/not-found"; + +// Mock Cookies +jest.mock("next/headers", () => ({ + cookies: jest.fn(() => ({ + getAll: jest.fn(() => [{ name: "test", value: "cookieValue" }]), // Simulate returning cookies + setAll: jest.fn(), // Simulate setAll method + })), +})); + +// Error and Loading Pages +describe("Error and Loading Pages", () => { + // it("Error Page should render without crashing", async () => { + // render(await Error()); + // }); + + it("Loading Page should render without crashing", async () => { + render(await Loading()); + }); + + it("Not Found Page should render without crashing", async () => { + render(await NotFound()); + }); +}); \ No newline at end of file diff --git a/__tests__/page/homePage.test.ts b/__tests__/page/homePage.test.ts new file mode 100644 index 0000000..8498bca --- /dev/null +++ b/__tests__/page/homePage.test.ts @@ -0,0 +1,18 @@ +import { render } from "@testing-library/react"; + +import Home from "@/app/page"; + +// Mock Cookies +jest.mock("next/headers", () => ({ + cookies: jest.fn(() => ({ + getAll: jest.fn(() => [{ name: "test", value: "cookieValue" }]), // Simulate returning cookies + setAll: jest.fn(), // Simulate setAll method + })), +})); + +// Homepage +describe("Homepage", () => { + it("Home Page should render without crashing", async () => { + render(await Home()); + }); +}); \ No newline at end of file diff --git a/__tests__/page/investmentPage.test.ts b/__tests__/page/investmentPage.test.ts new file mode 100644 index 0000000..81519c8 --- /dev/null +++ b/__tests__/page/investmentPage.test.ts @@ -0,0 +1,34 @@ +import { render } from "@testing-library/react"; + +// Pages - Investment +import Deals from "@/app/(investment)/deals/page"; +import ProjectDealPage from "@/app/(investment)/deals/[id]/page"; +import InvestPage from "@/app/(investment)/invest/[id]/page"; +import PaymentSuccess from "@/app/(investment)/payment-success/page"; + +// Mock Cookies +jest.mock("next/headers", () => ({ + cookies: jest.fn(() => ({ + getAll: jest.fn(() => [{ name: "test", value: "cookieValue" }]), // Simulate returning cookies + setAll: jest.fn(), // Simulate setAll method + })), +})); + +// Investment Pages +describe("Investment Pages", () => { + // it("Deals Page should render without crashing", async () => { + // render(await Deals()); + // }); + + // it("Project Deal Page should render without crashing", async () => { + // render(await ProjectDealPage({ params: { id: 1 } })); + // }); + + // it("Invest Page should render without crashing", async () => { + // render(await InvestPage()); + // }); + + it("Payment Success Page should render without crashing", async () => { + render(await PaymentSuccess({ searchParams: { amount: '100' } })); + }); +}); \ No newline at end of file diff --git a/__tests__/page/legalPage.test.ts b/__tests__/page/legalPage.test.ts new file mode 100644 index 0000000..6b2e2aa --- /dev/null +++ b/__tests__/page/legalPage.test.ts @@ -0,0 +1,26 @@ +import { render } from "@testing-library/react"; + +// Pages - Legal +import About from "@/app/(legal)/about/page"; +import PrivacyPolicy from "@/app/(legal)/privacy/page"; +import InvestmentRisks from "@/app/(legal)/risks/page"; +import TermsOfService from "@/app/(legal)/terms/page"; + +// Legal Pages +describe("Legal Pages", () => { + it("About Page should render without crashing", () => { + render(About()); + }); + + it("Privacy Policy Page should render without crashing", () => { + render(PrivacyPolicy()); + }); + + it("Investment Risks Page should render without crashing", () => { + render(InvestmentRisks()); + }); + + it("Terms of Service Page should render without crashing", () => { + render(TermsOfService()); + }); +}); \ No newline at end of file diff --git a/__tests__/page/otherPage.test.ts b/__tests__/page/otherPage.test.ts new file mode 100644 index 0000000..127ef36 --- /dev/null +++ b/__tests__/page/otherPage.test.ts @@ -0,0 +1,44 @@ +import { render } from "@testing-library/react"; + +// Pages - Other +import FindContent from "@/app/find/page"; +import FollowPage from "@/app/follow/page"; +import Portfolio from "@/app/portfolio/[uid]/page"; +import EditProjectPage from "@/app/project/[projectId]/edit/page"; +import ApplyProject from "@/app/project/apply/page"; + +// Mock Cookies +jest.mock("next/headers", () => ({ + cookies: jest.fn(() => ({ + getAll: jest.fn(() => [{ name: "test", value: "cookieValue" }]), // Simulate returning cookies + setAll: jest.fn(), // Simulate setAll method + })), +})); + +// Mock router +jest.mock("next/router", () => ({ + useRouter: jest.fn(), +})); + +// Other Pages +describe("Other Pages", () => { + it("Find Content Page should render without crashing", async () => { + render(await FindContent({ searchParams: { query: "test" } })); + }); + + // it("Follow Page should render without crashing", async () => { + // render(await FollowPage()); + // }); + + it("Portfolio Page should render without crashing", async () => { + render(await Portfolio({ params: { uid: "142b29e6-420e-44fb-935b-c98d129536ea" } })); + }); + + // it("Edit Project Page should render without crashing", async () => { + // render(await EditProjectPage({ params: { projectId: "project-id" } })); + // }); + + // it("Apply Project Page should render without crashing", async () => { + // render(await ApplyProject()); + // }); +}); \ No newline at end of file diff --git a/__tests__/page/userPage.test.ts b/__tests__/page/userPage.test.ts new file mode 100644 index 0000000..ca0ee71 --- /dev/null +++ b/__tests__/page/userPage.test.ts @@ -0,0 +1,29 @@ +import { render } from "@testing-library/react"; + +// Pages - User +import Notification from "@/app/(user)/notification/page"; +import ProfilePage from "@/app/(user)/profile/[uid]/page"; +import EditProfileForm from "@/app/(user)/profile/[uid]/edit/EditProfileForm"; + +// Mock Cookies +jest.mock("next/headers", () => ({ + cookies: jest.fn(() => ({ + getAll: jest.fn(() => [{ name: "test", value: "cookieValue" }]), // Simulate returning cookies + setAll: jest.fn(), // Simulate setAll method + })), +})); + +// User Pages +describe("User Pages", () => { + // it("Notification Page should render without crashing", async () => { + // render(await Notification()); + // }); + + // it("Profile Page should render without crashing", async () => { + // render(await ProfilePage({ params: { uid: "user-id" } })); + // }); + + // it("Edit Profile Form should render without crashing", async () => { + // render(await EditProfileForm({ params: { uid: "user-id" } })); + // }); +}); \ No newline at end of file diff --git a/__tests__/page/verificationPage.test.ts b/__tests__/page/verificationPage.test.ts new file mode 100644 index 0000000..6cf99c3 --- /dev/null +++ b/__tests__/page/verificationPage.test.ts @@ -0,0 +1,38 @@ +import { render } from "@testing-library/react"; + +// Pages - Verification +import VerifyPage from "@/app/verify/page"; + +// Mock Cookies +jest.mock("next/headers", () => ({ + cookies: jest.fn(() => ({ + getAll: jest.fn(() => [{ name: "test", value: "cookieValue" }]), // Simulate returning cookies + setAll: jest.fn(), // Simulate setAll method + })), +})); + +// Mock Router +jest.mock('next/navigation', () => ({ + useRouter: jest.fn().mockReturnValue({ + push: jest.fn(), + replace: jest.fn(), + prefetch: jest.fn(), + pathname: '/', + query: {}, + asPath: '/', + }), + usePathname: jest.fn(() => '/'), + useSearchParams: jest.fn(() => ({ + get: jest.fn((key) => { + if (key === 'email') return 'test@example.com'; // Mock behavior for 'email' query param + return null; // Return null for other keys + }) + })), +})); + +// Verification Pages +// describe("Verification Pages", () => { +// it("Verify Page should render without crashing", () => { +// render(VerifyPage()); +// }); +// }); \ No newline at end of file diff --git a/jest.config.ts b/jest.config.ts index e39e528..41b0432 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -10,6 +10,10 @@ const createJestConfig = nextJest({ const config: Config = { coverageProvider: 'v8', testEnvironment: 'jsdom', + transformIgnorePatterns: [ + '/node_modules/(?!(flat|@supabase-cache-helpers|react-markdown)/)' + ], + setupFiles: ["jest-canvas-mock"] // Add more setup options before each test is run // setupFilesAfterEnv: ['/jest.setup.ts'], } diff --git a/package-lock.json b/package-lock.json index 4717b17..273d9cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -50,6 +50,7 @@ "dotenv": "^16.4.5", "embla-carousel-react": "^8.2.0", "framer-motion": "^11.11.17", + "jest-canvas-mock": "^2.5.2", "lucide-react": "^0.428.0", "next": "^14.2.15", "next-themes": "^0.3.0", @@ -72,6 +73,7 @@ "zod": "^3.23.8" }, "devDependencies": { + "@babel/preset-typescript": "^7.26.0", "@eslint/js": "^9.13.0", "@playwright/test": "^1.47.2", "@tailwindcss/typography": "^0.5.15", @@ -347,6 +349,33 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure/node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-compilation-targets": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", @@ -391,6 +420,101 @@ "dev": true, "license": "ISC" }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", + "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/generator": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/traverse": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-environment-visitor": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", @@ -467,6 +591,83 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions/node_modules/@babel/generator": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions/node_modules/@babel/traverse": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions/node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@babel/helper-module-imports": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", @@ -625,6 +826,33 @@ "node": ">=6" } }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression/node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-plugin-utils": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", @@ -635,6 +863,241 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", + "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers/node_modules/@babel/generator": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers/node_modules/@babel/traverse": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers/node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz", + "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access/node_modules/@babel/generator": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access/node_modules/@babel/traverse": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access/node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers/node_modules/@babel/generator": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers/node_modules/@babel/traverse": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers/node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@babel/helper-split-export-declaration": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", @@ -983,6 +1446,64 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz", + "integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-simple-access": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.9.tgz", + "integrity": "sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", + "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-typescript": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/runtime": { "version": "7.26.0", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", @@ -8434,6 +8955,12 @@ "node": ">=4" } }, + "node_modules/cssfontparser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/cssfontparser/-/cssfontparser-1.2.1.tgz", + "integrity": "sha512-6tun4LoZnj7VN6YeegOVb67KBX/7JJsqvj+pv3ZA7F878/eN33AbGa5b/S/wXxS/tcp8nc40xRUrsPlxIyNUPg==", + "license": "MIT" + }, "node_modules/cssom": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", @@ -11654,6 +12181,16 @@ } } }, + "node_modules/jest-canvas-mock": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jest-canvas-mock/-/jest-canvas-mock-2.5.2.tgz", + "integrity": "sha512-vgnpPupjOL6+L5oJXzxTxFrlGEIbHdZqFU+LFNdtLxZ3lRDCl17FlTMM7IatoRQkrcyOTMlDinjUguqmQ6bR2A==", + "license": "MIT", + "dependencies": { + "cssfontparser": "^1.2.1", + "moo-color": "^1.0.2" + } + }, "node_modules/jest-changed-files": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", @@ -14314,6 +14851,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/moo-color": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/moo-color/-/moo-color-1.0.3.tgz", + "integrity": "sha512-i/+ZKXMDf6aqYtBhuOcej71YSlbjT3wCO/4H1j8rPvxDJEifdwgg5MaFyu6iYAT8GBZJg2z0dkgK4YMzvURALQ==", + "license": "MIT", + "dependencies": { + "color-name": "^1.1.4" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", diff --git a/package.json b/package.json index a261d37..b50a4e4 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "dotenv": "^16.4.5", "embla-carousel-react": "^8.2.0", "framer-motion": "^11.11.17", + "jest-canvas-mock": "^2.5.2", "lucide-react": "^0.428.0", "next": "^14.2.15", "next-themes": "^0.3.0", @@ -75,6 +76,7 @@ "zod": "^3.23.8" }, "devDependencies": { + "@babel/preset-typescript": "^7.26.0", "@eslint/js": "^9.13.0", "@playwright/test": "^1.47.2", "@tailwindcss/typography": "^0.5.15", diff --git a/src/app/business/apply/page.tsx b/src/app/business/apply/page.tsx index d20a09c..4679e85 100644 --- a/src/app/business/apply/page.tsx +++ b/src/app/business/apply/page.tsx @@ -12,6 +12,7 @@ import { uploadFile } from "@/app/api/generalApi"; import { hasUserApplied, transformChoice } from "./actions"; import { useRouter } from "next/navigation"; import toast from "react-hot-toast"; + type businessSchema = z.infer; const BUCKET_PITCH_NAME = "business-application"; let supabase = createSupabaseClient(); @@ -19,12 +20,13 @@ let supabase = createSupabaseClient(); export default function ApplyBusiness() { const router = useRouter(); const alertShownRef = useRef(false); - // const [success, setSucess] = useState(false); + // const [success, setSuccess] = useState(false); const onSubmit: SubmitHandler = async (data) => { const transformedData = await transformChoice(data); await sendApplication(transformedData); }; + const sendApplication = async (recvData: any) => { // setSucess(false); const { diff --git a/src/app/not-found.tsx b/src/app/not-found.tsx index 6c41fcd..71c16e2 100644 --- a/src/app/not-found.tsx +++ b/src/app/not-found.tsx @@ -1,6 +1,6 @@ import Link from "next/link"; -function NotFound() { +export default function NotFound() { return (
@@ -19,5 +19,3 @@ function NotFound() {
); } - -export default NotFound; diff --git a/src/components/alert/noData/alert.tsx b/src/components/alert/noData/alert.tsx index f89b74a..bd06c3a 100644 --- a/src/components/alert/noData/alert.tsx +++ b/src/components/alert/noData/alert.tsx @@ -13,8 +13,6 @@ const alertOption = { export function NoDataAlert() { return ( -
- -
+ ); }