UNPKG

sanity

Version:

Sanity is a real-time content infrastructure with a scalable, hosted backend featuring a Graph Oriented Query Language (GROQ), asset pipelines and fast edge caches

119 lines (97 loc) 3.97 kB
import {type SanityClient} from '@sanity/client' import {beforeEach, describe, expect, it, type Mock, vi} from 'vitest' import {getJsonStream} from '../_legacy/history/history/getJsonStream' import {getTransactionsLogs} from './getTransactionsLogs' vi.mock('../_legacy/history/history/getJsonStream', () => ({ getJsonStream: vi.fn(), })) const getJsonStreamMock = getJsonStream as Mock describe('getTransactionsLogs', () => { const mockClient = { config: vi.fn(() => ({ dataset: 'mockDataset', token: 'mockToken', })), getUrl: vi.fn((path) => `https://mock.sanity.api${path}`), } as unknown as SanityClient const mockStream = { getReader: vi.fn(() => ({ async read() { return {done: true} }, })), } beforeEach(() => { vi.clearAllMocks() }) it('should fetch transaction logs with default parameters', async () => { getJsonStreamMock.mockResolvedValueOnce(mockStream) const documentId = 'doc1' const result = await getTransactionsLogs(mockClient, documentId, {}) expect(mockClient.getUrl).toHaveBeenCalledWith( '/data/history/mockDataset/transactions/doc1?tag=sanity.studio.transactions-log&excludeContent=true&limit=50&includeIdentifiedDocumentsOnly=true', ) expect(getJsonStream).toHaveBeenCalledWith( 'https://mock.sanity.api/data/history/mockDataset/transactions/doc1?tag=sanity.studio.transactions-log&excludeContent=true&limit=50&includeIdentifiedDocumentsOnly=true', 'mockToken', ) expect(result).toEqual([]) }) it('should handle multiple document IDs', async () => { getJsonStreamMock.mockResolvedValueOnce(mockStream) const documentIds = ['doc1', 'doc2'] await getTransactionsLogs(mockClient, documentIds, {}) expect(mockClient.getUrl).toHaveBeenCalledWith( '/data/history/mockDataset/transactions/doc1,doc2?tag=sanity.studio.transactions-log&excludeContent=true&limit=50&includeIdentifiedDocumentsOnly=true', ) expect(getJsonStream).toHaveBeenCalledWith( 'https://mock.sanity.api/data/history/mockDataset/transactions/doc1,doc2?tag=sanity.studio.transactions-log&excludeContent=true&limit=50&includeIdentifiedDocumentsOnly=true', 'mockToken', ) }) it('should override default parameters with user-provided params', async () => { getJsonStreamMock.mockResolvedValueOnce(mockStream) const documentId = 'doc1' await getTransactionsLogs(mockClient, documentId, { tag: 'sanity.studio.custom-tag', limit: 100, fromTransaction: 'tx1', toTransaction: 'tx3', }) expect(mockClient.getUrl).toHaveBeenCalledWith( '/data/history/mockDataset/transactions/doc1?tag=sanity.studio.custom-tag&excludeContent=true&limit=100&includeIdentifiedDocumentsOnly=true&fromTransaction=tx1&toTransaction=tx3', ) }) it('should throw an error if the stream contains an error', async () => { const mockErrorStream = { getReader: vi.fn(() => ({ async read() { return {done: false, value: {error: {description: 'Error occurred'}}} }, })), } getJsonStreamMock.mockResolvedValueOnce(mockErrorStream) const documentId = 'doc1' await expect(getTransactionsLogs(mockClient, documentId, {})).rejects.toThrow('Error occurred') }) it('should collect transactions from the stream', async () => { const mockDataStream = { getReader: vi.fn(() => { let callCount = 0 return { async read() { if (callCount < 3) { callCount++ return {done: false, value: {id: `txn${callCount}`}} } return {done: true} }, } }), } getJsonStreamMock.mockResolvedValueOnce(mockDataStream) const documentId = 'doc1' const result = await getTransactionsLogs(mockClient as any, documentId, {}) expect(result).toEqual([{id: 'txn1'}, {id: 'txn2'}, {id: 'txn3'}]) }) })