feat: Add Jest configuration and tests for project and user handlers
This commit is contained in:
120
tasker-server/tests/getUserTasks.test.ts
Normal file
120
tasker-server/tests/getUserTasks.test.ts
Normal file
@@ -0,0 +1,120 @@
|
||||
const mockQueryTasks = jest.fn();
|
||||
|
||||
import { handler } from "../src/handlers/getUserTasks";
|
||||
import { queryTasks } from "@/lib/util";
|
||||
|
||||
jest.mock("@/lib/util", () => ({
|
||||
queryTasks: mockQueryTasks,
|
||||
}));
|
||||
|
||||
describe("getUserTasks handler", () => {
|
||||
afterAll(() => {
|
||||
jest.restoreAllMocks();
|
||||
});
|
||||
|
||||
it("should retrieve tasks authored and assigned to the user and return a 200 response", async () => {
|
||||
const mockAuthorTasks = [
|
||||
{ taskId: "task_1", title: "Authored Task 1" },
|
||||
{ taskId: "task_2", title: "Authored Task 2" },
|
||||
];
|
||||
const mockAssigneeTasks = [
|
||||
{ taskId: "task_2", title: "Authored Task 2" }, // Duplicate task
|
||||
{ taskId: "task_3", title: "Assigned Task 3" },
|
||||
];
|
||||
|
||||
const mockUniqueTasks = [
|
||||
{ taskId: "task_1", title: "Authored Task 1" },
|
||||
{ taskId: "task_2", title: "Authored Task 2" },
|
||||
{ taskId: "task_3", title: "Assigned Task 3" },
|
||||
];
|
||||
|
||||
mockQueryTasks
|
||||
.mockResolvedValueOnce(mockAuthorTasks)
|
||||
.mockResolvedValueOnce(mockAssigneeTasks);
|
||||
|
||||
const event = {
|
||||
pathParameters: { userId: "user_123" },
|
||||
};
|
||||
|
||||
const response = await handler(event);
|
||||
|
||||
expect(queryTasks).toHaveBeenCalledWith(
|
||||
"user_123",
|
||||
"GSI-author-user-id",
|
||||
"authorUserId"
|
||||
);
|
||||
expect(queryTasks).toHaveBeenCalledWith(
|
||||
"user_123",
|
||||
"GSI-assigned-user-id",
|
||||
"assignedUserId"
|
||||
);
|
||||
|
||||
expect(response).toEqual({
|
||||
statusCode: 200,
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
"Access-Control-Allow-Origin": "*",
|
||||
},
|
||||
body: JSON.stringify(mockUniqueTasks),
|
||||
});
|
||||
});
|
||||
|
||||
it("should return a 500 response if queryTasks fails", async () => {
|
||||
const mockError = new Error("Query failed");
|
||||
|
||||
mockQueryTasks.mockRejectedValueOnce(mockError);
|
||||
|
||||
const event = {
|
||||
pathParameters: { userId: "user_123" },
|
||||
};
|
||||
|
||||
const response = await handler(event);
|
||||
|
||||
expect(queryTasks).toHaveBeenCalledWith(
|
||||
"user_123",
|
||||
"GSI-author-user-id",
|
||||
"authorUserId"
|
||||
);
|
||||
|
||||
expect(response).toEqual({
|
||||
statusCode: 500,
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
"Access-Control-Allow-Origin": "*",
|
||||
},
|
||||
body: JSON.stringify({
|
||||
message: `Error retrieving tasks for user: ${mockError.message}`,
|
||||
}),
|
||||
});
|
||||
});
|
||||
|
||||
it("should handle empty author and assignee tasks gracefully", async () => {
|
||||
mockQueryTasks.mockResolvedValueOnce([]).mockResolvedValueOnce([]);
|
||||
|
||||
const event = {
|
||||
pathParameters: { userId: "user_123" },
|
||||
};
|
||||
|
||||
const response = await handler(event);
|
||||
|
||||
expect(queryTasks).toHaveBeenCalledWith(
|
||||
"user_123",
|
||||
"GSI-author-user-id",
|
||||
"authorUserId"
|
||||
);
|
||||
expect(queryTasks).toHaveBeenCalledWith(
|
||||
"user_123",
|
||||
"GSI-assigned-user-id",
|
||||
"assignedUserId"
|
||||
);
|
||||
|
||||
expect(response).toEqual({
|
||||
statusCode: 200,
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
"Access-Control-Allow-Origin": "*",
|
||||
},
|
||||
body: JSON.stringify([]),
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user