fix: unable to query versions on latest key (#13512)

Fixes https://github.com/payloadcms/payload/issues/13455

https://github.com/payloadcms/payload/pull/13297 Fixed a scoping issue,
but exposed a new issue where querying versioned documents by the
`latest` key would fail. This PR fixes the newly discoverable issue.
This commit is contained in:
Jarrod Flesch
2025-08-19 14:42:02 -04:00
committed by GitHub
parent 332b2a9d3c
commit 73ba4d1bb9
2 changed files with 81 additions and 1 deletions

View File

@@ -162,7 +162,12 @@ export async function validateSearchParam({
if (versionFields) {
fieldAccess = policies[entityType]![entitySlug]!.fields
if (segments[0] === 'parent' || segments[0] === 'version' || segments[0] === 'snapshot') {
if (
segments[0] === 'parent' ||
segments[0] === 'version' ||
segments[0] === 'snapshot' ||
segments[0] === 'latest'
) {
segments.shift()
}
} else {

View File

@@ -4,9 +4,11 @@ import { schedulePublishHandler } from '@payloadcms/ui/utilities/schedulePublish
import path from 'path'
import { createLocalReq, ValidationError } from 'payload'
import { wait } from 'payload/shared'
import * as qs from 'qs-esm'
import { fileURLToPath } from 'url'
import type { NextRESTClient } from '../helpers/NextRESTClient.js'
import type { DraftPost } from './payload-types.js'
import { devUser } from '../credentials.js'
import { initPayloadInt } from '../helpers/initPayloadInt.js'
@@ -1504,6 +1506,79 @@ describe('Versions', () => {
const jsonByID = await responseByID.json()
expect(jsonByID.parent).toBe(collectionLocalPostID)
})
it('should allow query by latest', async () => {
async function createVersion({ title }: { title: string }) {
return payload.create({
collection: draftCollectionSlug,
data: {
title,
description: 'Test Description',
},
})
}
async function updateVersion({
id,
data,
}: {
data: Partial<DraftPost>
id: number | string
}) {
return payload.update({
collection: draftCollectionSlug,
id,
data,
})
}
const version1 = await createVersion({
title: 'test1',
})
await updateVersion({
id: version1.id,
data: {
title: 'test1 updated',
},
})
const newestVersion = await updateVersion({
id: version1.id,
data: {
title: 'test2 updated',
},
})
const query = qs.stringify(
{
where: {
and: [
{
latest: {
equals: true,
},
},
{
parent: {
equals: version1.id,
},
},
],
},
},
{
addQueryPrefix: true,
},
)
const response = await restClient.GET(`/${draftCollectionSlug}/versions${query}`)
expect(response.status).toBe(200)
const json = await response.json()
expect(json.docs).toHaveLength(1)
expect(json.docs[0].version.title).toBe(newestVersion.title)
})
})
describe('Globals - Local', () => {