@sanity/sdk
Version:
49 lines (39 loc) • 1.62 kB
text/typescript
import {of} from 'rxjs'
import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest'
import {createDocumentHandle} from '../config/handles'
import {createSanityInstance, type SanityInstance} from '../store/createSanityInstance'
import {type StateSource} from '../store/createStateSourceAction'
import {getProjectionState} from './getProjectionState'
import {resolveProjection} from './resolveProjection'
import {type ProjectionValuePending, type ValidProjection} from './types'
vi.mock('./getProjectionState')
describe('resolveProjection', () => {
let instance: SanityInstance
beforeEach(() => {
vi.resetAllMocks()
// Create a mock that returns the correct ProjectionValuePending type
vi.mocked(getProjectionState).mockReturnValue({
observable: of({
data: {title: 'test'},
isPending: false,
} as ProjectionValuePending<Record<string, unknown>>),
} as StateSource<ProjectionValuePending<Record<string, unknown>>>)
instance = createSanityInstance({projectId: 'p', dataset: 'd'})
})
afterEach(() => {
instance.dispose()
})
it('resolves a projection and returns the first emitted value with results', async () => {
const docHandle = createDocumentHandle({
documentId: 'doc123',
documentType: 'movie',
})
const projection = '{title}' as ValidProjection
const result = await resolveProjection(instance, {...docHandle, projection})
expect(getProjectionState).toHaveBeenCalledWith(instance, {...docHandle, projection})
expect(result).toEqual({
data: {title: 'test'},
isPending: false,
})
})
})