import { BooleanContent, BooleanContentType, } from "@prismicio/types-internal/lib/content" import type { BooleanField } 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" function random(): boolean { return Math.random() < 0.5 ? true : false } export type BooleanMockConfig = MockConfig export const BooleanMock: NestableMock< BooleanField, BooleanContent, BooleanMockConfig > = { generate(_def: BooleanField, config?: BooleanMockConfig): BooleanContent { const value = (() => { if ("boolean" === typeof config?.value) return config.value return random() })() return { __TYPE__: BooleanContentType, value, } }, patch( diff: DiffChange, _content: BooleanContent, config?: BooleanMockConfig, ): BooleanContent | undefined { switch (diff.op) { case DiffOperation.Removed: return case DiffOperation.Updated: case DiffOperation.Added: return this.generate(diff.value, config) } }, applyPatch(data: Patch): | { result: BooleanContent | undefined } | undefined { if (data.diff.op === DiffOperation.Removed) return { result: undefined } if (data.diff.value.type === "Boolean") { const patched = this.patch( data.diff, !data.content || data.content.__TYPE__ === BooleanContentType ? data.content : undefined, data.config?.type === "Boolean" ? data.config : undefined, ) return { result: patched } } return }, }