feat: Add Jest configuration and tests for project and user handlers
This commit is contained in:
104
tasker-server/tests/createUser.test.ts
Normal file
104
tasker-server/tests/createUser.test.ts
Normal file
@@ -0,0 +1,104 @@
|
||||
const mockPut = jest.fn();
|
||||
|
||||
import { handler } from "../src/handlers/createUser";
|
||||
import { v4 as uuidv4 } from "uuid";
|
||||
import { fetchRandomTeamId } from "@/lib/util";
|
||||
|
||||
jest.mock("@aws-sdk/lib-dynamodb", () => ({
|
||||
DynamoDBDocument: {
|
||||
from: jest.fn(() => ({
|
||||
put: mockPut,
|
||||
})),
|
||||
},
|
||||
}));
|
||||
|
||||
jest.mock("uuid", () => ({
|
||||
v4: jest.fn(),
|
||||
}));
|
||||
|
||||
jest.mock("@/lib/util", () => ({
|
||||
fetchRandomTeamId: jest.fn(),
|
||||
}));
|
||||
|
||||
describe("createUser handler", () => {
|
||||
beforeAll(() => {
|
||||
jest.spyOn(console, "info").mockImplementation(jest.fn());
|
||||
});
|
||||
|
||||
afterAll(() => {
|
||||
jest.restoreAllMocks();
|
||||
});
|
||||
|
||||
it("should create a new user and log a success message", async () => {
|
||||
const mockUUID = "mock-uuid";
|
||||
const mockTeamId = "team-123";
|
||||
(uuidv4 as jest.Mock).mockReturnValue(mockUUID);
|
||||
(fetchRandomTeamId as jest.Mock).mockResolvedValue(mockTeamId);
|
||||
|
||||
const event = {
|
||||
request: {
|
||||
userAttributes: {
|
||||
preferred_username: "testUser",
|
||||
sub: "cognito-123",
|
||||
},
|
||||
},
|
||||
userName: "fallbackUser",
|
||||
};
|
||||
|
||||
mockPut.mockResolvedValue({});
|
||||
|
||||
const response = await handler(event);
|
||||
|
||||
expect(fetchRandomTeamId).toHaveBeenCalled();
|
||||
expect(mockPut).toHaveBeenCalledWith({
|
||||
TableName: "mock-user-table",
|
||||
Item: {
|
||||
category: "users",
|
||||
cognitoId: "cognito-123",
|
||||
userId: `user_${mockUUID}`,
|
||||
username: "testUser",
|
||||
profilePictureUrl: "p0.jpeg",
|
||||
teamId: mockTeamId,
|
||||
},
|
||||
});
|
||||
|
||||
expect(response).toEqual(event);
|
||||
});
|
||||
|
||||
it("should throw an error if DynamoDB operation fails", async () => {
|
||||
const mockUUID = "mock-uuid";
|
||||
const mockTeamId = "team-123";
|
||||
(uuidv4 as jest.Mock).mockReturnValue(mockUUID);
|
||||
(fetchRandomTeamId as jest.Mock).mockResolvedValue(mockTeamId);
|
||||
|
||||
const event = {
|
||||
request: {
|
||||
userAttributes: {
|
||||
preferred_username: "testUser",
|
||||
sub: "cognito-123",
|
||||
},
|
||||
},
|
||||
userName: "fallbackUser",
|
||||
};
|
||||
|
||||
const mockError = new Error("DynamoDB error");
|
||||
mockPut.mockRejectedValue(mockError);
|
||||
|
||||
await expect(handler(event)).rejects.toThrow(
|
||||
"Error creating user: DynamoDB error"
|
||||
);
|
||||
|
||||
expect(fetchRandomTeamId).toHaveBeenCalled();
|
||||
expect(mockPut).toHaveBeenCalledWith({
|
||||
TableName: "mock-user-table",
|
||||
Item: {
|
||||
category: "users",
|
||||
cognitoId: "cognito-123",
|
||||
userId: `user_${mockUUID}`,
|
||||
username: "testUser",
|
||||
profilePictureUrl: "p0.jpeg",
|
||||
teamId: mockTeamId,
|
||||
},
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user