Skip to main content
Glama
folder.service.test.ts7.06 kB
import axios, { AxiosInstance } from "axios"; import { FolderService } from "../../../services/resources/folder.service.js"; import { GetFoldersParams, ClickUpFolder, CreateFolderParams, UpdateFolderParams, ClickUpSuccessResponse, } from "../../../types"; jest.mock("axios"); const mockedAxios = axios as jest.Mocked<typeof axios>; describe("FolderService", () => { let folderService: FolderService; let mockClient: jest.Mocked<AxiosInstance>; beforeEach(() => { mockedAxios.get.mockClear(); mockedAxios.post.mockClear(); mockedAxios.put.mockClear(); mockedAxios.delete.mockClear(); mockClient = { get: mockedAxios.get, post: mockedAxios.post, put: mockedAxios.put, delete: mockedAxios.delete, } as unknown as jest.Mocked<AxiosInstance>; folderService = new FolderService(mockClient); }); // Test suite for getFolders describe("getFolders", () => { it("should retrieve folders for a space and return folder data", async () => { const params: GetFoldersParams = { space_id: "space_123", archived: false, }; const mockFolderData: ClickUpFolder[] = [ { id: "folder1", name: "Folder Alpha", orderindex: 0, override_statuses: false, hidden: false, space: { id: "space_123", name: "Test Space", access: true }, task_count: "10", archived: false, lists: [], }, ]; const mockResponse = { data: { folders: mockFolderData } }; mockClient.get.mockResolvedValueOnce(mockResponse); const result = await folderService.getFolders(params); expect(mockClient.get).toHaveBeenCalledWith( `/space/${params.space_id}/folder`, { params: { archived: "false" } }, ); expect(result).toEqual(mockResponse.data); }); it("should throw an error if ClickUp API fails to get folders", async () => { const params: GetFoldersParams = { space_id: "space_123" }; mockClient.get.mockRejectedValueOnce(new Error("API Error")); await expect(folderService.getFolders(params)).rejects.toThrow( "Failed to retrieve folders from ClickUp", ); }); }); // Test suite for createFolder describe("createFolder", () => { it("should create a folder and return folder data", async () => { const params: CreateFolderParams = { space_id: "space_123", name: "New Folder", }; const mockResponseData: ClickUpFolder = { id: "folder_new", name: params.name, orderindex: 0, override_statuses: false, hidden: false, space: { id: params.space_id, name: "Test Space", access: true }, task_count: "0", archived: false, lists: [], }; const mockResponse = { data: mockResponseData }; mockClient.post.mockResolvedValueOnce(mockResponse); const { space_id, ...bodyParams } = params; const result = await folderService.createFolder(params); expect(mockClient.post).toHaveBeenCalledWith( `/space/${space_id}/folder`, bodyParams, ); expect(result).toEqual(mockResponse.data); }); it("should throw an error if ClickUp API fails to create a folder", async () => { const params: CreateFolderParams = { space_id: "space_123", name: "New Folder", }; mockClient.post.mockRejectedValueOnce(new Error("API Error")); await expect(folderService.createFolder(params)).rejects.toThrow( "Failed to create folder in ClickUp", ); }); }); // Test suite for getFolder describe("getFolder", () => { it("should retrieve a specific folder and return its data", async () => { const folderId = "folder_abc"; const mockResponseData: ClickUpFolder = { id: folderId, name: "Specific Folder", orderindex: 0, override_statuses: false, hidden: false, space: { id: "space_123", name: "Test Space", access: true }, task_count: "5", archived: false, lists: [], }; const mockResponse = { data: mockResponseData }; mockClient.get.mockResolvedValueOnce(mockResponse); const result = await folderService.getFolder(folderId); expect(mockClient.get).toHaveBeenCalledWith(`/folder/${folderId}`); expect(result).toEqual(mockResponse.data); }); it("should throw an error if ClickUp API fails to get a folder", async () => { const folderId = "folder_abc"; mockClient.get.mockRejectedValueOnce(new Error("API Error")); await expect(folderService.getFolder(folderId)).rejects.toThrow( "Failed to retrieve folder from ClickUp", ); }); }); // Test suite for updateFolder describe("updateFolder", () => { it("should update a folder and return updated folder data", async () => { const params: UpdateFolderParams = { folder_id: "folder_xyz", name: "Updated Folder", }; const mockResponseData: ClickUpFolder = { id: params.folder_id, name: params.name!, orderindex: 0, override_statuses: false, hidden: false, space: { id: "space_123", name: "Test Space", access: true }, task_count: "10", archived: false, lists: [], }; const mockResponse = { data: mockResponseData }; mockClient.put.mockResolvedValueOnce(mockResponse); const { folder_id, ...bodyParams } = params; const result = await folderService.updateFolder(params); expect(mockClient.put).toHaveBeenCalledWith( `/folder/${folder_id}`, bodyParams, ); expect(result).toEqual(mockResponse.data); }); it("should throw an error if ClickUp API fails during folder update", async () => { const params: UpdateFolderParams = { folder_id: "folder_xyz", name: "Updated Folder", }; mockClient.put.mockRejectedValueOnce(new Error("API Error")); await expect(folderService.updateFolder(params)).rejects.toThrow( "Failed to update folder in ClickUp", ); }); }); // Test suite for deleteFolder describe("deleteFolder", () => { it("should delete a folder and return success response", async () => { const folderId = "folder_todelete"; const mockResponse = { data: {} as ClickUpSuccessResponse }; mockClient.delete.mockResolvedValueOnce(mockResponse); const result = await folderService.deleteFolder(folderId); expect(mockClient.delete).toHaveBeenCalledWith(`/folder/${folderId}`); expect(result).toEqual(mockResponse.data); }); it("should throw an error if ClickUp API fails to delete a folder", async () => { const folderId = "folder_todelete"; mockClient.delete.mockRejectedValueOnce(new Error("API Error")); await expect(folderService.deleteFolder(folderId)).rejects.toThrow( "Failed to delete folder in ClickUp", ); }); }); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Nazruden/clickup-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server