Skip to main content
Glama
publishEntry.test.ts4.04 kB
import { describe, it, expect, beforeEach, vi } from 'vitest'; import { publishEntryTool } from './publishEntry.js'; import { formatResponse } from '../../utils/formatters.js'; import { setupMockClient, mockEntryGet, mockEntryPublish, mockBulkActionPublish, mockEntry, mockArgs, mockBulkArgs, } from './mockClient.js'; import { createMockConfig } from '../../test-helpers/mockConfig.js'; vi.mock('../../../src/utils/tools.js'); vi.mock('../../../src/utils/bulkOperations.js'); describe('publishEntry', () => { const mockConfig = createMockConfig(); beforeEach(() => { setupMockClient(); }); it('should publish a single entry successfully', async () => { const mockPublishedEntry = { ...mockEntry, sys: { ...mockEntry.sys, status: 'published', publishedVersion: 1, }, }; mockEntryGet.mockResolvedValue(mockEntry); mockEntryPublish.mockResolvedValue(mockPublishedEntry); const tool = publishEntryTool(mockConfig); const result = await tool(mockArgs); const expectedResponse = formatResponse('Entry published successfully', { status: mockPublishedEntry.sys.status, entryId: mockArgs.entryId, }); expect(result).toEqual({ content: [ { type: 'text', text: expectedResponse, }, ], }); }); it('should handle single entry publish failure', async () => { const publishError = new Error('Publish failed'); mockEntryGet.mockResolvedValue(mockEntry); mockEntryPublish.mockRejectedValue(publishError); const tool = publishEntryTool(mockConfig); const result = await tool(mockArgs); expect(result).toEqual({ isError: true, content: [ { type: 'text', text: 'Error publishing entry: Publish failed', }, ], }); }); it('should publish multiple entries using bulk action', async () => { // Mock bulk operations const { createEntryVersionedLinks, createEntitiesCollection, waitForBulkActionCompletion, } = await import('../../utils/bulkOperations.js'); const mockEntityVersions = [ { sys: { type: 'Link' as const, linkType: 'Entry' as const, id: 'entry-1', version: 1, }, }, { sys: { type: 'Link' as const, linkType: 'Entry' as const, id: 'entry-2', version: 1, }, }, ]; const mockEntitiesCollection = { sys: { type: 'Array' as const }, items: mockEntityVersions, }; const mockBulkAction = { sys: { id: 'bulk-action-id' } }; const mockCompletedAction = { sys: { id: 'bulk-action-id', status: 'succeeded' }, }; vi.mocked(createEntryVersionedLinks).mockResolvedValue(mockEntityVersions); vi.mocked(createEntitiesCollection).mockReturnValue(mockEntitiesCollection); vi.mocked(waitForBulkActionCompletion).mockResolvedValue( mockCompletedAction, ); mockBulkActionPublish.mockResolvedValue(mockBulkAction); const tool = publishEntryTool(mockConfig); const result = await tool(mockBulkArgs); const expectedResponse = formatResponse('Entry(s) published successfully', { status: mockCompletedAction.sys.status, entryIds: mockBulkArgs.entryId, }); expect(result).toEqual({ content: [ { type: 'text', text: expectedResponse, }, ], }); }); it('should handle errors when entry publishing fails', async () => { const testArgs = { ...mockArgs, entryId: 'non-existent-entry', }; const error = new Error('Entry not found'); mockEntryGet.mockRejectedValue(error); const tool = publishEntryTool(mockConfig); const result = await tool(testArgs); expect(result).toEqual({ isError: true, content: [ { type: 'text', text: 'Error publishing entry: Entry 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