fix: duplicate handles locales with unique (#5600)

* fix: duplicate errors with localized and unique fields

* docs: beforeDuplicate hooks
This commit is contained in:
Dan Ribbens
2024-04-02 15:30:49 -04:00
committed by GitHub
parent be58f67115
commit 825ca94080
15 changed files with 262 additions and 193 deletions

View File

@@ -1,15 +1,12 @@
import type { Payload } from 'payload'
import type { Where } from 'payload/types'
import { getPayload } from 'payload'
import type { NextRESTClient } from '../helpers/NextRESTClient.js'
import type { LocalizedPost, WithLocalizedRelationship } from './payload-types.js'
import { englishLocale } from '../globals/config.js'
import { idToString } from '../helpers/idToString.js'
import { initPayloadInt } from '../helpers/initPayloadInt.js'
import { startMemoryDB } from '../startMemoryDB.js'
import { arrayCollectionSlug } from './collections/Array/index.js'
import { nestedToArrayAndBlockCollectionSlug } from './collections/NestedToArrayAndBlock/index.js'
import configPromise from './config.js'
@@ -1013,6 +1010,51 @@ describe('Localization', () => {
expect(rowSpanish.textNotLocalized).toEqual('test')
})
})
describe('Duplicate Collection', () => {
it('should duplicate localized document', async () => {
const localizedPost = await payload.create({
collection: localizedPostsSlug,
data: {
localizedCheckbox: true,
title: englishTitle,
},
locale: defaultLocale,
})
const id = localizedPost.id.toString()
await payload.update({
id,
collection: localizedPostsSlug,
data: {
localizedCheckbox: false,
title: spanishTitle,
},
locale: spanishLocale,
})
const result = await payload.duplicate({
id,
collection: localizedPostsSlug,
locale: defaultLocale,
})
const allLocales = await payload.findByID({
id: result.id,
collection: localizedPostsSlug,
locale: 'all',
})
// check fields
expect(result.title).toStrictEqual(englishTitle)
expect(allLocales.title.es).toStrictEqual(spanishTitle)
expect(allLocales.localizedCheckbox.en).toBeTruthy()
expect(allLocales.localizedCheckbox.es).toBeFalsy()
})
})
})
async function createLocalizedPost(data: {