import { QueryClientProvider } from "@tanstack/react-query";
import { render, screen } from '@testing-library/react';
import { TrophiesCard } from "@/components/Dashboard/TrophiesCard";
import { useUserTrophiesQuery } from "@/components/Trophies";
import { testQueryClient } from "@/tests/queryClient";
import { testUserTrophies } from "@/tests/trophies/trophiesTestData";
import type { Mock } from 'vitest';
vi.mock("@/components/Trophies/queries/trophies");
describe("test the TrophiesCard component", () => {
describe("Trophies available", () => {
beforeEach(() => {
(useUserTrophiesQuery as Mock).mockImplementation(() => ({
isSuccess: true,
isLoading: false,
data: testUserTrophies()
}));
});
test('renders the trophies correctly', async () => {
// Act
render(
);
// Assert
expect(useUserTrophiesQuery).toHaveBeenCalled();
expect(screen.getByText('Beginner')).toBeInTheDocument();
expect(screen.getByText('Unstoppable')).toBeInTheDocument();
});
});
describe("No trophies available", () => {
beforeEach(() => {
(useUserTrophiesQuery as Mock).mockImplementation(() => ({
isSuccess: true,
isLoading: false,
data: []
}));
});
test('correctly shows custom empty card, without call to action button', async () => {
// Act
render(
);
// Assert
expect(useUserTrophiesQuery).toHaveBeenCalled();
expect(screen.getByText('nothingHereYet')).toBeInTheDocument();
expect(screen.queryByText('nothingHereYetAction')).not.toBeInTheDocument();
expect(screen.queryByText('add')).not.toBeInTheDocument();
});
});
});