Skip to content

Commit

Permalink
fixup! test(sanity): migrate sanity package to vitest
Browse files Browse the repository at this point in the history
  • Loading branch information
bjoerge committed Oct 14, 2024
1 parent 261d657 commit a9870a8
Show file tree
Hide file tree
Showing 2 changed files with 102 additions and 0 deletions.
1 change: 1 addition & 0 deletions packages/sanity/test/form/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
export * from './renderArrayOfObjectsInput'
export * from './renderBooleanInput'
export * from './renderCrossDatasetReferenceInput'
export * from './renderFileInput'
Expand Down
101 changes: 101 additions & 0 deletions packages/sanity/test/form/renderArrayOfObjectsInput.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
import {jest} from '@jest/globals'
import {type ArraySchemaType, type FieldDefinition} from '@sanity/types'
import {type ReactElement} from 'react'

import {
type ArrayOfObjectsFormNode,
type ArrayOfObjectsInputProps,
type ComplexElementProps,
defaultRenderAnnotation,
defaultRenderBlock,
defaultRenderField,
defaultRenderInlineBlock,
defaultRenderInput,
defaultRenderItem,
defaultRenderPreview,
type FieldMember,
} from '../../src/core'
import {renderInput, type TestRenderInputContext, type TestRenderInputProps} from './renderInput'
import {type TestRenderProps} from './types'

const noopRenderDefault = () => <></>

export type TestRenderArrayOfObjectInputCallback = (
inputProps: ArrayOfObjectsInputProps,
) => ReactElement

export async function renderArrayOfObjectsInput(options: {
fieldDefinition: FieldDefinition<'array'>
props?: TestRenderProps
render: TestRenderArrayOfObjectInputCallback
}) {
const {fieldDefinition, props, render} = options

const onItemAppend = jest.fn()
const onItemClose = jest.fn()
const onCollapse = jest.fn()
const onItemCollapse = jest.fn()
const onExpand = jest.fn()
const onItemExpand = jest.fn()
const onPathFocus = jest.fn()
const onInsert = jest.fn()
const onItemMove = jest.fn()
const onItemOpen = jest.fn()
const onItemPrepend = jest.fn()
const onUpload = jest.fn()
const onItemRemove = jest.fn()

let initialValueId = 0
const resolveInitialValue = () => Promise.resolve({_key: String(initialValueId++)})

function transformProps(
baseProps: TestRenderInputProps<ComplexElementProps>,
context: TestRenderInputContext,
): ArrayOfObjectsInputProps {
const {focusPath, path, schemaType, value, ...restProps} = baseProps
const {formState} = context
const fieldMember = formState.members?.find(
(member) => member.kind === 'field' && member.name === fieldDefinition.name,
) as FieldMember<ArrayOfObjectsFormNode> | undefined
const field = fieldMember?.field

return {
...restProps,
changed: false,
focusPath,
members: field?.members || [],
onItemAppend,
onItemClose,
onItemCollapse,
onItemExpand,
onPathFocus,
onInsert,
onItemMove,
onItemOpen,
onItemPrepend,
onItemRemove,
resolveUploader: () => null,
onUpload,
path,
renderAnnotation: defaultRenderAnnotation,
renderBlock: defaultRenderBlock,
renderField: defaultRenderField,
renderInlineBlock: defaultRenderInlineBlock,
renderInput: defaultRenderInput,
renderItem: defaultRenderItem,
renderPreview: defaultRenderPreview,
resolveInitialValue,
schemaType: schemaType as ArraySchemaType,
value: value as {_key: string}[],
renderDefault: noopRenderDefault,
}
}

const ret = await renderInput<ComplexElementProps>({
fieldDefinition,
props,
render: (inputProps, context) => render(transformProps(inputProps, context)),
})

return ret
}

0 comments on commit a9870a8

Please sign in to comment.