From 2e4f7ab35c23f25051a5000e7902df7f255ed607 Mon Sep 17 00:00:00 2001 From: Jarrod Flesch Date: Tue, 7 Feb 2023 11:29:25 -0500 Subject: [PATCH] fix: max versions incorrectly sorting, causing incorrect versions to be held onto --- src/versions/enforceMaxVersions.ts | 10 +++---- src/versions/saveVersion.ts | 2 +- test/versions/collections/Versions.ts | 2 +- test/versions/int.spec.ts | 39 +++++++++++++++++++++++++++ 4 files changed, 45 insertions(+), 8 deletions(-) diff --git a/src/versions/enforceMaxVersions.ts b/src/versions/enforceMaxVersions.ts index ffee2025c8..ac6a98e61e 100644 --- a/src/versions/enforceMaxVersions.ts +++ b/src/versions/enforceMaxVersions.ts @@ -23,14 +23,12 @@ export const enforceMaxVersions = async ({ if (id) query.parent = id; - const oldestAllowedDoc = await Model.find(query).limit(1).skip(max).sort({ createdAt: -1 }); - - if (oldestAllowedDoc?.[0]?.createdAt) { - const deleteLessThan = oldestAllowedDoc[0].createdAt; + const oldestAllowedDoc = await Model.find(query).limit(1).skip(max).sort({ updatedAt: -1 }); + if (oldestAllowedDoc?.[0]?.updatedAt) { await Model.deleteMany({ - createdAt: { - $lte: deleteLessThan, + updatedAt: { + $lte: oldestAllowedDoc[0].updatedAt, }, }); } diff --git a/src/versions/saveVersion.ts b/src/versions/saveVersion.ts index b9b8eb1fd9..987ec9bf0f 100644 --- a/src/versions/saveVersion.ts +++ b/src/versions/saveVersion.ts @@ -100,7 +100,7 @@ export const saveVersion = async ({ if (global && typeof global.versions.max === 'number') max = global.versions.max; if (max > 0) { - enforceMaxVersions({ + await enforceMaxVersions({ id, payload, Model: VersionModel, diff --git a/test/versions/collections/Versions.ts b/test/versions/collections/Versions.ts index f1a481856f..7e4bd3c4c0 100644 --- a/test/versions/collections/Versions.ts +++ b/test/versions/collections/Versions.ts @@ -9,7 +9,7 @@ const VersionPosts: CollectionConfig = { }, versions: { drafts: false, - maxPerDoc: 35, + maxPerDoc: 2, }, access: { read: ({ req: { user } }) => { diff --git a/test/versions/int.spec.ts b/test/versions/int.spec.ts index fefbb05011..be6cc57fd1 100644 --- a/test/versions/int.spec.ts +++ b/test/versions/int.spec.ts @@ -318,6 +318,45 @@ describe('Versions', () => { expect(versions.docs).toHaveLength(3); }); }); + + describe('Versions Count', () => { + it('retains correct versions', async () => { + const original = await payload.create({ + collection: 'version-posts', + data: { + title: 'A', + description: 'A', + }, + }); + + await payload.update({ + collection: 'version-posts', + id: original.id, + data: { + title: 'B', + description: 'B', + }, + }); + + await payload.update({ + collection: 'version-posts', + id: original.id, + data: { + title: 'C', + description: 'C', + }, + }); + + const versions = await payload.findVersions({ + collection: 'version-posts', + sort: '-updatedAt', + depth: 1, + }); + + expect(versions.docs[versions.docs.length - 1].version.title).toStrictEqual('B'); + expect(versions.docs).toHaveLength(2); + }); + }); }); describe('Querying', () => {