cloudinary-mcp-server

by yoavniran
Verified
import { createCloudinaryMock } from "../../test/cloudinary.mock"; import getUsageTool, { getUsageToolParams } from "./getUsageTool.js"; import { z } from "zod"; describe("getUsageTool", () => { let cloudinaryMock; let usageTool; beforeEach(() => { cloudinaryMock = createCloudinaryMock(); usageTool = getUsageTool(cloudinaryMock); vi.clearAllMocks(); }); it("should have proper parameter schema", () => { expect(getUsageToolParams).toBeDefined(); expect(getUsageToolParams.date).toBeInstanceOf(z.ZodOptional); }); it("should successfully get usage data without date parameter", async () => { const mockUsageData = { plan: "free", last_updated: "2023-05-10", transformations: { usage: 10, limit: 500 }, objects: { usage: 5, limit: 100 } }; cloudinaryMock.api.usage.mockResolvedValue(mockUsageData); const result = await usageTool({}); expect(cloudinaryMock.api.usage).toHaveBeenCalledWith({}); expect(result.isError).toBe(false); expect(result.content).toHaveLength(1); expect(result.content[0].type).toBe("text"); expect(JSON.parse(result.content[0].text)).toEqual(mockUsageData); }); it("should successfully get usage data with date parameter", async () => { const mockUsageData = { plan: "free", last_updated: "2023-04-15", transformations: { usage: 8, limit: 500 }, objects: { usage: 3, limit: 100 } }; const date = "2023-04-15"; cloudinaryMock.api.usage.mockResolvedValue(mockUsageData); const result = await usageTool({ date }); expect(cloudinaryMock.api.usage).toHaveBeenCalledWith({ date }); expect(result.isError).toBe(false); expect(result.content).toHaveLength(1); expect(result.content[0].type).toBe("text"); expect(JSON.parse(result.content[0].text)).toEqual(mockUsageData); }); it("should handle API errors", async () => { const errorMessage = "API Error: Invalid date format"; cloudinaryMock.api.usage.mockRejectedValue(new Error(errorMessage)); const result = await usageTool({ date: "invalid-date" }); expect(result.isError).toBe(true); expect(result.content).toHaveLength(1); expect(result.content[0].type).toBe("text"); expect(result.content[0].text).toContain(errorMessage); expect(result.content[0].text).toContain(`(cloud: ${cloudinaryMock.config().cloud_name}, key: ${cloudinaryMock.config().api_key.slice(0, 4)}...)`); }); });