diff --git a/react-advanced-tag1/src/components/Footer.test.tsx b/react-advanced-tag1/src/common/components/Footer.test.tsx similarity index 100% rename from react-advanced-tag1/src/components/Footer.test.tsx rename to react-advanced-tag1/src/common/components/Footer.test.tsx diff --git a/react-advanced-tag1/src/components/Footer.tsx b/react-advanced-tag1/src/common/components/Footer.tsx similarity index 100% rename from react-advanced-tag1/src/components/Footer.tsx rename to react-advanced-tag1/src/common/components/Footer.tsx diff --git a/react-advanced-tag1/src/components/Header/Navigation.tsx b/react-advanced-tag1/src/common/components/Header/Navigation.tsx similarity index 100% rename from react-advanced-tag1/src/components/Header/Navigation.tsx rename to react-advanced-tag1/src/common/components/Header/Navigation.tsx diff --git a/react-advanced-tag1/src/components/Header/index.tsx b/react-advanced-tag1/src/common/components/Header/index.tsx similarity index 100% rename from react-advanced-tag1/src/components/Header/index.tsx rename to react-advanced-tag1/src/common/components/Header/index.tsx diff --git a/react-advanced-tag1/src/components/exercises/EffectExercises/index.tsx b/react-advanced-tag1/src/common/components/exercises/EffectExercises/index.tsx similarity index 100% rename from react-advanced-tag1/src/components/exercises/EffectExercises/index.tsx rename to react-advanced-tag1/src/common/components/exercises/EffectExercises/index.tsx diff --git a/react-advanced-tag1/src/components/exercises/MemoCallback/Search.tsx b/react-advanced-tag1/src/common/components/exercises/MemoCallback/Search.tsx similarity index 100% rename from react-advanced-tag1/src/components/exercises/MemoCallback/Search.tsx rename to react-advanced-tag1/src/common/components/exercises/MemoCallback/Search.tsx diff --git a/react-advanced-tag1/src/common/components/exercises/MemoCallback/index.test.tsx b/react-advanced-tag1/src/common/components/exercises/MemoCallback/index.test.tsx new file mode 100644 index 0000000..ab5c674 --- /dev/null +++ b/react-advanced-tag1/src/common/components/exercises/MemoCallback/index.test.tsx @@ -0,0 +1,42 @@ +import { render, screen, fireEvent } from "@testing-library/react"; +import MemoCallback from "./index"; +import { describe, it, expect } from "vitest"; +import { users } from "../../../utils/shuffle"; + + + +describe("MemoCallback Component", () => { + it("should render the component with initial users", () => { + render(); + users.forEach((user) => { + expect(screen.getByText(user)).toBeDefined(); + }); + }); + + it("should filter users based on search input", () => { + render(); + const searchInput = screen.getByPlaceholderText(/search/i); + + fireEvent.change(searchInput, { target: { value: "a" } }); + const filteredUsers = users.filter((user) => user.toLowerCase().includes("a")); + filteredUsers.forEach((user) => { + expect(screen.getByText(user)).toBeDefined(); + }); + + const nonMatchingUsers = users.filter((user) => !user.toLowerCase().includes("a")); + nonMatchingUsers.forEach((user) => { + expect(screen.queryByText(user)).not.toBeDefined(); + }); + }); + + it("should shuffle users when the shuffle button is clicked", () => { + render(); + const shuffleButton = screen.getByText(/shuffle/i); + + const initialOrder = screen.getAllByText(/./).map((el) => el.textContent); + fireEvent.click(shuffleButton); + const shuffledOrder = screen.getAllByText(/./).map((el) => el.textContent); + + expect(initialOrder).not.toEqual(shuffledOrder); + }); +}); \ No newline at end of file diff --git a/react-advanced-tag1/src/components/exercises/MemoCallback/index.tsx b/react-advanced-tag1/src/common/components/exercises/MemoCallback/index.tsx similarity index 93% rename from react-advanced-tag1/src/components/exercises/MemoCallback/index.tsx rename to react-advanced-tag1/src/common/components/exercises/MemoCallback/index.tsx index c30cac5..0882f8e 100644 --- a/react-advanced-tag1/src/components/exercises/MemoCallback/index.tsx +++ b/react-advanced-tag1/src/common/components/exercises/MemoCallback/index.tsx @@ -1,6 +1,6 @@ import { useCallback, useState } from "react"; -import { shuffleArray, users } from "../../../utils/shuffle"; import Search from "./Search"; +import { users, shuffleArray } from "../../../utils/shuffle"; export default function MemoCallback() { console.log("MemoCallback rendered"); diff --git a/react-advanced-tag1/src/components/exercises/RefExercise/index.tsx b/react-advanced-tag1/src/common/components/exercises/RefExercise/index.tsx similarity index 100% rename from react-advanced-tag1/src/components/exercises/RefExercise/index.tsx rename to react-advanced-tag1/src/common/components/exercises/RefExercise/index.tsx diff --git a/react-advanced-tag1/src/components/exercises/UserEffect.tsx b/react-advanced-tag1/src/common/components/exercises/UserEffect.tsx similarity index 100% rename from react-advanced-tag1/src/components/exercises/UserEffect.tsx rename to react-advanced-tag1/src/common/components/exercises/UserEffect.tsx diff --git a/react-advanced-tag1/src/components/exercises/UserOverview.tsx b/react-advanced-tag1/src/common/components/exercises/UserOverview.tsx similarity index 100% rename from react-advanced-tag1/src/components/exercises/UserOverview.tsx rename to react-advanced-tag1/src/common/components/exercises/UserOverview.tsx diff --git a/react-advanced-tag1/src/components/globals/Heading.tsx b/react-advanced-tag1/src/common/components/globals/Heading.tsx similarity index 100% rename from react-advanced-tag1/src/components/globals/Heading.tsx rename to react-advanced-tag1/src/common/components/globals/Heading.tsx diff --git a/react-advanced-tag1/src/hooks/useFetch.ts b/react-advanced-tag1/src/common/hooks/useFetch.ts similarity index 100% rename from react-advanced-tag1/src/hooks/useFetch.ts rename to react-advanced-tag1/src/common/hooks/useFetch.ts diff --git a/react-advanced-tag1/src/hooks/useLocalStorage.ts b/react-advanced-tag1/src/common/hooks/useLocalStorage.ts similarity index 100% rename from react-advanced-tag1/src/hooks/useLocalStorage.ts rename to react-advanced-tag1/src/common/hooks/useLocalStorage.ts diff --git a/react-advanced-tag1/src/hooks/useMediaQuery.ts b/react-advanced-tag1/src/common/hooks/useMediaQuery.ts similarity index 100% rename from react-advanced-tag1/src/hooks/useMediaQuery.ts rename to react-advanced-tag1/src/common/hooks/useMediaQuery.ts diff --git a/react-advanced-tag1/src/utils/shuffle.test.ts b/react-advanced-tag1/src/common/utils/shuffle.test.ts similarity index 100% rename from react-advanced-tag1/src/utils/shuffle.test.ts rename to react-advanced-tag1/src/common/utils/shuffle.test.ts diff --git a/react-advanced-tag1/src/utils/shuffle.ts b/react-advanced-tag1/src/common/utils/shuffle.ts similarity index 100% rename from react-advanced-tag1/src/utils/shuffle.ts rename to react-advanced-tag1/src/common/utils/shuffle.ts diff --git a/react-advanced-tag1/src/layouts/MainLayout.tsx b/react-advanced-tag1/src/layouts/MainLayout.tsx index 40a8b58..43b6dd4 100644 --- a/react-advanced-tag1/src/layouts/MainLayout.tsx +++ b/react-advanced-tag1/src/layouts/MainLayout.tsx @@ -1,7 +1,7 @@ import { useState } from "react"; -import Footer from "../components/Footer"; -import Header from "../components/Header"; import './MainLayout.css' +import Footer from "../common/components/Footer"; +import Header from "../common/components/Header"; export default function MainLayout({children}: {children: React.ReactNode | React.ReactElement | React.ReactElement[]}): React.ReactElement { diff --git a/react-advanced-tag1/src/routes/EffectExercisesPage.tsx b/react-advanced-tag1/src/routes/EffectExercisesPage.tsx index 15e7e26..998437d 100644 --- a/react-advanced-tag1/src/routes/EffectExercisesPage.tsx +++ b/react-advanced-tag1/src/routes/EffectExercisesPage.tsx @@ -1,5 +1,6 @@ -import EffectExercises from "../components/exercises/EffectExercises"; -import Heading from "../components/globals/Heading" +import EffectExercises from "../common/components/exercises/EffectExercises"; +import Heading from "../common/components/globals/Heading"; + export default function EffectExercisesPage() { return ( diff --git a/react-advanced-tag1/src/routes/FormsPage.tsx b/react-advanced-tag1/src/routes/FormsPage.tsx index d8496a0..5aec0ba 100644 --- a/react-advanced-tag1/src/routes/FormsPage.tsx +++ b/react-advanced-tag1/src/routes/FormsPage.tsx @@ -1,5 +1,5 @@ -import RefExercise from "../components/exercises/RefExercise"; -import Heading from "../components/globals/Heading"; +import RefExercise from "../common/components/exercises/RefExercise"; +import Heading from "../common/components/globals/Heading"; export default function FormsPage() { return ( diff --git a/react-advanced-tag1/src/routes/HomePage.tsx b/react-advanced-tag1/src/routes/HomePage.tsx index f362937..e052766 100644 --- a/react-advanced-tag1/src/routes/HomePage.tsx +++ b/react-advanced-tag1/src/routes/HomePage.tsx @@ -1,4 +1,4 @@ -import Heading from "../components/globals/Heading" +import Heading from "../common/components/globals/Heading"; export default function HomePage() { return ( diff --git a/react-advanced-tag1/src/routes/MemoCallbackPage.tsx b/react-advanced-tag1/src/routes/MemoCallbackPage.tsx index 7caec90..20d5b9b 100644 --- a/react-advanced-tag1/src/routes/MemoCallbackPage.tsx +++ b/react-advanced-tag1/src/routes/MemoCallbackPage.tsx @@ -1,5 +1,5 @@ -import MemoCallback from "../components/exercises/MemoCallback"; -import Heading from "../components/globals/Heading"; +import MemoCallback from "../common/components/exercises/MemoCallback"; +import Heading from "../common/components/globals/Heading"; export default function MemoCallbackPage() { return ( diff --git a/react-advanced-tag1/src/routes/UsersPage.tsx b/react-advanced-tag1/src/routes/UsersPage.tsx index 0ed3c86..74b332c 100644 --- a/react-advanced-tag1/src/routes/UsersPage.tsx +++ b/react-advanced-tag1/src/routes/UsersPage.tsx @@ -1,6 +1,6 @@ -import UserEffect from "../components/exercises/UserEffect"; -import { UserOverview } from "../components/exercises/UserOverview"; -import Heading from "../components/globals/Heading"; +import UserEffect from "../common/components/exercises/UserEffect"; +import { UserOverview } from "../common/components/exercises/UserOverview"; +import Heading from "../common/components/globals/Heading"; export default function UsersPage() { return (