From ed38759f3070ea49885e5309b81cc9df8b4d17ed Mon Sep 17 00:00:00 2001 From: SeonjaeLee Date: Fri, 24 Jan 2025 22:14:28 +0900 Subject: [PATCH] test: pagination --- src/hooks/useMembers.test.ts | 81 ++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/src/hooks/useMembers.test.ts b/src/hooks/useMembers.test.ts index d9b2381..e71e5e3 100644 --- a/src/hooks/useMembers.test.ts +++ b/src/hooks/useMembers.test.ts @@ -189,3 +189,84 @@ test("filter members by name case-insensitively", async () => { expect(result.current.members).toEqual([johnDoe]); }); + +test("total cohorts calculated correctly", async () => { + const expectedMembers: Member[] = [ + createMockMember({ cohorts: [1] }), + createMockMember({ cohorts: [2] }), + createMockMember({ cohorts: [2] }), + createMockMember({ cohorts: [3] }), + createMockMember({ cohorts: [3] }), + ]; + + const getMembers = vi.fn().mockResolvedValue(expectedMembers); + + const { result } = renderHook(() => useMembers({ getMembers })); + + await waitFor(() => expect(result.current.isLoading).toBe(false)); + + expect(result.current.totalCohorts).toBe(3); +}); + +test("pagination members by initialize", async () => { + const expectedMembers: Member[] = []; + + const getMembers = vi.fn().mockResolvedValue(expectedMembers); + + const { result } = renderHook(() => + useMembers({ getMembers, isPagination: true }), + ); + + // Wait for members to load + await waitFor(() => expect(result.current.isLoading).toBe(false)); + + // Initial state + expect(result.current.members).toEqual(expectedMembers); + + expect(result.current.pagination.current).toEqual(0); + expect(result.current.pagination.total).toEqual(0); +}); + +test("pagination members by current, total and members.lenght", async () => { + const expectedMembers: Member[] = [ + createMockMember({ cohorts: [1] }), + createMockMember({ cohorts: [2] }), + createMockMember({ cohorts: [3] }), + createMockMember({ cohorts: [4] }), + createMockMember({ cohorts: [5] }), + createMockMember({ cohorts: [6] }), + createMockMember({ cohorts: [7] }), + createMockMember({ cohorts: [8] }), + createMockMember({ cohorts: [9] }), + createMockMember({ cohorts: [10] }), + createMockMember({ cohorts: [11] }), + createMockMember({ cohorts: [12] }), + createMockMember({ cohorts: [13] }), + ]; + + const getMembers = vi.fn().mockResolvedValue(expectedMembers); + + const { result } = renderHook(() => + useMembers({ getMembers, isPagination: true }), + ); + + // Wait for members to load + await waitFor(() => expect(result.current.isLoading).toBe(false)); + + // Initial state 1 / 2 + expect(result.current.pagination.current).toEqual(1); + expect(result.current.pagination.total).toEqual(2); + expect(result.current.members.length).toEqual(10); + + // Act: Apply Next page 2 / 2 + act(() => { + result.current.setPagination(({ current, total }) => ({ + current: current + 1, + total, + })); + }); + + expect(result.current.pagination.current).toEqual(2); + expect(result.current.pagination.total).toEqual(2); + expect(result.current.members.length).toEqual(3); +});