import { IntegrationFieldContent, IntegrationFieldContentType, isIntegrationFieldContent, } from "@prismicio/types-internal/lib/content" import type { IntegrationField } from "@prismicio/types-internal/lib/customtypes" import { DiffChange, DiffOperation, } from "@prismicio/types-internal/lib/customtypes/diff" import type { NestableMock, Patch } from "../../Mock" import type { MockConfig } from "../../MockConfig" export type IntegrationFieldMockConfig = MockConfig< IntegrationField["type"], string > function random(): string { return "integration-field-product-id" } export const IntegrationFieldMock: NestableMock< IntegrationField, IntegrationFieldContent, IntegrationFieldMockConfig > = { generate( _def: IntegrationField, config?: IntegrationFieldMockConfig, ): IntegrationFieldContent { const value = config?.value || random() return { __TYPE__: IntegrationFieldContentType, value, } }, applyPatch(data: Patch): | { result: IntegrationFieldContent | undefined } | undefined { if (data.diff.op === DiffOperation.Removed) return { result: undefined } if (data.diff.value.type === "IntegrationFields") { const patched = this.patch( data.diff, isIntegrationFieldContent(data.content) ? data.content : undefined, data.config?.type === "IntegrationFields" ? data.config : undefined, ) return { result: patched } } return }, patch( diff: DiffChange, _content: IntegrationFieldContent, config?: IntegrationFieldMockConfig, ): IntegrationFieldContent | undefined { switch (diff.op) { case DiffOperation.Removed: return case DiffOperation.Updated: case DiffOperation.Added: return this.generate(diff.value, config) } }, }