diff --git a/apps/meteor/app/api/server/v1/im.ts b/apps/meteor/app/api/server/v1/im.ts index fa274ef694673..32dbec80995d6 100644 --- a/apps/meteor/app/api/server/v1/im.ts +++ b/apps/meteor/app/api/server/v1/im.ts @@ -400,7 +400,7 @@ API.v1.addRoute( ...parseIds(starredIds, 'starred._id'), ...(pinned && pinned.toLowerCase() === 'true' ? { pinned: true } : {}), }; - const sortObj = { ts: sort?.ts ?? -1 }; + const sortObj = sort?.ts ?? { ts: -1 }; const { cursor, totalCount } = Messages.findPaginated(ourQuery, { sort: sortObj, diff --git a/apps/meteor/tests/end-to-end/api/direct-message.ts b/apps/meteor/tests/end-to-end/api/direct-message.ts index 3146d351798b1..e1056b419f204 100644 --- a/apps/meteor/tests/end-to-end/api/direct-message.ts +++ b/apps/meteor/tests/end-to-end/api/direct-message.ts @@ -527,6 +527,25 @@ describe('[Direct Messages]', () => { expect(res.body).to.have.property('total', 1); }); }); + + it('should return messages sorted by timestamp in ascending order', async () => { + await request + .get(api('im.messages')) + .set(testUserCredentials) + .query({ + roomId: testUserDMRoom._id, + sort: '{"ts":1}', + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body.messages).to.be.an('array').and.to.have.length.greaterThan(0); + + const timestamps = res.body.messages.map((message: any) => message.ts); + expect(timestamps).to.eql(timestamps.slice().sort((a: string, b: string) => new Date(a).getTime() - new Date(b).getTime())); + }); + }); }); describe('/im.messages.others', () => {