import payload from '../../packages/payload/src' import { initPayloadTest } from '../helpers/configHelpers' import configPromise from './config' let collection: string describe('array-update', () => { beforeAll(async () => { const config = await configPromise collection = config.collections[0]?.slug await initPayloadTest({ __dirname }) }) afterAll(async () => { if (typeof payload.db.destroy === 'function') { await payload.db.destroy(payload) } }) it('should persist existing array-based data while updating and passing row ID', async () => { const originalText = 'some optional text' const doc = await payload.create({ collection, data: { arrayOfFields: [ { required: 'a required field here', optional: originalText, }, { required: 'another required field here', optional: 'this is cool', }, ], }, }) const arrayWithExistingValues = [...doc.arrayOfFields] const updatedText = 'this is some new text for the first item in array' arrayWithExistingValues[0] = { id: arrayWithExistingValues[0].id, required: updatedText, } const updatedDoc = await payload.update({ id: doc.id, collection, data: { arrayOfFields: arrayWithExistingValues, }, }) expect(updatedDoc.arrayOfFields?.[0]).toMatchObject({ required: updatedText, optional: originalText, }) }) it('should disregard existing array-based data while updating and NOT passing row ID', async () => { const updatedText = 'here is some new text' const secondArrayItem = { required: 'test', optional: 'optional test', } const doc = await payload.create({ collection, data: { arrayOfFields: [ { required: 'a required field here', optional: 'some optional text', }, secondArrayItem, ], }, }) const updatedDoc = await payload.update({ id: doc.id, collection, data: { arrayOfFields: [ { required: updatedText, }, { id: doc.arrayOfFields?.[1].id, required: doc.arrayOfFields?.[1].required as string, // NOTE - not passing optional field. It should persist // because we're passing ID }, ], }, }) expect(updatedDoc.arrayOfFields?.[0].required).toStrictEqual(updatedText) expect(updatedDoc.arrayOfFields?.[0].optional).toBeFalsy() expect(updatedDoc.arrayOfFields?.[1]).toMatchObject(secondArrayItem) }) })