This commit is contained in:
@@ -8,8 +8,8 @@ import * as apiClient from '../services/apiClient';
|
||||
import { useModal } from '../hooks/useModal';
|
||||
import { renderWithProviders } from '../tests/utils/renderWithProviders';
|
||||
|
||||
// Mock dependencies
|
||||
// The apiClient is mocked globally in `src/tests/setup/globalApiMock.ts`.
|
||||
// Must explicitly call vi.mock() for apiClient
|
||||
vi.mock('../services/apiClient');
|
||||
vi.mock('../hooks/useAppInitialization');
|
||||
vi.mock('../hooks/useModal');
|
||||
vi.mock('./WhatsNewModal', () => ({
|
||||
|
||||
@@ -27,10 +27,4 @@ describe('Footer', () => {
|
||||
// Assert: Check that the rendered text includes the mocked year
|
||||
expect(screen.getByText('Copyright 2025-2025')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('should display the correct year when it changes', () => {
|
||||
vi.setSystemTime(new Date('2030-01-01T00:00:00Z'));
|
||||
renderWithProviders(<Footer />);
|
||||
expect(screen.getByText('Copyright 2025-2030')).toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -8,8 +8,9 @@ import { LeaderboardUser } from '../types';
|
||||
import { createMockLeaderboardUser } from '../tests/utils/mockFactories';
|
||||
import { renderWithProviders } from '../tests/utils/renderWithProviders';
|
||||
|
||||
// The apiClient and logger are mocked globally.
|
||||
// We can get a typed reference to the apiClient for individual test overrides.
|
||||
// Must explicitly call vi.mock() for apiClient
|
||||
vi.mock('../services/apiClient');
|
||||
|
||||
const mockedApiClient = vi.mocked(apiClient);
|
||||
|
||||
// Mock lucide-react icons to prevent rendering errors in the test environment
|
||||
|
||||
@@ -1,36 +1,15 @@
|
||||
// src/components/Leaderboard.tsx
|
||||
import React, { useState, useEffect } from 'react';
|
||||
import * as apiClient from '../services/apiClient';
|
||||
import { LeaderboardUser } from '../types';
|
||||
import { logger } from '../services/logger.client';
|
||||
import React from 'react';
|
||||
import { useLeaderboardQuery } from '../hooks/queries/useLeaderboardQuery';
|
||||
import { Award, Crown, ShieldAlert } from 'lucide-react';
|
||||
|
||||
/**
|
||||
* Leaderboard component displaying top users by points.
|
||||
*
|
||||
* Refactored to use TanStack Query (ADR-0005 Phase 8).
|
||||
*/
|
||||
export const Leaderboard: React.FC = () => {
|
||||
const [leaderboard, setLeaderboard] = useState<LeaderboardUser[]>([]);
|
||||
const [isLoading, setIsLoading] = useState(true);
|
||||
const [error, setError] = useState<string | null>(null);
|
||||
|
||||
useEffect(() => {
|
||||
const loadLeaderboard = async () => {
|
||||
setIsLoading(true);
|
||||
try {
|
||||
const response = await apiClient.fetchLeaderboard(10); // Fetch top 10 users
|
||||
if (!response.ok) {
|
||||
throw new Error('Failed to fetch leaderboard data.');
|
||||
}
|
||||
const data: LeaderboardUser[] = await response.json();
|
||||
setLeaderboard(data);
|
||||
} catch (err) {
|
||||
const errorMessage = err instanceof Error ? err.message : 'An unknown error occurred.';
|
||||
logger.error('Error fetching leaderboard:', { error: err });
|
||||
setError(errorMessage);
|
||||
} finally {
|
||||
setIsLoading(false);
|
||||
}
|
||||
};
|
||||
|
||||
loadLeaderboard();
|
||||
}, []);
|
||||
const { data: leaderboard = [], isLoading, error } = useLeaderboardQuery(10);
|
||||
|
||||
const getRankIcon = (rank: string) => {
|
||||
switch (rank) {
|
||||
@@ -57,7 +36,7 @@ export const Leaderboard: React.FC = () => {
|
||||
>
|
||||
<div className="flex items-center">
|
||||
<ShieldAlert className="h-6 w-6 mr-3" />
|
||||
<p className="font-bold">Error: {error}</p>
|
||||
<p className="font-bold">Error: {error.message}</p>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -8,8 +8,9 @@ import { logger } from '../services/logger.client';
|
||||
import { renderWithProviders } from '../tests/utils/renderWithProviders';
|
||||
import '@testing-library/jest-dom';
|
||||
|
||||
// The apiClient is mocked globally in `src/tests/setup/globalApiMock.ts`.
|
||||
// We can get a typed reference to it for individual test overrides.
|
||||
// Must explicitly call vi.mock() for apiClient
|
||||
vi.mock('../services/apiClient');
|
||||
|
||||
const mockedApiClient = vi.mocked(apiClient);
|
||||
|
||||
describe('RecipeSuggester Component', () => {
|
||||
|
||||
Reference in New Issue
Block a user