diff --git a/components/organisms/Wallet/Balance.test.js b/components/organisms/Wallet/Balance.test.js new file mode 100644 index 00000000..36710f88 --- /dev/null +++ b/components/organisms/Wallet/Balance.test.js @@ -0,0 +1,71 @@ +import '@testing-library/jest-dom'; +import { render, screen } from "@testing-library/react"; +import WalletBalance from "./Balance"; +import { SessionProvider } from "next-auth/react"; + +describe("WalletBalance", () => { + test("renders loading message when data is loading", () => { + render( + + + ); + const loadingMessage = screen.getByText("Loading..."); + expect(loadingMessage).toBeInTheDocument(); + }); + + test("renders wallet balance details when data is loaded", () => { + const sessionData = { + user: { + data: { + userId: "1234567890abcdef", + }, + }, + }; + const data = { + isLoading: false, + data: [ + { + type: "MOI", + amount: 100, + currency: "USD", + operations: [], + }, + { + type: "Other", + amount: 200, + currency: "EUR", + operations: [], + }, + ], + }; + + render( + + + + ); + + // Check if wallet balance details are rendered correctly + const walletId = screen.getByText("#12345678...0abcdef"); + expect(walletId).toBeInTheDocument(); + + const walletType = screen.getByText("POUR MOI"); + expect(walletType).toBeInTheDocument(); + + const walletAmount = screen.getByText("$100.00"); + expect(walletAmount).toBeInTheDocument(); + + }); + + // test("renders 'No savings currently in progress' message when data is loaded but no savings are available", () => { + // const data = { + // isLoading: false, + // data: [], + // }; + + // render(); + + // const noSavingsMessage = screen.getByText("Aucun épargne actuellement en cours..."); + // expect(noSavingsMessage).toBeInTheDocument(); + // }); +}); \ No newline at end of file diff --git a/hooks/useLocalStorage.test.js b/hooks/useLocalStorage.test.js new file mode 100644 index 00000000..d25d6a4c --- /dev/null +++ b/hooks/useLocalStorage.test.js @@ -0,0 +1,33 @@ +import { renderHook, act } from "@testing-library/react"; +import { useLocalStorage } from "./useLocalStorage"; + +describe("useLocalStorage", () => { + beforeEach(() => { + localStorage.clear(); + }); + + it("should initialize with fallback value if no stored value exists", () => { + const { result } = renderHook(() => useLocalStorage("testKey", "fallback")); + + expect(result.current[0]).toBe("fallback"); + }); + + it("should initialize with stored value if it exists", () => { + localStorage.setItem("testKey", JSON.stringify("storedValue")); + + const { result } = renderHook(() => useLocalStorage("testKey", "fallback")); + + expect(result.current[0]).toBe("storedValue"); + }); + + it("should update stored value when setValue is called", () => { + const { result } = renderHook(() => useLocalStorage("testKey", "fallback")); + + act(() => { + result.current[1]("newValue"); + }); + + expect(result.current[0]).toBe("newValue"); + expect(JSON.parse(localStorage.getItem("testKey"))).toBe("newValue"); + }); +}); \ No newline at end of file diff --git a/lib/helper.test.js b/lib/helper.test.js index d08afc7a..07e23ae9 100644 --- a/lib/helper.test.js +++ b/lib/helper.test.js @@ -14,6 +14,8 @@ import { sendMessage, sendOtp, sendSMSHash, + setKyc, + checkKyc, } from './helper'; describe('Helper functions', () => { @@ -133,6 +135,18 @@ describe('Helper functions', () => { expect(response).toEqual({ hello: 'world' }); }); + + it('setKyc', async () => { + const response = await setKyc({ test: 'payload' }); + + expect(response).toEqual({ hello: 'world' }); + }); + + it('checkKyc', async () => { + const response = await checkKyc({ test: 'payload' }); + + expect(response).toEqual({ hello: 'world' }); + }); }); describe('Helper functions errors', () => { @@ -240,4 +254,16 @@ describe('Helper functions errors', () => { expect(response).toEqual(new Error('test')); }); + + it('setKyc', async () => { + const response = await setKyc({ test: 'payload' }); + + expect(response).toEqual(new Error('test')); + }); + + it('checkKyc', async () => { + const response = await checkKyc({ test: 'payload' }); + + expect(response).toEqual(new Error('test')); + }); }); diff --git a/lib/validate.test.js b/lib/validate.test.js new file mode 100644 index 00000000..cbd3e16f --- /dev/null +++ b/lib/validate.test.js @@ -0,0 +1,165 @@ +import { registerValidate, emailValidate, loginValidate } from "./validate"; + + +describe("loginValidate", () => { + it("should return errors for missing email", async () => { + const values = { + password: "password123", + }; + const errors = await loginValidate(values); + expect(errors.email).toEqual("Adresse email ou numéro de téléphone est requis "); + }); + + it("should return errors for missing password", async () => { + const values = { + email: "joe@example.com" + }; + const errors = await loginValidate(values); + expect(errors.password).toEqual("Mot de passe est requis"); + }); + + it("should return errors for password with spaces", async () => { + const values = { + email: "joe@example.com", + password: "password with spaces", + }; + const errors = await loginValidate(values); + expect(errors.password).toEqual("Mot de passe invalide"); + }); +}); + + +describe("registerValidate", () => { + it("should return errors for missing email", async () => { + const values = { + password: "password123", + cpassword: "password123", + username: "john", + }; + + const errors = await registerValidate(values); + + expect(errors.email).toEqual("Adresse email est requis"); + }); + + it("should return errors for invalid email", async () => { + const values = { + email: "invalidemail", + password: "password123", + cpassword: "password123", + username: "john", + }; + + const errors = await registerValidate(values); + + expect(errors.email).toEqual("Adresse email invalide"); + }); + + it("should return errors for missing password", async () => { + const values = { + email: "john@example.com", + cpassword: "password123", + username: "john", + }; + + const errors = await registerValidate(values); + + expect(errors.password).toEqual("Mot de passe est requis"); + }); + + it("should return errors for short password", async () => { + const values = { + email: "john@example.com", + password: "pass", + cpassword: "password123", + username: "john", + }; + + const errors = await registerValidate(values); + + expect(errors.password).toEqual("Mot de passe trop court"); + }); + + it("should return errors for password with spaces", async () => { + const values = { + email: "john@example.com", + password: "password with spaces", + cpassword: "password123", + username: "john", + }; + + const errors = await registerValidate(values); + + expect(errors.password).toEqual("Mot de passe invalide"); + }); + + it("should return errors for mismatched passwords", async () => { + const values = { + email: "john@example.com", + password: "password123", + cpassword: "differentpassword", + username: "john", + }; + + const errors = await registerValidate(values); + + expect(errors.cpassword).toEqual("Mot de passe de confirmation différent"); + }); + + it("should return errors for missing username", async () => { + const values = { + email: "john@example.com", + password: "password123", + cpassword: "password123", + }; + + const errors = await registerValidate(values); + + expect(errors.username).toEqual("Nom d'utilisateur est requis"); + }); + + it("should return errors for short username", async () => { + const values = { + email: "john@example.com", + password: "password123", + cpassword: "password123", + username: "jo", + }; + + const errors = await registerValidate(values); + + expect(errors.username).toEqual( + "Le nom d'utilisateur doit avoir au délà de 3 caractères" + ); + }); +}); + +describe("emailValidate", () => { + it("should return errors for missing email", async () => { + const values = {}; + + const errors = await emailValidate(values); + + expect(errors.email).toEqual("Adresse email est requis"); + }); + + it("should return errors for invalid email", async () => { + const values = { + email: "invalidemail", + }; + + const errors = await emailValidate(values); + + expect(errors.email).toEqual("Adresse email invalide"); + }); + + it("should not return errors for valid email", async () => { + const values = { + email: "john@example.com", + }; + + const errors = await emailValidate(values); + + expect(errors.email).toBeUndefined(); + }); +}); \ No newline at end of file