107 lines
2.7 KiB
TypeScript
107 lines
2.7 KiB
TypeScript
import type { Payload } from '../../packages/payload/src/index.js'
|
|
|
|
import { initPayloadInt } from '../helpers/initPayloadInt.js'
|
|
import configPromise from './config.js'
|
|
import { arraySlug } from './shared.js'
|
|
|
|
let payload: Payload
|
|
|
|
describe('array-update', () => {
|
|
beforeAll(async () => {
|
|
;({ payload } = await initPayloadInt(configPromise))
|
|
})
|
|
|
|
afterAll(async () => {
|
|
if (typeof payload.db.destroy === 'function') {
|
|
await payload.db.destroy()
|
|
}
|
|
})
|
|
|
|
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: arraySlug,
|
|
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: arraySlug,
|
|
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: arraySlug,
|
|
data: {
|
|
arrayOfFields: [
|
|
{
|
|
required: 'a required field here',
|
|
optional: 'some optional text',
|
|
},
|
|
secondArrayItem,
|
|
],
|
|
},
|
|
})
|
|
|
|
const updatedDoc = await payload.update({
|
|
id: doc.id,
|
|
collection: arraySlug,
|
|
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)
|
|
})
|
|
})
|