Skip to main content
Glama
unpublishEntry.test.ts4.19 kB
import { describe, it, expect, beforeEach, vi } from 'vitest'; import { unpublishEntryTool } from './unpublishEntry.js'; import { formatResponse } from '../../utils/formatters.js'; import { setupMockClient, mockEntryGet, mockEntryUnpublish, mockBulkActionUnpublish, 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('unpublishEntry', () => { const mockConfig = createMockConfig(); beforeEach(() => { setupMockClient(); }); it('should unpublish a single entry successfully', async () => { const mockPublishedEntry = { ...mockEntry, sys: { ...mockEntry.sys, status: 'published', publishedVersion: 1, }, }; const mockUnpublishedEntry = { ...mockPublishedEntry, sys: { ...mockPublishedEntry.sys, status: 'draft', publishedVersion: undefined, }, }; mockEntryGet.mockResolvedValue(mockPublishedEntry); mockEntryUnpublish.mockResolvedValue(mockUnpublishedEntry); const tool = unpublishEntryTool(mockConfig); const result = await tool(mockArgs); const expectedResponse = formatResponse('Entry unpublished successfully', { status: mockUnpublishedEntry.sys.status, entryId: mockArgs.entryId, }); expect(result).toEqual({ content: [ { type: 'text', text: expectedResponse, }, ], }); }); it('should handle single entry unpublish failure', async () => { const unpublishError = new Error('Unpublish failed'); mockEntryGet.mockResolvedValue(mockEntry); mockEntryUnpublish.mockRejectedValue(unpublishError); const tool = unpublishEntryTool(mockConfig); const result = await tool(mockArgs); expect(result).toEqual({ isError: true, content: [ { type: 'text', text: 'Error unpublishing entry: Unpublish failed', }, ], }); }); it('should unpublish multiple entries using bulk action', async () => { // Mock bulk operations const { createEntryUnversionedLinks, createEntitiesCollection, waitForBulkActionCompletion, } = await import('../../utils/bulkOperations.js'); const mockEntityLinks = [ { sys: { type: 'Link' as const, linkType: 'Entry' as const, id: 'entry-1', }, }, { sys: { type: 'Link' as const, linkType: 'Entry' as const, id: 'entry-2', }, }, ]; const mockEntitiesCollection = { sys: { type: 'Array' as const }, items: mockEntityLinks, }; const mockBulkAction = { sys: { id: 'bulk-action-id' } }; const mockCompletedAction = { sys: { id: 'bulk-action-id', status: 'succeeded' }, }; vi.mocked(createEntryUnversionedLinks).mockResolvedValue(mockEntityLinks); vi.mocked(createEntitiesCollection).mockReturnValue(mockEntitiesCollection); vi.mocked(waitForBulkActionCompletion).mockResolvedValue( mockCompletedAction, ); mockBulkActionUnpublish.mockResolvedValue(mockBulkAction); const tool = unpublishEntryTool(mockConfig); const result = await tool(mockBulkArgs); const expectedResponse = formatResponse( 'Entry(s) unpublished successfully', { status: mockCompletedAction.sys.status, entryIds: mockBulkArgs.entryId, }, ); expect(result).toEqual({ content: [ { type: 'text', text: expectedResponse, }, ], }); }); it('should handle errors when entry unpublishing fails', async () => { const error = new Error('Entry not found'); mockEntryGet.mockRejectedValue(error); const tool = unpublishEntryTool(mockConfig); const result = await tool(mockArgs); expect(result).toEqual({ isError: true, content: [ { type: 'text', text: 'Error unpublishing 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