Skip to content

Commit 797d402

Browse files
committed
Fix tests
1 parent 197bea6 commit 797d402

File tree

8 files changed

+47
-64
lines changed

8 files changed

+47
-64
lines changed

tesfa/src/app/admin/performance/page.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@ export default function PerformancePage() {
4848
const queryData = aggregateQueriesByMonth(filteredLogs);
4949
return (
5050
<div className="flex h-screen bg-gray-50 overflow-hidden">
51-
{/* Sidebar stays fixed */}
51+
5252
<Sidebar />
53-
{/* Main scrollable content */}
53+
5454
<div className="flex-1 flex flex-col overflow-hidden">
5555

5656
<div className="flex-1 overflow-y-auto px-4 sm:px-6 lg:px-8 py-6">

tesfa/src/app/edit-profile/page.test.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ describe('EditProfilePage', () => {
7777
refetch: jest.fn(),
7878
});
7979
render(<EditProfilePage />);
80-
expect(screen.getByText(/Loading.../i)).toBeInTheDocument();
80+
expect(screen.getByTestId('loader')).toBeInTheDocument();
8181
});
8282

8383
it('renders error message', () => {
@@ -89,9 +89,8 @@ describe('EditProfilePage', () => {
8989
refetch: jest.fn(),
9090
});
9191
render(<EditProfilePage />);
92-
expect(screen.getByText(error)).toBeInTheDocument();
92+
expect(screen.getByText(error)).toBeInTheDocument();
9393
});
94-
9594
it('submits form and navigates on success', async () => {
9695
jest.useFakeTimers();
9796
render(<EditProfilePage />);

tesfa/src/app/kanban/components/Board/index.test.tsx

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -59,19 +59,19 @@ describe('KanbanBoard', () => {
5959
jest.clearAllMocks();
6060
});
6161

62-
it('renders loading state', () => {
63-
(fetchTaskModule.useFetchTaskAssignments as jest.Mock).mockReturnValue({
64-
assignedTasks: [],
65-
setAssignedTasks: jest.fn(),
66-
loading: true,
67-
error: null,
68-
updateTaskStatus: jest.fn(),
69-
});
70-
71-
render(<KanbanBoard />);
72-
expect(screen.getByText(/Loading board.../i)).toBeInTheDocument();
62+
it('renders loading state', () => {
63+
(fetchTaskModule.useFetchTaskAssignments as jest.Mock).mockReturnValue({
64+
assignedTasks: [],
65+
setAssignedTasks: jest.fn(),
66+
loading: true,
67+
error: null,
68+
updateTaskStatus: jest.fn(),
7369
});
7470

71+
render(<KanbanBoard />);
72+
expect(screen.getByTestId('loader')).toBeInTheDocument();
73+
});
74+
7575
it('renders error state', () => {
7676
(fetchTaskModule.useFetchTaskAssignments as jest.Mock).mockReturnValue({
7777
assignedTasks: [],

tesfa/src/app/profile/components/TaskSummary/index.test.tsx

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,15 @@
1-
// src/app/profile/components/TaskSummary/index.test.tsx
1+
22
import { render, screen, fireEvent } from '@testing-library/react';
33
import '@testing-library/jest-dom';
4-
import TaskSummary from './index'; // or './TaskSummary' depending on your file
4+
import TaskSummary from './index';
55

6-
// Mock the hook
76
const mockUseFetchTaskAssignments = jest.fn();
87

98
jest.mock('@/app/hooks/useFetchTaskAssignment', () => ({
109
__esModule: true,
1110
useFetchTaskAssignments: () => mockUseFetchTaskAssignments(),
1211
}));
1312

14-
// Optional: mock icons for cleaner output
1513
jest.mock('lucide-react', () => {
1614
const original = jest.requireActual('lucide-react');
1715
return {
@@ -59,16 +57,14 @@ describe('TaskSummary', () => {
5957

6058
render(<TaskSummary />);
6159

62-
// Page 1
60+
6361
expect(screen.getByText('Setup database')).toBeInTheDocument();
6462
expect(screen.queryByText('Review PR')).not.toBeInTheDocument();
6563

66-
// Go to page 2
6764
fireEvent.click(screen.getByText('Next'));
6865
expect(screen.getByText('Review PR')).toBeInTheDocument();
6966
expect(screen.queryByText('Setup database')).not.toBeInTheDocument();
7067

71-
// Go back to page 1
7268
fireEvent.click(screen.getByText('Previous'));
7369
expect(screen.getByText('Setup database')).toBeInTheDocument();
7470
});
@@ -88,7 +84,7 @@ describe('TaskSummary', () => {
8884
expect(prevBtn).toBeDisabled();
8985
expect(nextBtn).not.toBeDisabled();
9086

91-
fireEvent.click(nextBtn); // go to page 2
87+
fireEvent.click(nextBtn);
9288

9389
expect(prevBtn).not.toBeDisabled();
9490
expect(nextBtn).toBeDisabled();
@@ -106,10 +102,9 @@ describe('TaskSummary', () => {
106102
expect(screen.getByText('0/0 Tasks Completed')).toBeInTheDocument();
107103
expect(screen.getByText('0%')).toBeInTheDocument();
108104

109-
// The "Recently Completed" heading is still shown (by design)
105+
110106
expect(screen.getByText('Recently Completed')).toBeInTheDocument();
111107

112-
// But no task items should appear
113108
expect(screen.queryByTestId('check-icon')).not.toBeInTheDocument();
114109
});
115110
});

tesfa/src/app/profile/page.test.tsx

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -62,19 +62,7 @@ describe('ProfilePage', () => {
6262
expect(screen.getByText('Network error')).toHaveClass('text-red-500');
6363
});
6464

65-
it('renders nothing when profile is null and no error', () => {
66-
mockUseFetchOrganization.mockReturnValue({
67-
user: null,
68-
loading: false,
69-
error: null,
70-
});
71-
mockUseFetchTaskAssignments.mockReturnValue({
72-
assignedTasks: [],
73-
});
74-
75-
const { container } = render(<ProfilePage />);
76-
expect(container.firstChild).toBeNull();
77-
});
65+
7866

7967
it('renders full profile when data is available', () => {
8068
const mockProfile = {

tesfa/src/app/profile/page.tsx

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ export default function ProfilePage() {
2424
const completedTasks = assignedTasks.filter((task) => task.status === "completed");
2525
const totalTasks = assignedTasks.length;
2626

27-
// Always render Layout
2827
return (
2928
<Layout>
3029
<div className="flex flex-col w-full items-center bg-[#FCF6F7] h-screen overflow-y-auto">
@@ -38,19 +37,19 @@ export default function ProfilePage() {
3837
<div className="flex flex-col lg:flex-row items-start w-full max-w-7xl gap-10 px-4 sm:px-6 md:px-8 lg:px-10 pb-20">
3938
<div className="w-full lg:w-1/2 bg-[#00363E] rounded-3xl shadow-lg">
4039
<div className="relative flex flex-col items-center p-22 ">
41-
{/* Loading/Error states */}
40+
4241
{error && (
4342
<div className="text-red-500 text-center p-4 w-full">
4443
{error}
4544
</div>
4645
)}
47-
{/* Show loading spinner or skeleton while loading */}
46+
4847
{loading && (
4948
<div className="flex items-center justify-center w-full h-[180px]">
5049
<span className="animate-spin rounded-full h-12 w-12 border-b-2 border-[#C3A041]"></span>
5150
</div>
5251
)}
53-
{/* Render content only if profile is loaded and not loading */}
52+
5453
{!loading && profile && (
5554
<>
5655
<div className="w-[150px] sm:w-[180px] h-[150px] sm:h-[180px] absolute rounded-full border-4 border-[#C3A041] flex items-center justify-center overflow-hidden bg-white">
@@ -80,7 +79,7 @@ export default function ProfilePage() {
8079
</div>
8180

8281
<div className="w-full bg-[#F3FBFD] rounded-3xl p-6 sm:p-10 flex flex-col gap-6 shadow-inner">
83-
{/* Show skeleton or actual data */}
82+
8483
{loading && (
8584
<div className="text-center text-gray-400">Loading profile...</div>
8685
)}
@@ -97,7 +96,7 @@ export default function ProfilePage() {
9796
</p>
9897
</div>
9998
</div>
100-
{/* ...other fields... */}
99+
101100
<div className="flex flex-col sm:flex-row items-start sm:items-center gap-3 w-full">
102101
<Mail className="w-7 h-7 text-[#C3A041]" />
103102
<div className="flex flex-col sm:flex-row sm:items-center sm:gap-36">

tesfa/src/app/sharedComponents/Loader/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const Loader = () => {
22
return (
3-
<div className="flex justify-center items-center h-full">
3+
<div className="flex justify-center items-center h-full" data-testid="loader">
44
<div className="dashed-spinner"></div>
55
<svg className="svg-logo" width="121" height="94" viewBox="0 0 141 114" fill="none" xmlns="http://www.w3.org/2000/svg">
66
<circle cx="83.0713" cy="60.1314" r="3.23202" transform="rotate(-0.756824 83.0713 60.1314)" fill="#00353D"/>

tesfa/src/app/tasks/components/TaskDetails/index.test.tsx

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -84,25 +84,27 @@ describe("TasksDetails component", () => {
8484
expect(pushMock).toHaveBeenCalledWith(expect.stringContaining("/kanban?newTasks="));
8585
});
8686
});
87+
it("displays loading state", () => {
88+
(useFetchTasksHook.useFetchTasks as jest.Mock).mockReturnValue({
89+
tasks: [],
90+
setTasks: jest.fn(),
91+
loading: true,
92+
error: null,
93+
});
8794

88-
it("displays loading and error states", () => {
89-
(useFetchTasksHook.useFetchTasks as jest.Mock).mockReturnValue({
90-
tasks: [],
91-
setTasks: jest.fn(),
92-
loading: true,
93-
error: null,
94-
});
95-
const { rerender } = render(<TasksDetails />);
96-
expect(screen.getByText(/loading tasks/i)).toBeInTheDocument();
97-
98-
(useFetchTasksHook.useFetchTasks as jest.Mock).mockReturnValue({
99-
tasks: [],
100-
setTasks: jest.fn(),
101-
loading: false,
102-
error: new Error("fail"),
103-
});
95+
render(<TasksDetails />);
96+
expect(screen.getByTestId("loader")).toBeInTheDocument();
97+
});
10498

105-
rerender(<TasksDetails />);
106-
expect(screen.getByText(/something went wrong/i)).toBeInTheDocument();
99+
it("displays error state", () => {
100+
(useFetchTasksHook.useFetchTasks as jest.Mock).mockReturnValue({
101+
tasks: [],
102+
setTasks: jest.fn(),
103+
loading: false,
104+
error: "Failed to load",
107105
});
106+
107+
render(<TasksDetails />);
108+
expect(screen.getByText(/Something went Wrong/i)).toBeInTheDocument();
109+
});
108110
});

0 commit comments

Comments
 (0)