diff --git a/packages/core/database/lib/entity-manager/__tests__/relations-orderer.test.js b/packages/core/database/lib/entity-manager/__tests__/relations-orderer.test.js index 0ee3096660..e17981bb12 100644 --- a/packages/core/database/lib/entity-manager/__tests__/relations-orderer.test.js +++ b/packages/core/database/lib/entity-manager/__tests__/relations-orderer.test.js @@ -121,6 +121,28 @@ describe('Given I have some relations in the database', () => { ]); }); }); + + describe('When you connect a relation before one with null order', () => { + test('Then it replaces null order values to 1 and properly reorders relations', () => { + const orderer = relationsOrderer( + [ + { id: 2, order: null }, + { id: 3, order: null }, + ], + 'id', + 'order' + ); + + orderer.connect([{ id: 4, position: { before: 3 } }, { id: 5 }]); + + expect(orderer.get()).toMatchObject([ + { id: 2, order: 1 }, + { id: 4, order: 0.5 }, + { id: 3, order: 1 }, + { id: 5, order: 1.5 }, + ]); + }); + }); }); describe('Given there are no relations in the database', () => { diff --git a/packages/core/database/lib/entity-manager/relations-orderer.js b/packages/core/database/lib/entity-manager/relations-orderer.js index e85558e71b..e868e9f851 100644 --- a/packages/core/database/lib/entity-manager/relations-orderer.js +++ b/packages/core/database/lib/entity-manager/relations-orderer.js @@ -135,7 +135,7 @@ const relationsOrderer = (initArr, idColumn, orderColumn, strict) => { const computedRelations = _.castArray(initArr || []).map((r) => ({ init: true, id: r[idColumn], - order: r[orderColumn], + order: r[orderColumn] || 1, })); const maxOrder = _.maxBy('order', computedRelations)?.order || 0;