@wix/patterns-cms 1.14.0 → 1.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dist/cjs/adapter/__tests__/cmsFieldActions.spec.js.map +1 -1
  2. package/dist/cjs/adapter/__tests__/createCmsBackend.spec.js +107 -14
  3. package/dist/cjs/adapter/__tests__/createCmsBackend.spec.js.map +1 -1
  4. package/dist/cjs/adapter/__tests__/filterUtils.spec.js +7 -7
  5. package/dist/cjs/adapter/__tests__/filterUtils.spec.js.map +1 -1
  6. package/dist/cjs/adapter/__tests__/searchUtils.spec.js.map +1 -1
  7. package/dist/cjs/adapter/__tests__/sortUtils.spec.js.map +1 -1
  8. package/dist/cjs/adapter/__tests__/transformCmsSchema.spec.js.map +1 -1
  9. package/dist/cjs/adapter/__tests__/useCmsSchemaSource.spec.js +50 -11
  10. package/dist/cjs/adapter/__tests__/useCmsSchemaSource.spec.js.map +1 -1
  11. package/dist/cjs/adapter/cmsBackup.js.map +1 -1
  12. package/dist/cjs/adapter/cmsFieldTypeMap.js.map +1 -1
  13. package/dist/cjs/adapter/cmsPermissions.js.map +1 -1
  14. package/dist/cjs/adapter/constants.js.map +1 -1
  15. package/dist/cjs/adapter/createCmsBackend.js +33 -10
  16. package/dist/cjs/adapter/createCmsBackend.js.map +1 -1
  17. package/dist/cjs/adapter/createCmsFieldActions.js.map +1 -1
  18. package/dist/cjs/adapter/fetchExternalDbConnections.js.map +1 -1
  19. package/dist/cjs/adapter/filterUtils.js +7 -7
  20. package/dist/cjs/adapter/filterUtils.js.map +1 -1
  21. package/dist/cjs/adapter/loadCmsSchema.js +1 -0
  22. package/dist/cjs/adapter/loadCmsSchema.js.map +1 -1
  23. package/dist/cjs/adapter/searchUtils.js.map +1 -1
  24. package/dist/cjs/adapter/sortUtils.js.map +1 -1
  25. package/dist/cjs/adapter/transformCmsSchema.js.map +1 -1
  26. package/dist/cjs/adapter/useCmsSchemaSource.js +72 -12
  27. package/dist/cjs/adapter/useCmsSchemaSource.js.map +1 -1
  28. package/dist/cjs/testkit/cmsFetchMocks.js +2 -2
  29. package/dist/cjs/testkit/cmsFetchMocks.js.map +1 -1
  30. package/dist/esm/adapter/__tests__/cmsFieldActions.spec.js +15 -3
  31. package/dist/esm/adapter/__tests__/cmsFieldActions.spec.js.map +1 -1
  32. package/dist/esm/adapter/__tests__/createCmsBackend.spec.js +68 -12
  33. package/dist/esm/adapter/__tests__/createCmsBackend.spec.js.map +1 -1
  34. package/dist/esm/adapter/__tests__/filterUtils.spec.js +1 -1
  35. package/dist/esm/adapter/__tests__/filterUtils.spec.js.map +1 -1
  36. package/dist/esm/adapter/__tests__/searchUtils.spec.js.map +1 -1
  37. package/dist/esm/adapter/__tests__/sortUtils.spec.js.map +1 -1
  38. package/dist/esm/adapter/__tests__/useCmsSchemaSource.spec.js +48 -6
  39. package/dist/esm/adapter/__tests__/useCmsSchemaSource.spec.js.map +1 -1
  40. package/dist/esm/adapter/createCmsBackend.js +33 -10
  41. package/dist/esm/adapter/createCmsBackend.js.map +1 -1
  42. package/dist/esm/adapter/createCmsFieldActions.js.map +1 -1
  43. package/dist/esm/adapter/filterUtils.js +2 -2
  44. package/dist/esm/adapter/filterUtils.js.map +1 -1
  45. package/dist/esm/adapter/loadCmsSchema.js +1 -0
  46. package/dist/esm/adapter/loadCmsSchema.js.map +1 -1
  47. package/dist/esm/adapter/searchUtils.js.map +1 -1
  48. package/dist/esm/adapter/sortUtils.js.map +1 -1
  49. package/dist/esm/adapter/transformCmsSchema.js.map +1 -1
  50. package/dist/esm/adapter/useCmsSchemaSource.js +72 -9
  51. package/dist/esm/adapter/useCmsSchemaSource.js.map +1 -1
  52. package/dist/esm/testkit/cmsFetchMocks.js +1 -1
  53. package/dist/esm/testkit/cmsFetchMocks.js.map +1 -1
  54. package/dist/types/adapter/cmsBackup.d.ts +1 -1
  55. package/dist/types/adapter/cmsFieldTypeMap.d.ts +1 -1
  56. package/dist/types/adapter/cmsPermissions.d.ts +1 -1
  57. package/dist/types/adapter/constants.d.ts +1 -1
  58. package/dist/types/adapter/createCmsBackend.d.ts +1 -1
  59. package/dist/types/adapter/createCmsBackend.d.ts.map +1 -1
  60. package/dist/types/adapter/createCmsFieldActions.d.ts +1 -1
  61. package/dist/types/adapter/createCmsFieldActions.d.ts.map +1 -1
  62. package/dist/types/adapter/fetchExternalDbConnections.d.ts +1 -1
  63. package/dist/types/adapter/filterUtils.d.ts +2 -1
  64. package/dist/types/adapter/filterUtils.d.ts.map +1 -1
  65. package/dist/types/adapter/loadCmsSchema.d.ts +5 -1
  66. package/dist/types/adapter/loadCmsSchema.d.ts.map +1 -1
  67. package/dist/types/adapter/searchUtils.d.ts +2 -1
  68. package/dist/types/adapter/searchUtils.d.ts.map +1 -1
  69. package/dist/types/adapter/sortUtils.d.ts +2 -1
  70. package/dist/types/adapter/sortUtils.d.ts.map +1 -1
  71. package/dist/types/adapter/transformCmsSchema.d.ts +1 -1
  72. package/dist/types/adapter/transformCmsSchema.d.ts.map +1 -1
  73. package/dist/types/adapter/useCmsSchemaSource.d.ts +8 -2
  74. package/dist/types/adapter/useCmsSchemaSource.d.ts.map +1 -1
  75. package/dist/types/testkit/cmsFetchMocks.d.ts +2 -2
  76. package/dist/types/testkit/cmsFetchMocks.d.ts.map +1 -1
  77. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"names":["_data","require","_createCmsFieldActions","jest","mock","actual","requireActual","collections","createDataCollectionField","fn","patchDataCollectionField","deleteDataCollectionField","patchDataCollection","updateDataCollection","tasks","createTask","getTask","COLLECTION_ID","makeField","overrides","key","displayName","type","Type","TEXT","systemField","encrypted","makeCollection","fields","_id","makePatternsField","base","id","describe","beforeEach","clearAllMocks","mockResolvedValue","dataCollection","mockImplementation","it","actions","createCmsFieldActions","addField","calledCollectionId","payload","calls","expect","toBe","field","toMatchObject","required","toBeTruthy","not","isPii","helpText","description","validation","numberRange","min","max","NUMBER","toEqual","toBeUndefined","stringLengthRange","minLength","maxLength","rejects","toThrow","toHaveBeenCalled","existing","addFields","toHaveBeenCalledTimes","Object","keys","color","editField","toHaveBeenCalledWith","patch","toHaveProperty","renameField","deleteField","fieldKey","makePrimary","displayField","duplicateField","capabilities","sortable","queryOperators","QueryOperator","EQ","_payload$field$typeMe","_payload$field$typeMe2","sourceField","MULTI_REFERENCE","typeMetadata","multiReference","referencingFieldKey","referencedCollectionId","status","duplicateFieldWithContent","targetFieldKey","copyFieldDataOptions","dataCollectionId","sourceFieldKey","failures","code"],"sources":["../../../../src/adapter/__tests__/cmsFieldActions.spec.ts"],"sourcesContent":["import { collections, tasks } from '@wix/data';\nimport type { Field } from '@wix/bex-core';\nimport { createCmsFieldActions } from '../createCmsFieldActions';\n\njest.mock('@wix/data', () => {\n const actual = jest.requireActual('@wix/data');\n return {\n ...actual,\n collections: {\n ...actual.collections,\n createDataCollectionField: jest.fn(),\n patchDataCollectionField: jest.fn(),\n deleteDataCollectionField: jest.fn(),\n patchDataCollection: jest.fn(),\n updateDataCollection: jest.fn(),\n },\n tasks: {\n ...actual.tasks,\n createTask: jest.fn(),\n getTask: jest.fn(),\n },\n };\n});\n\n// Typed accessors — the @wix/data SDK exposes overloaded callable types\n// (MaybeContext<...>), and jest.Mocked<typeof collections> resolves to the\n// HttpClient-form overload, which makes mockResolvedValue/mock.calls unusable.\n// Re-typing each mock with the call shape the adapter uses unblocks both.\nconst createDataCollectionField =\n collections.createDataCollectionField as unknown as jest.Mock<\n Promise<{ dataCollection: collections.DataCollection }>,\n [collectionId: string, options: { field: collections.Field }]\n >;\nconst patchDataCollectionField =\n collections.patchDataCollectionField as unknown as jest.Mock<\n Promise<{ dataCollection: collections.DataCollection }>,\n [collectionId: string, field: collections.Field]\n >;\nconst deleteDataCollectionField =\n collections.deleteDataCollectionField as unknown as jest.Mock<\n Promise<{ dataCollection: collections.DataCollection }>,\n [collectionId: string, options: { fieldKey: string }]\n >;\nconst patchDataCollection =\n collections.patchDataCollection as unknown as jest.Mock<\n Promise<{ dataCollection: collections.DataCollection }>,\n [collectionId: string, dataCollection: collections.PatchDataCollection]\n >;\n// updateDataCollection resolves with the updated collection directly (not\n// wrapped in `{ dataCollection }`, unlike the field mutations).\nconst updateDataCollection =\n collections.updateDataCollection as unknown as jest.Mock<\n Promise<collections.DataCollection>,\n [dataCollection: collections.DataCollection]\n >;\n\ninterface CopyTaskState {\n _id: string;\n status: 'NEW' | 'RUNNING' | 'COMPLETED' | 'FAILED';\n failures?: { code?: string; description?: string }[];\n}\n\nconst createTask = tasks.createTask as unknown as jest.Mock<\n Promise<{ _id: string }>,\n [task: { type: string; copyFieldDataOptions: unknown }]\n>;\nconst getTask = tasks.getTask as unknown as jest.Mock<\n Promise<CopyTaskState>,\n [taskId: string]\n>;\n\nconst COLLECTION_ID = 'collection-1';\n\nconst makeField = (\n overrides: Partial<collections.Field> = {},\n): collections.Field => ({\n key: 'sourceField',\n displayName: 'Source Field',\n type: collections.Type.TEXT,\n systemField: false,\n encrypted: false,\n ...overrides,\n});\n\nconst makeCollection = (\n fields: collections.Field[],\n): collections.DataCollection => ({ _id: COLLECTION_ID, fields });\n\nconst makePatternsField = (overrides: Partial<Field> = {}): Field => {\n const base: Field = {\n id: 'ignored-by-addField',\n displayName: 'New Field',\n type: 'SHORT_TEXT',\n };\n return { ...base, ...overrides } as Field;\n};\n\ndescribe('createCmsFieldActions', () => {\n beforeEach(() => {\n jest.clearAllMocks();\n createDataCollectionField.mockResolvedValue({\n dataCollection: makeCollection([]),\n });\n deleteDataCollectionField.mockResolvedValue({\n dataCollection: makeCollection([]),\n });\n patchDataCollection.mockResolvedValue({\n dataCollection: makeCollection([]),\n });\n patchDataCollectionField.mockResolvedValue({\n dataCollection: makeCollection([]),\n });\n updateDataCollection.mockImplementation(async (dataCollection) => dataCollection);\n });\n\n describe('addField', () => {\n it('maps the patterns field type to the CMS type and derives the key from displayName', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await actions.addField!(\n makePatternsField({ displayName: 'My New Field' }),\n );\n\n const [calledCollectionId, payload] =\n createDataCollectionField.mock.calls[0];\n expect(calledCollectionId).toBe(COLLECTION_ID);\n expect(payload.field).toMatchObject({\n displayName: 'My New Field',\n type: collections.Type.TEXT,\n required: false,\n });\n expect(payload.field.key).toBeTruthy();\n });\n\n it('appends a numeric suffix when the generated key collides with an existing field', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField({ key: 'newField' })]),\n );\n\n await actions.addField!(makePatternsField({ displayName: 'New Field' }));\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field.key).not.toBe('newField');\n });\n\n it('sets encrypted when isPii is true and description from helpText', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await actions.addField!(\n makePatternsField({ isPii: true, helpText: 'Some hint' }),\n );\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field.encrypted).toBe(true);\n expect(payload.field.description).toBe('Some hint');\n });\n\n it('passes numberRange only when the field type is NUMBER', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await actions.addField!(\n makePatternsField({\n type: 'NUMBER',\n validation: { required: false, numberRange: { min: 0, max: 10 } },\n }),\n );\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field.type).toBe(collections.Type.NUMBER);\n expect(payload.field.numberRange).toEqual({ min: 0, max: 10 });\n });\n\n it('ignores numberRange when the field type is not NUMBER', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await actions.addField!(\n makePatternsField({\n type: 'SHORT_TEXT',\n validation: { required: false, numberRange: { min: 0, max: 10 } },\n }),\n );\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field.numberRange).toBeUndefined();\n });\n\n it('passes stringLengthRange only when the field type is SHORT_TEXT', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await actions.addField!(\n makePatternsField({\n type: 'SHORT_TEXT',\n validation: {\n required: false,\n stringLengthRange: { minLength: 1, maxLength: 50 },\n },\n }),\n );\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field.stringLengthRange).toEqual({\n minLength: 1,\n maxLength: 50,\n });\n });\n\n it('throws when the patterns type has no CMS mapping', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await expect(\n actions.addField!(makePatternsField({ type: 'IMAGE' })),\n ).rejects.toThrow('Field type IMAGE not supported yet');\n expect(createDataCollectionField).not.toHaveBeenCalled();\n });\n\n it('uses validation.required when provided', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await actions.addField!(\n makePatternsField({ validation: { required: true } }),\n );\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field.required).toBe(true);\n });\n });\n\n describe('addFields', () => {\n it('appends all new fields in one updateDataCollection call, keyed by field.id, preserving existing fields', async () => {\n const existing = makeField({ key: 'name', displayName: 'Name' });\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([existing]),\n );\n\n await actions.addFields!([\n makePatternsField({ id: 'color', displayName: 'Color', type: 'SHORT_TEXT' }),\n makePatternsField({ id: 'count', displayName: 'Count', type: 'NUMBER' }),\n ]);\n\n expect(updateDataCollection).toHaveBeenCalledTimes(1);\n const [dataCollection] = updateDataCollection.mock.calls[0];\n expect(dataCollection._id).toBe(COLLECTION_ID);\n // Existing field kept; new fields appended under their given ids as keys.\n expect(dataCollection.fields).toEqual([\n existing,\n {\n key: 'color',\n displayName: 'Color',\n type: collections.Type.TEXT,\n required: false,\n },\n {\n key: 'count',\n displayName: 'Count',\n type: collections.Type.NUMBER,\n required: false,\n },\n ]);\n expect(createDataCollectionField).not.toHaveBeenCalled();\n });\n\n it('resolves with the full updated fields map (existing + added), keyed by field key', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField({ key: 'name', displayName: 'Name' })]),\n );\n\n const fields = await actions.addFields!([\n makePatternsField({ id: 'color', displayName: 'Color', type: 'SHORT_TEXT' }),\n ]);\n\n expect(Object.keys(fields)).toEqual(['name', 'color']);\n expect(fields.color).toMatchObject({ id: 'color', displayName: 'Color' });\n });\n\n it('throws before any write when a field type has no CMS mapping', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await expect(\n actions.addFields!([makePatternsField({ id: 'pic', type: 'IMAGE' })]),\n ).rejects.toThrow('Field type IMAGE not supported yet');\n expect(updateDataCollection).not.toHaveBeenCalled();\n });\n\n it('throws when the collection cannot be read', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () => null);\n\n await expect(\n actions.addFields!([makePatternsField({ id: 'color' })]),\n ).rejects.toThrow(`Collection ${COLLECTION_ID} not found`);\n expect(updateDataCollection).not.toHaveBeenCalled();\n });\n });\n\n describe('editField', () => {\n it('patches only displayName when only displayName is provided', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField({ key: 'name' })]),\n );\n\n await actions.editField!('name', { displayName: 'Renamed' });\n\n expect(patchDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {\n key: 'name',\n displayName: 'Renamed',\n });\n });\n\n it('maps isPii to encrypted and helpText to description', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField({ key: 'name' })]),\n );\n\n await actions.editField!('name', { isPii: true, helpText: 'hint' });\n\n expect(patchDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {\n key: 'name',\n encrypted: true,\n description: 'hint',\n });\n });\n\n it('includes numberRange in the patch only when the source CMS field is NUMBER', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({ key: 'age', type: collections.Type.NUMBER }),\n ]),\n );\n\n await actions.editField!('age', {\n validation: { required: true, numberRange: { min: 0, max: 100 } },\n });\n\n expect(patchDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {\n key: 'age',\n required: true,\n numberRange: { min: 0, max: 100 },\n });\n });\n\n it('omits numberRange when the source CMS field is not NUMBER', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({ key: 'name', type: collections.Type.TEXT }),\n ]),\n );\n\n await actions.editField!('name', {\n validation: { required: true, numberRange: { min: 0, max: 100 } },\n });\n\n const [, patch] = patchDataCollectionField.mock.calls[0];\n expect(patch).not.toHaveProperty('numberRange');\n expect(patch).toMatchObject({ key: 'name', required: true });\n });\n\n it('includes stringLengthRange in the patch only when the source CMS field is TEXT', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({ key: 'name', type: collections.Type.TEXT }),\n ]),\n );\n\n await actions.editField!('name', {\n validation: {\n required: false,\n stringLengthRange: { minLength: 1, maxLength: 30 },\n },\n });\n\n expect(patchDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {\n key: 'name',\n required: false,\n stringLengthRange: { minLength: 1, maxLength: 30 },\n });\n });\n\n it('omits stringLengthRange when the source CMS field is not TEXT', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({ key: 'age', type: collections.Type.NUMBER }),\n ]),\n );\n\n await actions.editField!('age', {\n validation: {\n required: false,\n stringLengthRange: { minLength: 1, maxLength: 30 },\n },\n });\n\n const [, patch] = patchDataCollectionField.mock.calls[0];\n expect(patch).not.toHaveProperty('stringLengthRange');\n });\n });\n\n describe('renameField', () => {\n it('patches the field displayName with the new name', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField({ key: 'name' })]),\n );\n\n await actions.renameField!('name', 'Renamed');\n\n expect(patchDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {\n key: 'name',\n displayName: 'Renamed',\n });\n });\n });\n\n describe('deleteField', () => {\n it('calls collections.deleteDataCollectionField with the field key', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField({ key: 'toDelete' })]),\n );\n\n await actions.deleteField!('toDelete');\n\n expect(deleteDataCollectionField).toHaveBeenCalledTimes(1);\n expect(deleteDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {\n fieldKey: 'toDelete',\n });\n });\n });\n\n describe('makePrimary', () => {\n it('patches the collection displayField with the given field id', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField({ key: 'newPrimary' })]),\n );\n\n await actions.makePrimary!('newPrimary');\n\n expect(patchDataCollection).toHaveBeenCalledTimes(1);\n expect(patchDataCollection).toHaveBeenCalledWith(COLLECTION_ID, {\n displayField: 'newPrimary',\n });\n });\n });\n\n describe('duplicateField', () => {\n it('clones the source field with a \"(Copy)\" suffix and a fresh key', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({ key: 'sourceField', displayName: 'Source Field' }),\n ]),\n );\n\n await actions.duplicateField!('sourceField');\n\n expect(createDataCollectionField).toHaveBeenCalledTimes(1);\n const [calledCollectionId, payload] =\n createDataCollectionField.mock.calls[0];\n expect(calledCollectionId).toBe(COLLECTION_ID);\n expect(payload.field).toMatchObject({\n displayName: 'Source Field (Copy)',\n type: collections.Type.TEXT,\n });\n expect(payload.field.key).not.toBe('sourceField');\n });\n\n it('strips systemField and capabilities from the cloned field', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({\n systemField: true,\n capabilities: {\n sortable: true,\n queryOperators: [collections.QueryOperator.EQ],\n },\n }),\n ]),\n );\n\n await actions.duplicateField!('sourceField');\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field).not.toHaveProperty('systemField');\n expect(payload.field).not.toHaveProperty('capabilities');\n });\n\n it('clears typeMetadata.multiReference.referencingFieldKey on clone', async () => {\n const sourceField: collections.Field = makeField({\n key: 'multiRef',\n displayName: 'Multi Ref',\n type: collections.Type.MULTI_REFERENCE,\n typeMetadata: {\n multiReference: {\n referencingFieldKey: 'someExistingKey',\n referencedCollectionId: 'other-collection',\n },\n },\n });\n\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([sourceField]),\n );\n\n await actions.duplicateField!('multiRef');\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(\n payload.field.typeMetadata?.multiReference?.referencingFieldKey,\n ).toBeUndefined();\n expect(\n payload.field.typeMetadata?.multiReference?.referencedCollectionId,\n ).toBe('other-collection');\n });\n\n it('appends a numeric suffix when the generated key collides with an existing field', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({ key: 'sourceField', displayName: 'Source Field' }),\n makeField({ key: 'sourceFieldCopy' }),\n ]),\n );\n\n await actions.duplicateField!('sourceField');\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field.key).not.toBe('sourceField');\n expect(payload.field.key).not.toBe('sourceFieldCopy');\n });\n\n it('throws when the source field is not found', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await expect(actions.duplicateField!('missing')).rejects.toThrow(\n 'Field missing not found',\n );\n expect(createDataCollectionField).not.toHaveBeenCalled();\n });\n });\n\n describe('duplicateFieldWithContent', () => {\n it('creates the cloned field, kicks off a COPY_FIELD_DATA task, and waits for completion', async () => {\n createTask.mockResolvedValue({ _id: 'task-1' });\n getTask.mockResolvedValue({ _id: 'task-1', status: 'COMPLETED' });\n\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({ key: 'sourceField', displayName: 'Source Field' }),\n ]),\n );\n\n await actions.duplicateFieldWithContent!('sourceField');\n\n expect(createDataCollectionField).toHaveBeenCalledTimes(1);\n const [, payload] = createDataCollectionField.mock.calls[0];\n const targetFieldKey = payload.field.key;\n\n expect(createTask).toHaveBeenCalledTimes(1);\n expect(createTask).toHaveBeenCalledWith({\n type: 'COPY_FIELD_DATA',\n copyFieldDataOptions: {\n dataCollectionId: COLLECTION_ID,\n sourceFieldKey: 'sourceField',\n targetFieldKey,\n },\n });\n expect(getTask).toHaveBeenCalledWith('task-1');\n });\n\n it('throws when the copy task reports FAILED, surfacing the failure code and description', async () => {\n createTask.mockResolvedValue({ _id: 'task-2' });\n getTask.mockResolvedValue({\n _id: 'task-2',\n status: 'FAILED',\n failures: [{ code: 'INTERNAL', description: 'Copy boom' }],\n });\n\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField()]),\n );\n\n await expect(\n actions.duplicateFieldWithContent!('sourceField'),\n ).rejects.toThrow('INTERNAL: Copy boom');\n });\n\n it('throws when the source field is not found and never creates a task', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await expect(\n actions.duplicateFieldWithContent!('missing'),\n ).rejects.toThrow('Field missing not found');\n expect(createDataCollectionField).not.toHaveBeenCalled();\n expect(createTask).not.toHaveBeenCalled();\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_data","require","_createCmsFieldActions","jest","mock","actual","requireActual","collections","createDataCollectionField","fn","patchDataCollectionField","deleteDataCollectionField","patchDataCollection","updateDataCollection","tasks","createTask","getTask","COLLECTION_ID","makeField","overrides","key","displayName","type","Type","TEXT","systemField","encrypted","makeCollection","fields","_id","makePatternsField","base","id","describe","beforeEach","clearAllMocks","mockResolvedValue","dataCollection","mockImplementation","it","actions","createCmsFieldActions","addField","calledCollectionId","payload","calls","expect","toBe","field","toMatchObject","required","toBeTruthy","not","isPii","helpText","description","validation","numberRange","min","max","NUMBER","toEqual","toBeUndefined","stringLengthRange","minLength","maxLength","rejects","toThrow","toHaveBeenCalled","existing","addFields","toHaveBeenCalledTimes","Object","keys","color","editField","toHaveBeenCalledWith","patch","toHaveProperty","renameField","deleteField","fieldKey","makePrimary","displayField","duplicateField","capabilities","sortable","queryOperators","QueryOperator","EQ","_payload$field$typeMe","_payload$field$typeMe2","sourceField","MULTI_REFERENCE","typeMetadata","multiReference","referencingFieldKey","referencedCollectionId","status","duplicateFieldWithContent","targetFieldKey","copyFieldDataOptions","dataCollectionId","sourceFieldKey","failures","code"],"sources":["../../../../src/adapter/__tests__/cmsFieldActions.spec.ts"],"sourcesContent":["import { collections, tasks } from '@wix/data';\nimport type { Field } from '@wix/patterns';\nimport { createCmsFieldActions } from '../createCmsFieldActions';\n\njest.mock('@wix/data', () => {\n const actual = jest.requireActual('@wix/data');\n return {\n ...actual,\n collections: {\n ...actual.collections,\n createDataCollectionField: jest.fn(),\n patchDataCollectionField: jest.fn(),\n deleteDataCollectionField: jest.fn(),\n patchDataCollection: jest.fn(),\n updateDataCollection: jest.fn(),\n },\n tasks: {\n ...actual.tasks,\n createTask: jest.fn(),\n getTask: jest.fn(),\n },\n };\n});\n\n// Typed accessors — the @wix/data SDK exposes overloaded callable types\n// (MaybeContext<...>), and jest.Mocked<typeof collections> resolves to the\n// HttpClient-form overload, which makes mockResolvedValue/mock.calls unusable.\n// Re-typing each mock with the call shape the adapter uses unblocks both.\nconst createDataCollectionField =\n collections.createDataCollectionField as unknown as jest.Mock<\n Promise<{ dataCollection: collections.DataCollection }>,\n [collectionId: string, options: { field: collections.Field }]\n >;\nconst patchDataCollectionField =\n collections.patchDataCollectionField as unknown as jest.Mock<\n Promise<{ dataCollection: collections.DataCollection }>,\n [collectionId: string, field: collections.Field]\n >;\nconst deleteDataCollectionField =\n collections.deleteDataCollectionField as unknown as jest.Mock<\n Promise<{ dataCollection: collections.DataCollection }>,\n [collectionId: string, options: { fieldKey: string }]\n >;\nconst patchDataCollection =\n collections.patchDataCollection as unknown as jest.Mock<\n Promise<{ dataCollection: collections.DataCollection }>,\n [collectionId: string, dataCollection: collections.PatchDataCollection]\n >;\n// updateDataCollection resolves with the updated collection directly (not\n// wrapped in `{ dataCollection }`, unlike the field mutations).\nconst updateDataCollection =\n collections.updateDataCollection as unknown as jest.Mock<\n Promise<collections.DataCollection>,\n [dataCollection: collections.DataCollection]\n >;\n\ninterface CopyTaskState {\n _id: string;\n status: 'NEW' | 'RUNNING' | 'COMPLETED' | 'FAILED';\n failures?: { code?: string; description?: string }[];\n}\n\nconst createTask = tasks.createTask as unknown as jest.Mock<\n Promise<{ _id: string }>,\n [task: { type: string; copyFieldDataOptions: unknown }]\n>;\nconst getTask = tasks.getTask as unknown as jest.Mock<\n Promise<CopyTaskState>,\n [taskId: string]\n>;\n\nconst COLLECTION_ID = 'collection-1';\n\nconst makeField = (\n overrides: Partial<collections.Field> = {},\n): collections.Field => ({\n key: 'sourceField',\n displayName: 'Source Field',\n type: collections.Type.TEXT,\n systemField: false,\n encrypted: false,\n ...overrides,\n});\n\nconst makeCollection = (\n fields: collections.Field[],\n): collections.DataCollection => ({ _id: COLLECTION_ID, fields });\n\nconst makePatternsField = (overrides: Partial<Field> = {}): Field => {\n const base: Field = {\n id: 'ignored-by-addField',\n displayName: 'New Field',\n type: 'SHORT_TEXT',\n };\n return { ...base, ...overrides } as Field;\n};\n\ndescribe('createCmsFieldActions', () => {\n beforeEach(() => {\n jest.clearAllMocks();\n createDataCollectionField.mockResolvedValue({\n dataCollection: makeCollection([]),\n });\n deleteDataCollectionField.mockResolvedValue({\n dataCollection: makeCollection([]),\n });\n patchDataCollection.mockResolvedValue({\n dataCollection: makeCollection([]),\n });\n patchDataCollectionField.mockResolvedValue({\n dataCollection: makeCollection([]),\n });\n updateDataCollection.mockImplementation(\n async (dataCollection) => dataCollection,\n );\n });\n\n describe('addField', () => {\n it('maps the patterns field type to the CMS type and derives the key from displayName', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await actions.addField!(\n makePatternsField({ displayName: 'My New Field' }),\n );\n\n const [calledCollectionId, payload] =\n createDataCollectionField.mock.calls[0];\n expect(calledCollectionId).toBe(COLLECTION_ID);\n expect(payload.field).toMatchObject({\n displayName: 'My New Field',\n type: collections.Type.TEXT,\n required: false,\n });\n expect(payload.field.key).toBeTruthy();\n });\n\n it('appends a numeric suffix when the generated key collides with an existing field', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField({ key: 'newField' })]),\n );\n\n await actions.addField!(makePatternsField({ displayName: 'New Field' }));\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field.key).not.toBe('newField');\n });\n\n it('sets encrypted when isPii is true and description from helpText', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await actions.addField!(\n makePatternsField({ isPii: true, helpText: 'Some hint' }),\n );\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field.encrypted).toBe(true);\n expect(payload.field.description).toBe('Some hint');\n });\n\n it('passes numberRange only when the field type is NUMBER', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await actions.addField!(\n makePatternsField({\n type: 'NUMBER',\n validation: { required: false, numberRange: { min: 0, max: 10 } },\n }),\n );\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field.type).toBe(collections.Type.NUMBER);\n expect(payload.field.numberRange).toEqual({ min: 0, max: 10 });\n });\n\n it('ignores numberRange when the field type is not NUMBER', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await actions.addField!(\n makePatternsField({\n type: 'SHORT_TEXT',\n validation: { required: false, numberRange: { min: 0, max: 10 } },\n }),\n );\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field.numberRange).toBeUndefined();\n });\n\n it('passes stringLengthRange only when the field type is SHORT_TEXT', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await actions.addField!(\n makePatternsField({\n type: 'SHORT_TEXT',\n validation: {\n required: false,\n stringLengthRange: { minLength: 1, maxLength: 50 },\n },\n }),\n );\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field.stringLengthRange).toEqual({\n minLength: 1,\n maxLength: 50,\n });\n });\n\n it('throws when the patterns type has no CMS mapping', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await expect(\n actions.addField!(makePatternsField({ type: 'IMAGE' })),\n ).rejects.toThrow('Field type IMAGE not supported yet');\n expect(createDataCollectionField).not.toHaveBeenCalled();\n });\n\n it('uses validation.required when provided', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await actions.addField!(\n makePatternsField({ validation: { required: true } }),\n );\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field.required).toBe(true);\n });\n });\n\n describe('addFields', () => {\n it('appends all new fields in one updateDataCollection call, keyed by field.id, preserving existing fields', async () => {\n const existing = makeField({ key: 'name', displayName: 'Name' });\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([existing]),\n );\n\n await actions.addFields!([\n makePatternsField({\n id: 'color',\n displayName: 'Color',\n type: 'SHORT_TEXT',\n }),\n makePatternsField({\n id: 'count',\n displayName: 'Count',\n type: 'NUMBER',\n }),\n ]);\n\n expect(updateDataCollection).toHaveBeenCalledTimes(1);\n const [dataCollection] = updateDataCollection.mock.calls[0];\n expect(dataCollection._id).toBe(COLLECTION_ID);\n // Existing field kept; new fields appended under their given ids as keys.\n expect(dataCollection.fields).toEqual([\n existing,\n {\n key: 'color',\n displayName: 'Color',\n type: collections.Type.TEXT,\n required: false,\n },\n {\n key: 'count',\n displayName: 'Count',\n type: collections.Type.NUMBER,\n required: false,\n },\n ]);\n expect(createDataCollectionField).not.toHaveBeenCalled();\n });\n\n it('resolves with the full updated fields map (existing + added), keyed by field key', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField({ key: 'name', displayName: 'Name' })]),\n );\n\n const fields = await actions.addFields!([\n makePatternsField({\n id: 'color',\n displayName: 'Color',\n type: 'SHORT_TEXT',\n }),\n ]);\n\n expect(Object.keys(fields)).toEqual(['name', 'color']);\n expect(fields.color).toMatchObject({ id: 'color', displayName: 'Color' });\n });\n\n it('throws before any write when a field type has no CMS mapping', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await expect(\n actions.addFields!([makePatternsField({ id: 'pic', type: 'IMAGE' })]),\n ).rejects.toThrow('Field type IMAGE not supported yet');\n expect(updateDataCollection).not.toHaveBeenCalled();\n });\n\n it('throws when the collection cannot be read', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () => null);\n\n await expect(\n actions.addFields!([makePatternsField({ id: 'color' })]),\n ).rejects.toThrow(`Collection ${COLLECTION_ID} not found`);\n expect(updateDataCollection).not.toHaveBeenCalled();\n });\n });\n\n describe('editField', () => {\n it('patches only displayName when only displayName is provided', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField({ key: 'name' })]),\n );\n\n await actions.editField!('name', { displayName: 'Renamed' });\n\n expect(patchDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {\n key: 'name',\n displayName: 'Renamed',\n });\n });\n\n it('maps isPii to encrypted and helpText to description', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField({ key: 'name' })]),\n );\n\n await actions.editField!('name', { isPii: true, helpText: 'hint' });\n\n expect(patchDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {\n key: 'name',\n encrypted: true,\n description: 'hint',\n });\n });\n\n it('includes numberRange in the patch only when the source CMS field is NUMBER', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({ key: 'age', type: collections.Type.NUMBER }),\n ]),\n );\n\n await actions.editField!('age', {\n validation: { required: true, numberRange: { min: 0, max: 100 } },\n });\n\n expect(patchDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {\n key: 'age',\n required: true,\n numberRange: { min: 0, max: 100 },\n });\n });\n\n it('omits numberRange when the source CMS field is not NUMBER', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({ key: 'name', type: collections.Type.TEXT }),\n ]),\n );\n\n await actions.editField!('name', {\n validation: { required: true, numberRange: { min: 0, max: 100 } },\n });\n\n const [, patch] = patchDataCollectionField.mock.calls[0];\n expect(patch).not.toHaveProperty('numberRange');\n expect(patch).toMatchObject({ key: 'name', required: true });\n });\n\n it('includes stringLengthRange in the patch only when the source CMS field is TEXT', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({ key: 'name', type: collections.Type.TEXT }),\n ]),\n );\n\n await actions.editField!('name', {\n validation: {\n required: false,\n stringLengthRange: { minLength: 1, maxLength: 30 },\n },\n });\n\n expect(patchDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {\n key: 'name',\n required: false,\n stringLengthRange: { minLength: 1, maxLength: 30 },\n });\n });\n\n it('omits stringLengthRange when the source CMS field is not TEXT', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({ key: 'age', type: collections.Type.NUMBER }),\n ]),\n );\n\n await actions.editField!('age', {\n validation: {\n required: false,\n stringLengthRange: { minLength: 1, maxLength: 30 },\n },\n });\n\n const [, patch] = patchDataCollectionField.mock.calls[0];\n expect(patch).not.toHaveProperty('stringLengthRange');\n });\n });\n\n describe('renameField', () => {\n it('patches the field displayName with the new name', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField({ key: 'name' })]),\n );\n\n await actions.renameField!('name', 'Renamed');\n\n expect(patchDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {\n key: 'name',\n displayName: 'Renamed',\n });\n });\n });\n\n describe('deleteField', () => {\n it('calls collections.deleteDataCollectionField with the field key', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField({ key: 'toDelete' })]),\n );\n\n await actions.deleteField!('toDelete');\n\n expect(deleteDataCollectionField).toHaveBeenCalledTimes(1);\n expect(deleteDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {\n fieldKey: 'toDelete',\n });\n });\n });\n\n describe('makePrimary', () => {\n it('patches the collection displayField with the given field id', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField({ key: 'newPrimary' })]),\n );\n\n await actions.makePrimary!('newPrimary');\n\n expect(patchDataCollection).toHaveBeenCalledTimes(1);\n expect(patchDataCollection).toHaveBeenCalledWith(COLLECTION_ID, {\n displayField: 'newPrimary',\n });\n });\n });\n\n describe('duplicateField', () => {\n it('clones the source field with a \"(Copy)\" suffix and a fresh key', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({ key: 'sourceField', displayName: 'Source Field' }),\n ]),\n );\n\n await actions.duplicateField!('sourceField');\n\n expect(createDataCollectionField).toHaveBeenCalledTimes(1);\n const [calledCollectionId, payload] =\n createDataCollectionField.mock.calls[0];\n expect(calledCollectionId).toBe(COLLECTION_ID);\n expect(payload.field).toMatchObject({\n displayName: 'Source Field (Copy)',\n type: collections.Type.TEXT,\n });\n expect(payload.field.key).not.toBe('sourceField');\n });\n\n it('strips systemField and capabilities from the cloned field', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({\n systemField: true,\n capabilities: {\n sortable: true,\n queryOperators: [collections.QueryOperator.EQ],\n },\n }),\n ]),\n );\n\n await actions.duplicateField!('sourceField');\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field).not.toHaveProperty('systemField');\n expect(payload.field).not.toHaveProperty('capabilities');\n });\n\n it('clears typeMetadata.multiReference.referencingFieldKey on clone', async () => {\n const sourceField: collections.Field = makeField({\n key: 'multiRef',\n displayName: 'Multi Ref',\n type: collections.Type.MULTI_REFERENCE,\n typeMetadata: {\n multiReference: {\n referencingFieldKey: 'someExistingKey',\n referencedCollectionId: 'other-collection',\n },\n },\n });\n\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([sourceField]),\n );\n\n await actions.duplicateField!('multiRef');\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(\n payload.field.typeMetadata?.multiReference?.referencingFieldKey,\n ).toBeUndefined();\n expect(\n payload.field.typeMetadata?.multiReference?.referencedCollectionId,\n ).toBe('other-collection');\n });\n\n it('appends a numeric suffix when the generated key collides with an existing field', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({ key: 'sourceField', displayName: 'Source Field' }),\n makeField({ key: 'sourceFieldCopy' }),\n ]),\n );\n\n await actions.duplicateField!('sourceField');\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field.key).not.toBe('sourceField');\n expect(payload.field.key).not.toBe('sourceFieldCopy');\n });\n\n it('throws when the source field is not found', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await expect(actions.duplicateField!('missing')).rejects.toThrow(\n 'Field missing not found',\n );\n expect(createDataCollectionField).not.toHaveBeenCalled();\n });\n });\n\n describe('duplicateFieldWithContent', () => {\n it('creates the cloned field, kicks off a COPY_FIELD_DATA task, and waits for completion', async () => {\n createTask.mockResolvedValue({ _id: 'task-1' });\n getTask.mockResolvedValue({ _id: 'task-1', status: 'COMPLETED' });\n\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({ key: 'sourceField', displayName: 'Source Field' }),\n ]),\n );\n\n await actions.duplicateFieldWithContent!('sourceField');\n\n expect(createDataCollectionField).toHaveBeenCalledTimes(1);\n const [, payload] = createDataCollectionField.mock.calls[0];\n const targetFieldKey = payload.field.key;\n\n expect(createTask).toHaveBeenCalledTimes(1);\n expect(createTask).toHaveBeenCalledWith({\n type: 'COPY_FIELD_DATA',\n copyFieldDataOptions: {\n dataCollectionId: COLLECTION_ID,\n sourceFieldKey: 'sourceField',\n targetFieldKey,\n },\n });\n expect(getTask).toHaveBeenCalledWith('task-1');\n });\n\n it('throws when the copy task reports FAILED, surfacing the failure code and description', async () => {\n createTask.mockResolvedValue({ _id: 'task-2' });\n getTask.mockResolvedValue({\n _id: 'task-2',\n status: 'FAILED',\n failures: [{ code: 'INTERNAL', description: 'Copy boom' }],\n });\n\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField()]),\n );\n\n await expect(\n actions.duplicateFieldWithContent!('sourceField'),\n ).rejects.toThrow('INTERNAL: Copy boom');\n });\n\n it('throws when the source field is not found and never creates a task', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await expect(\n actions.duplicateFieldWithContent!('missing'),\n ).rejects.toThrow('Field missing not found');\n expect(createDataCollectionField).not.toHaveBeenCalled();\n expect(createTask).not.toHaveBeenCalled();\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -194,6 +194,100 @@ describe('createCmsBackend', () => {
194
194
  expect(result).toBe(entity);
195
195
  });
196
196
  });
197
+
198
+ // The editors keep a reference as `{ _id, <displayField>, <imageField> }` so
199
+ // they can render a label without refetching, and the service takes that shape
200
+ // as-is — the write is not reshaped (parity with auto-patterns). A
201
+ // MULTI_REFERENCE isn't stored on the item, so it also goes through
202
+ // `replaceReferences`.
203
+ describe('reference values on write', () => {
204
+ beforeEach(() => {
205
+ update.mockResolvedValue(undefined);
206
+ insert.mockResolvedValue({
207
+ _id: 'new-1'
208
+ });
209
+ });
210
+ const payload = () => update.mock.calls[0][1];
211
+ it('sends a single reference exactly as the editor wrote it', async () => {
212
+ const backend = (0, _createCmsBackend.createCmsBackend)(COLLECTION_ID, fieldsWithRefs);
213
+ const author = {
214
+ _id: 'a1',
215
+ title_fld: 'Nitzan Listman',
216
+ image_fld: 'wix:image://v1/abc/x.png'
217
+ };
218
+ await backend.update({
219
+ _id: 'e1',
220
+ title: 'Luna',
221
+ author
222
+ });
223
+ expect(payload()).toEqual({
224
+ _id: 'e1',
225
+ title: 'Luna',
226
+ author
227
+ });
228
+ });
229
+ it('keeps a multi-reference in the payload and links it', async () => {
230
+ const backend = (0, _createCmsBackend.createCmsBackend)(COLLECTION_ID, fieldsWithRefs);
231
+ const tags = [{
232
+ _id: 't1',
233
+ name: 'One'
234
+ }];
235
+ await backend.update({
236
+ _id: 'e1',
237
+ title: 'Luna',
238
+ tags
239
+ });
240
+ expect(payload()).toEqual({
241
+ _id: 'e1',
242
+ title: 'Luna',
243
+ tags
244
+ });
245
+ expect(replaceReferences).toHaveBeenCalledWith(COLLECTION_ID, 'tags', 'e1', ['t1']);
246
+ });
247
+
248
+ // Removing the last chip writes an empty value; the references have to go.
249
+ it('unlinks every reference when a multi-reference is cleared', async () => {
250
+ const backend = (0, _createCmsBackend.createCmsBackend)(COLLECTION_ID, fieldsWithRefs);
251
+ await backend.update({
252
+ _id: 'e1',
253
+ tags: null
254
+ });
255
+ expect(replaceReferences).toHaveBeenCalledWith(COLLECTION_ID, 'tags', 'e1', []);
256
+ });
257
+ it('leaves a multi-reference the entity does not carry untouched', async () => {
258
+ const backend = (0, _createCmsBackend.createCmsBackend)(COLLECTION_ID, fieldsWithRefs);
259
+ await backend.update({
260
+ _id: 'e1',
261
+ title: 'Luna'
262
+ });
263
+ expect(replaceReferences).not.toHaveBeenCalled();
264
+ });
265
+ it('accepts multi-reference values given as bare ids', async () => {
266
+ const backend = (0, _createCmsBackend.createCmsBackend)(COLLECTION_ID, fieldsWithRefs);
267
+ await backend.update({
268
+ _id: 'e1',
269
+ tags: ['t1', 't2']
270
+ });
271
+ expect(replaceReferences).toHaveBeenCalledWith(COLLECTION_ID, 'tags', 'e1', ['t1', 't2']);
272
+ });
273
+ it('sends create the same way, then links its multi-references', async () => {
274
+ const backend = (0, _createCmsBackend.createCmsBackend)(COLLECTION_ID, fieldsWithRefs);
275
+ const entity = {
276
+ title: 'Luna',
277
+ author: {
278
+ _id: 'a1',
279
+ title_fld: 'Nitzan Listman'
280
+ },
281
+ tags: [{
282
+ _id: 't1',
283
+ name: 'One'
284
+ }]
285
+ };
286
+ await backend.create(entity);
287
+ expect(insert).toHaveBeenCalledWith(COLLECTION_ID, entity);
288
+ expect(replaceReferences).toHaveBeenCalledWith(COLLECTION_ID, 'tags', 'new-1', ['t1']);
289
+ });
290
+ });
197
291
  describe('delete / bulkDelete', () => {
198
292
  it('removes a single entity by id', async () => {
199
293
  remove.mockResolvedValue(undefined);
@@ -257,7 +351,10 @@ describe('createCmsBackend', () => {
257
351
  // 2 + 1 === 3 → no next page.
258
352
  expect(result.hasNext).toBe(false);
259
353
  });
260
- it('includes only reference fields that are also searchable', async () => {
354
+
355
+ // Rows have to arrive with their referenced items expanded: the reference
356
+ // cells read the label off the value, so a bare id renders blank.
357
+ it('expands every reference field, whether or not it is searchable', async () => {
261
358
  mockFindResult = {
262
359
  items: [],
263
360
  totalCount: 0
@@ -270,34 +367,30 @@ describe('createCmsBackend', () => {
270
367
  offset: 0,
271
368
  limit: 10
272
369
  }, {
273
- searchableFieldIds: ['title', 'author']
370
+ searchableFieldIds: ['title']
274
371
  });
275
-
276
- // 'author' is a reference and searchable → included; 'tags' is not searchable.
277
- expect(queryChain.include).toHaveBeenCalledWith('author');
372
+ expect(queryChain.include).toHaveBeenCalledWith('author', 'tags');
278
373
  });
279
- it('does not call include when no reference field is searchable', async () => {
374
+ it('expands reference fields when called with no options', async () => {
280
375
  mockFindResult = {
281
376
  items: [],
282
377
  totalCount: 0
283
378
  };
284
379
  const backend = (0, _createCmsBackend.createCmsBackend)(COLLECTION_ID, fieldsWithRefs);
285
- await findWithOptions(backend.find, {
380
+ await backend.find({
286
381
  offset: 0,
287
382
  limit: 10
288
- }, {
289
- searchableFieldIds: ['title']
290
383
  });
291
- expect(queryChain.include).not.toHaveBeenCalled();
384
+ expect(queryChain.include).toHaveBeenCalledWith('author', 'tags');
292
385
  });
293
- it('includes no reference fields when called with no options (inert default)', async () => {
386
+ it('does not call include for a schema with no reference fields', async () => {
294
387
  mockFindResult = {
295
388
  items: [],
296
389
  totalCount: 0
297
390
  };
298
- const backend = (0, _createCmsBackend.createCmsBackend)(COLLECTION_ID, fieldsWithRefs);
299
-
300
- // No options → default searchableFieldIds = [] → no refs included, no search.
391
+ const backend = (0, _createCmsBackend.createCmsBackend)(COLLECTION_ID, {
392
+ title: fieldsWithRefs.title
393
+ });
301
394
  await backend.find({
302
395
  offset: 0,
303
396
  limit: 10
@@ -1 +1 @@
1
- {"version":3,"names":["_data","require","_createCmsBackend","jest","mock","errorHandler","withErrorHandler","fn","mockFindResult","items","totalCount","queryChain","forEach","m","find","Promise","resolve","filterChain","__chains","query","filter","insert","update","remove","bulkRemove","bulkInsert","replaceReferences","backups","queryMock","COLLECTION_ID","fieldsWithRefs","title","id","type","displayName","capabilities","supportedQueryOperators","sortable","author","referenceMetadata","referencedCollectionId","tags","findWithOptions","options","describe","beforeEach","clearAllMocks","it","_id","backend","createCmsBackend","entity","get","expect","toHaveBeenCalledWith","eq","toEqual","include","rejects","toThrow","mockResolvedValue","result","create","undefined","toBe","delete","bulkDelete","offset","limit","skip","returnTotalCount","total","hasNext","searchableFieldIds","not","toHaveBeenCalled","filterableFields","price","done","filters","from","to","ge","le","sort","fieldName","order","ascending","descending","search","contains","and","inserted","updated","errors","originalIndex","message","code","a","succeeded","failed","rowIndex"],"sources":["../../../../src/adapter/__tests__/createCmsBackend.spec.ts"],"sourcesContent":["import { items } from '@wix/data';\nimport type { Schema } from '@wix/bex-core';\nimport { createCmsBackend } from '../createCmsBackend';\n\n// `bulkInsert`/`backup` wrap calls in errorHandler.withErrorHandler, which needs an\n// initialized Wix SDK context. In a pure-function unit test there is none, so we\n// stub the wrapper to just invoke its callback (the mapping logic is what we assert).\njest.mock('@wix/essentials', () => ({\n errorHandler: {\n withErrorHandler: (fn: () => unknown) => fn(),\n },\n}));\n\n// A chainable query stub whose terminal `.find()` resolves to a configurable\n// result. `mockFindResult` is reassigned per-test before the backend call.\n// `mock`-prefixed names are the only out-of-scope refs jest.mock() factories allow.\nlet mockFindResult: { items: unknown[]; totalCount?: number } = {\n items: [],\n totalCount: 0,\n};\n\njest.mock('@wix/data', () => {\n const queryChain: Record<string, jest.Mock> = {};\n [\n 'eq',\n 'include',\n 'skip',\n 'limit',\n 'and',\n 'ge',\n 'le',\n 'ascending',\n 'descending',\n ].forEach((m) => {\n queryChain[m] = jest.fn(() => queryChain);\n });\n queryChain.find = jest.fn(() => Promise.resolve(mockFindResult));\n\n const filterChain: Record<string, jest.Mock> = {};\n ['eq', 'contains', 'or', 'and', 'not'].forEach((m) => {\n filterChain[m] = jest.fn(() => filterChain);\n });\n\n return {\n __chains: { queryChain, filterChain },\n items: {\n query: jest.fn(() => queryChain),\n filter: jest.fn(() => filterChain),\n insert: jest.fn(),\n update: jest.fn(),\n remove: jest.fn(),\n bulkRemove: jest.fn(),\n bulkInsert: jest.fn(),\n replaceReferences: jest.fn(),\n },\n backups: {},\n };\n});\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst { queryChain, filterChain } = (\n require('@wix/data') as {\n __chains: {\n queryChain: Record<string, jest.Mock>;\n filterChain: Record<string, jest.Mock>;\n };\n }\n).__chains;\n\nconst queryMock = items.query as unknown as jest.Mock;\nconst insert = items.insert as unknown as jest.Mock;\nconst update = items.update as unknown as jest.Mock;\nconst remove = items.remove as unknown as jest.Mock;\nconst bulkRemove = items.bulkRemove as unknown as jest.Mock;\nconst bulkInsert = items.bulkInsert as unknown as jest.Mock;\nconst replaceReferences = items.replaceReferences as unknown as jest.Mock;\n\nconst COLLECTION_ID = 'collection-1';\n\nconst fieldsWithRefs: Schema['fields'] = {\n title: {\n id: 'title',\n type: 'SHORT_TEXT',\n displayName: 'Title',\n capabilities: { supportedQueryOperators: [], sortable: true },\n },\n author: {\n id: 'author',\n type: 'REFERENCE',\n displayName: 'Author',\n referenceMetadata: { referencedCollectionId: 'authors' },\n capabilities: { supportedQueryOperators: [], sortable: false },\n },\n tags: {\n id: 'tags',\n type: 'MULTI_REFERENCE',\n displayName: 'Tags',\n referenceMetadata: { referencedCollectionId: 'tags-collection' },\n capabilities: { supportedQueryOperators: [], sortable: false },\n },\n};\n\ntype FindOptions = {\n searchableFieldIds?: string[];\n};\n\n/** Calls `backend.find` with the per-call options arg (absent from the erased interface). */\nconst findWithOptions = (\n find: unknown,\n query: Parameters<ReturnType<typeof createCmsBackend>['find']>[0],\n options: FindOptions,\n) =>\n (find as (q: typeof query, o: FindOptions) => Promise<unknown>)(\n query,\n options,\n );\n\ndescribe('createCmsBackend', () => {\n beforeEach(() => {\n jest.clearAllMocks();\n mockFindResult = { items: [], totalCount: 0 };\n });\n\n describe('get', () => {\n it('queries by _id and returns the single matching entity', async () => {\n mockFindResult = { items: [{ _id: 'e1', title: 'Hello' }] };\n const backend = createCmsBackend(COLLECTION_ID, {\n title: fieldsWithRefs.title,\n });\n\n const entity = await backend.get('e1');\n\n expect(queryMock).toHaveBeenCalledWith(COLLECTION_ID);\n expect(queryChain.eq).toHaveBeenCalledWith('_id', 'e1');\n expect(entity).toEqual({ _id: 'e1', title: 'Hello' });\n });\n\n it('includes reference fields when the schema has them', async () => {\n mockFindResult = { items: [{ _id: 'e1' }] };\n const backend = createCmsBackend(COLLECTION_ID, fieldsWithRefs);\n\n await backend.get('e1');\n\n expect(queryChain.include).toHaveBeenCalledWith('author', 'tags');\n });\n\n it('throws when no entity is found', async () => {\n mockFindResult = { items: [] };\n const backend = createCmsBackend(COLLECTION_ID, {\n title: fieldsWithRefs.title,\n });\n\n await expect(backend.get('missing')).rejects.toThrow(\n 'Entity not found: missing',\n );\n });\n });\n\n describe('create', () => {\n it('inserts the entity and returns it with the created _id', async () => {\n insert.mockResolvedValue({ _id: 'new-1' });\n const backend = createCmsBackend(COLLECTION_ID, {\n title: fieldsWithRefs.title,\n });\n\n const result = await backend.create({ title: 'Hi' } as never);\n\n expect(insert).toHaveBeenCalledWith(COLLECTION_ID, { title: 'Hi' });\n expect(result).toEqual({ title: 'Hi', _id: 'new-1' });\n });\n\n it('syncs multi-reference fields via replaceReferences', async () => {\n insert.mockResolvedValue({ _id: 'new-1' });\n const backend = createCmsBackend(COLLECTION_ID, fieldsWithRefs);\n\n await backend.create({\n title: 'Hi',\n tags: [{ _id: 't1' }, { _id: 't2' }],\n } as never);\n\n expect(replaceReferences).toHaveBeenCalledWith(\n COLLECTION_ID,\n 'tags',\n 'new-1',\n ['t1', 't2'],\n );\n });\n });\n\n describe('update', () => {\n it('updates the entity and returns it', async () => {\n update.mockResolvedValue(undefined);\n const backend = createCmsBackend(COLLECTION_ID, {\n title: fieldsWithRefs.title,\n });\n\n const entity = { _id: 'e1', title: 'Edited' };\n const result = await backend.update(entity as never);\n\n expect(update).toHaveBeenCalledWith(COLLECTION_ID, entity);\n expect(result).toBe(entity);\n });\n });\n\n describe('delete / bulkDelete', () => {\n it('removes a single entity by id', async () => {\n remove.mockResolvedValue(undefined);\n const backend = createCmsBackend(COLLECTION_ID, {});\n\n await backend.delete('e1');\n\n expect(remove).toHaveBeenCalledWith(COLLECTION_ID, 'e1');\n });\n\n it('bulk-removes entities by ids', async () => {\n bulkRemove.mockResolvedValue(undefined);\n const backend = createCmsBackend(COLLECTION_ID, {});\n\n await backend.bulkDelete(['e1', 'e2']);\n\n expect(bulkRemove).toHaveBeenCalledWith(COLLECTION_ID, ['e1', 'e2']);\n });\n });\n\n describe('find', () => {\n it('applies skip/limit and computes total and hasNext', async () => {\n mockFindResult = {\n items: [{ _id: 'a' }, { _id: 'b' }],\n totalCount: 5,\n };\n const backend = createCmsBackend(COLLECTION_ID, {\n title: fieldsWithRefs.title,\n });\n\n const result = await backend.find({\n offset: 0,\n limit: 2,\n } as never);\n\n expect(queryChain.skip).toHaveBeenCalledWith(0);\n expect(queryChain.limit).toHaveBeenCalledWith(2);\n expect(queryChain.find).toHaveBeenCalledWith({ returnTotalCount: true });\n expect(result.items).toEqual([{ _id: 'a' }, { _id: 'b' }]);\n expect(result.total).toBe(5);\n // 0 + 2 < 5 → there is a next page.\n expect(result.hasNext).toBe(true);\n });\n\n it('reports hasNext false on the last page', async () => {\n mockFindResult = {\n items: [{ _id: 'e' }],\n totalCount: 3,\n };\n const backend = createCmsBackend(COLLECTION_ID, {\n title: fieldsWithRefs.title,\n });\n\n const result = await backend.find({ offset: 2, limit: 2 } as never);\n\n // 2 + 1 === 3 → no next page.\n expect(result.hasNext).toBe(false);\n });\n\n it('includes only reference fields that are also searchable', async () => {\n mockFindResult = { items: [], totalCount: 0 };\n const backend = createCmsBackend(COLLECTION_ID, fieldsWithRefs);\n\n // The per-call `options` arg is part of the concrete `createCmsBackend.find`\n // but not the erased `CollectionBackend.find` contract — cast to reach it.\n await findWithOptions(backend.find, { offset: 0, limit: 10 } as never, {\n searchableFieldIds: ['title', 'author'],\n });\n\n // 'author' is a reference and searchable → included; 'tags' is not searchable.\n expect(queryChain.include).toHaveBeenCalledWith('author');\n });\n\n it('does not call include when no reference field is searchable', async () => {\n mockFindResult = { items: [], totalCount: 0 };\n const backend = createCmsBackend(COLLECTION_ID, fieldsWithRefs);\n\n await findWithOptions(backend.find, { offset: 0, limit: 10 } as never, {\n searchableFieldIds: ['title'],\n });\n\n expect(queryChain.include).not.toHaveBeenCalled();\n });\n\n it('includes no reference fields when called with no options (inert default)', async () => {\n mockFindResult = { items: [], totalCount: 0 };\n const backend = createCmsBackend(COLLECTION_ID, fieldsWithRefs);\n\n // No options → default searchableFieldIds = [] → no refs included, no search.\n await backend.find({ offset: 0, limit: 10 } as never);\n\n expect(queryChain.include).not.toHaveBeenCalled();\n });\n\n // The cases below mirror auto-patterns' end-to-end coverage: the fetch path\n // must actually apply the query's filters/sort/search, not just skip/limit.\n const filterableFields: Schema['fields'] = {\n title: fieldsWithRefs.title,\n price: {\n id: 'price',\n type: 'NUMBER',\n displayName: 'Price',\n capabilities: {\n supportedQueryOperators: ['GTE', 'LTE'],\n sortable: true,\n },\n },\n done: {\n id: 'done',\n type: 'BOOLEAN',\n displayName: 'Done',\n capabilities: { supportedQueryOperators: [], sortable: false },\n },\n };\n\n it('applies a number range filter from the query', async () => {\n const backend = createCmsBackend(COLLECTION_ID, filterableFields);\n\n await findWithOptions(\n backend.find,\n {\n offset: 0,\n limit: 10,\n filters: { price: { from: 10, to: 100 } },\n } as never,\n {},\n );\n\n expect(queryChain.ge).toHaveBeenCalledWith('price', 10);\n expect(queryChain.le).toHaveBeenCalledWith('price', 100);\n });\n\n it('applies a checked boolean filter from the query', async () => {\n const backend = createCmsBackend(COLLECTION_ID, filterableFields);\n\n await findWithOptions(\n backend.find,\n {\n offset: 0,\n limit: 10,\n filters: { done: [{ id: 'checked' }] },\n } as never,\n {},\n );\n\n expect(queryChain.eq).toHaveBeenCalledWith('done', true);\n });\n\n it('applies ascending sort from the query', async () => {\n const backend = createCmsBackend(COLLECTION_ID, filterableFields);\n\n await backend.find({\n offset: 0,\n limit: 10,\n sort: [{ fieldName: 'title', order: 'asc' }],\n } as never);\n\n expect(queryChain.ascending).toHaveBeenCalledWith('title');\n });\n\n it('applies descending sort from the query', async () => {\n const backend = createCmsBackend(COLLECTION_ID, filterableFields);\n\n await backend.find({\n offset: 0,\n limit: 10,\n sort: [{ fieldName: 'title', order: 'desc' }],\n } as never);\n\n expect(queryChain.descending).toHaveBeenCalledWith('title');\n });\n\n it('applies the search term as a contains filter on searchable text fields', async () => {\n const backend = createCmsBackend(COLLECTION_ID, filterableFields);\n\n await findWithOptions(\n backend.find,\n { offset: 0, limit: 10, search: 'hello' } as never,\n { searchableFieldIds: ['title'] },\n );\n\n expect(filterChain.contains).toHaveBeenCalledWith('title', 'hello');\n expect(queryChain.and).toHaveBeenCalledWith(filterChain);\n });\n });\n\n describe('bulkInsert', () => {\n it('maps inserted/updated to succeeded, errors to failed, and surfaces error rows', async () => {\n bulkInsert.mockResolvedValue({\n inserted: 2,\n updated: 1,\n errors: [{ originalIndex: 4, message: 'bad row', code: 'INVALID' }],\n });\n const backend = createCmsBackend(COLLECTION_ID, {});\n\n const result = await backend.bulkInsert!([{ a: 1 }, { a: 2 }] as never);\n\n expect(bulkInsert).toHaveBeenCalledWith(COLLECTION_ID, [\n { a: 1 },\n { a: 2 },\n ]);\n expect(result.succeeded).toBe(3);\n expect(result.failed).toBe(1);\n expect(result.errors).toEqual([\n { rowIndex: 4, message: 'bad row', code: 'INVALID' },\n ]);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_data","require","_createCmsBackend","jest","mock","errorHandler","withErrorHandler","fn","mockFindResult","items","totalCount","queryChain","forEach","m","find","Promise","resolve","filterChain","__chains","query","filter","insert","update","remove","bulkRemove","bulkInsert","replaceReferences","backups","queryMock","COLLECTION_ID","fieldsWithRefs","title","id","type","displayName","capabilities","supportedQueryOperators","sortable","author","referenceMetadata","referencedCollectionId","tags","findWithOptions","options","describe","beforeEach","clearAllMocks","it","_id","backend","createCmsBackend","entity","get","expect","toHaveBeenCalledWith","eq","toEqual","include","rejects","toThrow","mockResolvedValue","result","create","undefined","toBe","payload","calls","title_fld","image_fld","name","not","toHaveBeenCalled","delete","bulkDelete","offset","limit","skip","returnTotalCount","total","hasNext","searchableFieldIds","filterableFields","price","done","filters","from","to","ge","le","sort","fieldName","order","ascending","descending","search","contains","and","inserted","updated","errors","originalIndex","message","code","a","succeeded","failed","rowIndex"],"sources":["../../../../src/adapter/__tests__/createCmsBackend.spec.ts"],"sourcesContent":["import { items } from '@wix/data';\nimport type { Schema } from '@wix/patterns/schema';\nimport { createCmsBackend } from '../createCmsBackend';\n\n// `bulkInsert`/`backup` wrap calls in errorHandler.withErrorHandler, which needs an\n// initialized Wix SDK context. In a pure-function unit test there is none, so we\n// stub the wrapper to just invoke its callback (the mapping logic is what we assert).\njest.mock('@wix/essentials', () => ({\n errorHandler: {\n withErrorHandler: (fn: () => unknown) => fn(),\n },\n}));\n\n// A chainable query stub whose terminal `.find()` resolves to a configurable\n// result. `mockFindResult` is reassigned per-test before the backend call.\n// `mock`-prefixed names are the only out-of-scope refs jest.mock() factories allow.\nlet mockFindResult: { items: unknown[]; totalCount?: number } = {\n items: [],\n totalCount: 0,\n};\n\njest.mock('@wix/data', () => {\n const queryChain: Record<string, jest.Mock> = {};\n [\n 'eq',\n 'include',\n 'skip',\n 'limit',\n 'and',\n 'ge',\n 'le',\n 'ascending',\n 'descending',\n ].forEach((m) => {\n queryChain[m] = jest.fn(() => queryChain);\n });\n queryChain.find = jest.fn(() => Promise.resolve(mockFindResult));\n\n const filterChain: Record<string, jest.Mock> = {};\n ['eq', 'contains', 'or', 'and', 'not'].forEach((m) => {\n filterChain[m] = jest.fn(() => filterChain);\n });\n\n return {\n __chains: { queryChain, filterChain },\n items: {\n query: jest.fn(() => queryChain),\n filter: jest.fn(() => filterChain),\n insert: jest.fn(),\n update: jest.fn(),\n remove: jest.fn(),\n bulkRemove: jest.fn(),\n bulkInsert: jest.fn(),\n replaceReferences: jest.fn(),\n },\n backups: {},\n };\n});\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst { queryChain, filterChain } = (\n require('@wix/data') as {\n __chains: {\n queryChain: Record<string, jest.Mock>;\n filterChain: Record<string, jest.Mock>;\n };\n }\n).__chains;\n\nconst queryMock = items.query as unknown as jest.Mock;\nconst insert = items.insert as unknown as jest.Mock;\nconst update = items.update as unknown as jest.Mock;\nconst remove = items.remove as unknown as jest.Mock;\nconst bulkRemove = items.bulkRemove as unknown as jest.Mock;\nconst bulkInsert = items.bulkInsert as unknown as jest.Mock;\nconst replaceReferences = items.replaceReferences as unknown as jest.Mock;\n\nconst COLLECTION_ID = 'collection-1';\n\nconst fieldsWithRefs: Schema['fields'] = {\n title: {\n id: 'title',\n type: 'SHORT_TEXT',\n displayName: 'Title',\n capabilities: { supportedQueryOperators: [], sortable: true },\n },\n author: {\n id: 'author',\n type: 'REFERENCE',\n displayName: 'Author',\n referenceMetadata: { referencedCollectionId: 'authors' },\n capabilities: { supportedQueryOperators: [], sortable: false },\n },\n tags: {\n id: 'tags',\n type: 'MULTI_REFERENCE',\n displayName: 'Tags',\n referenceMetadata: { referencedCollectionId: 'tags-collection' },\n capabilities: { supportedQueryOperators: [], sortable: false },\n },\n};\n\ntype FindOptions = {\n searchableFieldIds?: string[];\n};\n\n/** Calls `backend.find` with the per-call options arg (absent from the erased interface). */\nconst findWithOptions = (\n find: unknown,\n query: Parameters<ReturnType<typeof createCmsBackend>['find']>[0],\n options: FindOptions,\n) =>\n (find as (q: typeof query, o: FindOptions) => Promise<unknown>)(\n query,\n options,\n );\n\ndescribe('createCmsBackend', () => {\n beforeEach(() => {\n jest.clearAllMocks();\n mockFindResult = { items: [], totalCount: 0 };\n });\n\n describe('get', () => {\n it('queries by _id and returns the single matching entity', async () => {\n mockFindResult = { items: [{ _id: 'e1', title: 'Hello' }] };\n const backend = createCmsBackend(COLLECTION_ID, {\n title: fieldsWithRefs.title,\n });\n\n const entity = await backend.get('e1');\n\n expect(queryMock).toHaveBeenCalledWith(COLLECTION_ID);\n expect(queryChain.eq).toHaveBeenCalledWith('_id', 'e1');\n expect(entity).toEqual({ _id: 'e1', title: 'Hello' });\n });\n\n it('includes reference fields when the schema has them', async () => {\n mockFindResult = { items: [{ _id: 'e1' }] };\n const backend = createCmsBackend(COLLECTION_ID, fieldsWithRefs);\n\n await backend.get('e1');\n\n expect(queryChain.include).toHaveBeenCalledWith('author', 'tags');\n });\n\n it('throws when no entity is found', async () => {\n mockFindResult = { items: [] };\n const backend = createCmsBackend(COLLECTION_ID, {\n title: fieldsWithRefs.title,\n });\n\n await expect(backend.get('missing')).rejects.toThrow(\n 'Entity not found: missing',\n );\n });\n });\n\n describe('create', () => {\n it('inserts the entity and returns it with the created _id', async () => {\n insert.mockResolvedValue({ _id: 'new-1' });\n const backend = createCmsBackend(COLLECTION_ID, {\n title: fieldsWithRefs.title,\n });\n\n const result = await backend.create({ title: 'Hi' } as never);\n\n expect(insert).toHaveBeenCalledWith(COLLECTION_ID, { title: 'Hi' });\n expect(result).toEqual({ title: 'Hi', _id: 'new-1' });\n });\n\n it('syncs multi-reference fields via replaceReferences', async () => {\n insert.mockResolvedValue({ _id: 'new-1' });\n const backend = createCmsBackend(COLLECTION_ID, fieldsWithRefs);\n\n await backend.create({\n title: 'Hi',\n tags: [{ _id: 't1' }, { _id: 't2' }],\n } as never);\n\n expect(replaceReferences).toHaveBeenCalledWith(\n COLLECTION_ID,\n 'tags',\n 'new-1',\n ['t1', 't2'],\n );\n });\n });\n\n describe('update', () => {\n it('updates the entity and returns it', async () => {\n update.mockResolvedValue(undefined);\n const backend = createCmsBackend(COLLECTION_ID, {\n title: fieldsWithRefs.title,\n });\n\n const entity = { _id: 'e1', title: 'Edited' };\n const result = await backend.update(entity as never);\n\n expect(update).toHaveBeenCalledWith(COLLECTION_ID, entity);\n expect(result).toBe(entity);\n });\n });\n\n // The editors keep a reference as `{ _id, <displayField>, <imageField> }` so\n // they can render a label without refetching, and the service takes that shape\n // as-is — the write is not reshaped (parity with auto-patterns). A\n // MULTI_REFERENCE isn't stored on the item, so it also goes through\n // `replaceReferences`.\n describe('reference values on write', () => {\n beforeEach(() => {\n update.mockResolvedValue(undefined);\n insert.mockResolvedValue({ _id: 'new-1' });\n });\n\n const payload = () => update.mock.calls[0][1];\n\n it('sends a single reference exactly as the editor wrote it', async () => {\n const backend = createCmsBackend(COLLECTION_ID, fieldsWithRefs);\n const author = {\n _id: 'a1',\n title_fld: 'Nitzan Listman',\n image_fld: 'wix:image://v1/abc/x.png',\n };\n\n await backend.update({ _id: 'e1', title: 'Luna', author } as never);\n\n expect(payload()).toEqual({ _id: 'e1', title: 'Luna', author });\n });\n\n it('keeps a multi-reference in the payload and links it', async () => {\n const backend = createCmsBackend(COLLECTION_ID, fieldsWithRefs);\n const tags = [{ _id: 't1', name: 'One' }];\n\n await backend.update({ _id: 'e1', title: 'Luna', tags } as never);\n\n expect(payload()).toEqual({ _id: 'e1', title: 'Luna', tags });\n expect(replaceReferences).toHaveBeenCalledWith(\n COLLECTION_ID,\n 'tags',\n 'e1',\n ['t1'],\n );\n });\n\n // Removing the last chip writes an empty value; the references have to go.\n it('unlinks every reference when a multi-reference is cleared', async () => {\n const backend = createCmsBackend(COLLECTION_ID, fieldsWithRefs);\n\n await backend.update({ _id: 'e1', tags: null } as never);\n\n expect(replaceReferences).toHaveBeenCalledWith(\n COLLECTION_ID,\n 'tags',\n 'e1',\n [],\n );\n });\n\n it('leaves a multi-reference the entity does not carry untouched', async () => {\n const backend = createCmsBackend(COLLECTION_ID, fieldsWithRefs);\n\n await backend.update({ _id: 'e1', title: 'Luna' } as never);\n\n expect(replaceReferences).not.toHaveBeenCalled();\n });\n\n it('accepts multi-reference values given as bare ids', async () => {\n const backend = createCmsBackend(COLLECTION_ID, fieldsWithRefs);\n\n await backend.update({ _id: 'e1', tags: ['t1', 't2'] } as never);\n\n expect(replaceReferences).toHaveBeenCalledWith(\n COLLECTION_ID,\n 'tags',\n 'e1',\n ['t1', 't2'],\n );\n });\n\n it('sends create the same way, then links its multi-references', async () => {\n const backend = createCmsBackend(COLLECTION_ID, fieldsWithRefs);\n const entity = {\n title: 'Luna',\n author: { _id: 'a1', title_fld: 'Nitzan Listman' },\n tags: [{ _id: 't1', name: 'One' }],\n };\n\n await backend.create(entity as never);\n\n expect(insert).toHaveBeenCalledWith(COLLECTION_ID, entity);\n expect(replaceReferences).toHaveBeenCalledWith(\n COLLECTION_ID,\n 'tags',\n 'new-1',\n ['t1'],\n );\n });\n });\n\n describe('delete / bulkDelete', () => {\n it('removes a single entity by id', async () => {\n remove.mockResolvedValue(undefined);\n const backend = createCmsBackend(COLLECTION_ID, {});\n\n await backend.delete('e1');\n\n expect(remove).toHaveBeenCalledWith(COLLECTION_ID, 'e1');\n });\n\n it('bulk-removes entities by ids', async () => {\n bulkRemove.mockResolvedValue(undefined);\n const backend = createCmsBackend(COLLECTION_ID, {});\n\n await backend.bulkDelete(['e1', 'e2']);\n\n expect(bulkRemove).toHaveBeenCalledWith(COLLECTION_ID, ['e1', 'e2']);\n });\n });\n\n describe('find', () => {\n it('applies skip/limit and computes total and hasNext', async () => {\n mockFindResult = {\n items: [{ _id: 'a' }, { _id: 'b' }],\n totalCount: 5,\n };\n const backend = createCmsBackend(COLLECTION_ID, {\n title: fieldsWithRefs.title,\n });\n\n const result = await backend.find({\n offset: 0,\n limit: 2,\n } as never);\n\n expect(queryChain.skip).toHaveBeenCalledWith(0);\n expect(queryChain.limit).toHaveBeenCalledWith(2);\n expect(queryChain.find).toHaveBeenCalledWith({ returnTotalCount: true });\n expect(result.items).toEqual([{ _id: 'a' }, { _id: 'b' }]);\n expect(result.total).toBe(5);\n // 0 + 2 < 5 → there is a next page.\n expect(result.hasNext).toBe(true);\n });\n\n it('reports hasNext false on the last page', async () => {\n mockFindResult = {\n items: [{ _id: 'e' }],\n totalCount: 3,\n };\n const backend = createCmsBackend(COLLECTION_ID, {\n title: fieldsWithRefs.title,\n });\n\n const result = await backend.find({ offset: 2, limit: 2 } as never);\n\n // 2 + 1 === 3 → no next page.\n expect(result.hasNext).toBe(false);\n });\n\n // Rows have to arrive with their referenced items expanded: the reference\n // cells read the label off the value, so a bare id renders blank.\n it('expands every reference field, whether or not it is searchable', async () => {\n mockFindResult = { items: [], totalCount: 0 };\n const backend = createCmsBackend(COLLECTION_ID, fieldsWithRefs);\n\n // The per-call `options` arg is part of the concrete `createCmsBackend.find`\n // but not the erased `CollectionBackend.find` contract — cast to reach it.\n await findWithOptions(backend.find, { offset: 0, limit: 10 } as never, {\n searchableFieldIds: ['title'],\n });\n\n expect(queryChain.include).toHaveBeenCalledWith('author', 'tags');\n });\n\n it('expands reference fields when called with no options', async () => {\n mockFindResult = { items: [], totalCount: 0 };\n const backend = createCmsBackend(COLLECTION_ID, fieldsWithRefs);\n\n await backend.find({ offset: 0, limit: 10 } as never);\n\n expect(queryChain.include).toHaveBeenCalledWith('author', 'tags');\n });\n\n it('does not call include for a schema with no reference fields', async () => {\n mockFindResult = { items: [], totalCount: 0 };\n const backend = createCmsBackend(COLLECTION_ID, {\n title: fieldsWithRefs.title,\n });\n\n await backend.find({ offset: 0, limit: 10 } as never);\n\n expect(queryChain.include).not.toHaveBeenCalled();\n });\n\n // The cases below mirror auto-patterns' end-to-end coverage: the fetch path\n // must actually apply the query's filters/sort/search, not just skip/limit.\n const filterableFields: Schema['fields'] = {\n title: fieldsWithRefs.title,\n price: {\n id: 'price',\n type: 'NUMBER',\n displayName: 'Price',\n capabilities: {\n supportedQueryOperators: ['GTE', 'LTE'],\n sortable: true,\n },\n },\n done: {\n id: 'done',\n type: 'BOOLEAN',\n displayName: 'Done',\n capabilities: { supportedQueryOperators: [], sortable: false },\n },\n };\n\n it('applies a number range filter from the query', async () => {\n const backend = createCmsBackend(COLLECTION_ID, filterableFields);\n\n await findWithOptions(\n backend.find,\n {\n offset: 0,\n limit: 10,\n filters: { price: { from: 10, to: 100 } },\n } as never,\n {},\n );\n\n expect(queryChain.ge).toHaveBeenCalledWith('price', 10);\n expect(queryChain.le).toHaveBeenCalledWith('price', 100);\n });\n\n it('applies a checked boolean filter from the query', async () => {\n const backend = createCmsBackend(COLLECTION_ID, filterableFields);\n\n await findWithOptions(\n backend.find,\n {\n offset: 0,\n limit: 10,\n filters: { done: [{ id: 'checked' }] },\n } as never,\n {},\n );\n\n expect(queryChain.eq).toHaveBeenCalledWith('done', true);\n });\n\n it('applies ascending sort from the query', async () => {\n const backend = createCmsBackend(COLLECTION_ID, filterableFields);\n\n await backend.find({\n offset: 0,\n limit: 10,\n sort: [{ fieldName: 'title', order: 'asc' }],\n } as never);\n\n expect(queryChain.ascending).toHaveBeenCalledWith('title');\n });\n\n it('applies descending sort from the query', async () => {\n const backend = createCmsBackend(COLLECTION_ID, filterableFields);\n\n await backend.find({\n offset: 0,\n limit: 10,\n sort: [{ fieldName: 'title', order: 'desc' }],\n } as never);\n\n expect(queryChain.descending).toHaveBeenCalledWith('title');\n });\n\n it('applies the search term as a contains filter on searchable text fields', async () => {\n const backend = createCmsBackend(COLLECTION_ID, filterableFields);\n\n await findWithOptions(\n backend.find,\n { offset: 0, limit: 10, search: 'hello' } as never,\n { searchableFieldIds: ['title'] },\n );\n\n expect(filterChain.contains).toHaveBeenCalledWith('title', 'hello');\n expect(queryChain.and).toHaveBeenCalledWith(filterChain);\n });\n });\n\n describe('bulkInsert', () => {\n it('maps inserted/updated to succeeded, errors to failed, and surfaces error rows', async () => {\n bulkInsert.mockResolvedValue({\n inserted: 2,\n updated: 1,\n errors: [{ originalIndex: 4, message: 'bad row', code: 'INVALID' }],\n });\n const backend = createCmsBackend(COLLECTION_ID, {});\n\n const result = await backend.bulkInsert!([{ a: 1 }, { a: 2 }] as never);\n\n expect(bulkInsert).toHaveBeenCalledWith(COLLECTION_ID, [\n { a: 1 },\n { a: 2 },\n ]);\n expect(result.succeeded).toBe(3);\n expect(result.failed).toBe(1);\n expect(result.errors).toEqual([\n { rowIndex: 4, message: 'bad row', code: 'INVALID' },\n ]);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  var _data = require("@wix/data");
4
- var _bexCore = require("@wix/bex-core");
4
+ var _patterns = require("@wix/patterns");
5
5
  var _filterUtils = require("../filterUtils");
6
6
  var _constants = require("../constants");
7
7
  var _wixDataQueryRecorder = require("./wixDataQueryRecorder");
@@ -224,7 +224,7 @@ describe('addFiltersToDataQuery', () => {
224
224
  dataQuery: dataQuery,
225
225
  query: makeQuery({
226
226
  textField: {
227
- operator: _bexCore.FilterOperator.CONTAINS,
227
+ operator: _patterns.FilterOperator.CONTAINS,
228
228
  value: 'foo'
229
229
  }
230
230
  }),
@@ -238,7 +238,7 @@ describe('addFiltersToDataQuery', () => {
238
238
  dataQuery: dataQuery,
239
239
  query: makeQuery({
240
240
  textField: {
241
- operator: _bexCore.FilterOperator.IS_EMPTY
241
+ operator: _patterns.FilterOperator.IS_EMPTY
242
242
  }
243
243
  }),
244
244
  fields: textFields
@@ -251,7 +251,7 @@ describe('addFiltersToDataQuery', () => {
251
251
  dataQuery: dataQuery,
252
252
  query: makeQuery({
253
253
  textField: {
254
- operator: _bexCore.FilterOperator.EXISTS
254
+ operator: _patterns.FilterOperator.EXISTS
255
255
  }
256
256
  }),
257
257
  fields: textFields
@@ -264,7 +264,7 @@ describe('addFiltersToDataQuery', () => {
264
264
  dataQuery: dataQuery,
265
265
  query: makeQuery({
266
266
  textField: {
267
- operator: _bexCore.FilterOperator.NOT_CONTAINS,
267
+ operator: _patterns.FilterOperator.NOT_CONTAINS,
268
268
  value: 'bar'
269
269
  }
270
270
  }),
@@ -281,7 +281,7 @@ describe('addFiltersToDataQuery', () => {
281
281
  dataQuery: dataQuery,
282
282
  query: makeQuery({
283
283
  addressField: {
284
- operator: _bexCore.FilterOperator.CONTAINS,
284
+ operator: _patterns.FilterOperator.CONTAINS,
285
285
  value: 'NYC'
286
286
  }
287
287
  }),
@@ -305,7 +305,7 @@ describe('addFiltersToDataQuery', () => {
305
305
  dataQuery: dataQuery,
306
306
  query: makeQuery({
307
307
  addressField: {
308
- operator: _bexCore.FilterOperator.IS_EMPTY
308
+ operator: _patterns.FilterOperator.IS_EMPTY
309
309
  }
310
310
  }),
311
311
  fields: {