Skip to main content
Glama
createEntry.test.ts3.93 kB
import { describe, it, expect, beforeEach, vi } from 'vitest'; import { createEntryTool } from './createEntry.js'; import { formatResponse } from '../../utils/formatters.js'; import { setupMockClient, mockEntryCreate, mockEntry, mockArgs, } from './mockClient.js'; import { createToolClient } from '../../utils/tools.js'; import { createMockConfig } from '../../test-helpers/mockConfig.js'; vi.mock('../../utils/tools.js'); describe('createEntry', () => { const mockConfig = createMockConfig(); beforeEach(() => { setupMockClient(); }); it('should create entry with empty fields object', async () => { const testArgs = { ...mockArgs, contentTypeId: 'test-content-type', fields: {}, }; const mockCreatedEntry = { ...mockEntry, fields: {}, }; mockEntryCreate.mockResolvedValue(mockCreatedEntry); const tool = createEntryTool(mockConfig); const result = await tool(testArgs); const expectedResponse = formatResponse('Entry created successfully', { newEntry: mockCreatedEntry, }); expect(result).toEqual({ content: [ { type: 'text', text: expectedResponse, }, ], }); }); it('should create an entry successfully with fields', async () => { const testArgs = { ...mockArgs, contentTypeId: 'test-content-type', fields: { title: { 'en-US': 'Test Entry Title' }, description: { 'en-US': 'Test Entry Description' }, }, }; mockEntryCreate.mockResolvedValue(mockEntry); const tool = createEntryTool(mockConfig); const result = await tool(testArgs); expect(createToolClient).toHaveBeenCalledWith(mockConfig, testArgs); const expectedResponse = formatResponse('Entry created successfully', { newEntry: mockEntry, }); expect(result).toEqual({ content: [ { type: 'text', text: expectedResponse, }, ], }); }); it('should create an entry with metadata', async () => { const testMetadata = { tags: [ { sys: { type: 'Link' as const, linkType: 'Tag' as const, id: 'test-tag-id', }, }, ], concepts: [ { sys: { type: 'Link' as const, linkType: 'TaxonomyConcept' as const, id: 'test-concept-id', }, }, ], }; const testArgs = { ...mockArgs, contentTypeId: 'test-content-type', fields: { title: { 'en-US': 'Test Entry Title' }, }, metadata: testMetadata, }; const mockCreatedEntry = { ...mockEntry, metadata: testMetadata, }; mockEntryCreate.mockResolvedValue(mockCreatedEntry); const tool = createEntryTool(mockConfig); const result = await tool(testArgs); expect(mockEntryCreate).toHaveBeenCalledWith(expect.any(Object), { fields: testArgs.fields, metadata: testArgs.metadata, }); const expectedResponse = formatResponse('Entry created successfully', { newEntry: mockCreatedEntry, }); expect(result).toEqual({ content: [ { type: 'text', text: expectedResponse, }, ], }); }); it('should handle errors when entry creation fails', async () => { const testArgs = { ...mockArgs, contentTypeId: 'invalid-content-type', fields: { title: { 'en-US': 'Test Entry' }, }, }; const error = new Error('Content type not found'); mockEntryCreate.mockRejectedValue(error); const tool = createEntryTool(mockConfig); const result = await tool(testArgs); expect(result).toEqual({ isError: true, content: [ { type: 'text', text: 'Error creating entry: Content type not found', }, ], }); }); });

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/contentful/contentful-mcp-server'

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