diff --git a/backend/src/v5/models/users.js b/backend/src/v5/models/users.js index c331ac7508..5f2faa93e2 100644 --- a/backend/src/v5/models/users.js +++ b/backend/src/v5/models/users.js @@ -164,7 +164,7 @@ User.removeUsers = (users) => db.deleteMany(USERS_DB_NAME, USERS_COL, { user: { User.ensureIndicesExist = async () => { try { - await db.createIndex(USERS_DB_NAME, USERS_COL, { 'customData.userId': 1 }, { runInBackground: true, unique: true }); + await db.createIndex(USERS_DB_NAME, USERS_COL, { 'customData.userId': 1 }, { runInBackground: true }); } catch (err) { // Note this will fail pre 5.16 migration. logger.logWarning('Failed to create index on user ID. Please ensure 5.16 migration script has been executed.'); diff --git a/backend/tests/v5/drivers/handler/db.test.js b/backend/tests/v5/drivers/handler/db.test.js index 4306fef824..f495f83d61 100644 --- a/backend/tests/v5/drivers/handler/db.test.js +++ b/backend/tests/v5/drivers/handler/db.test.js @@ -765,6 +765,22 @@ const testIndices = () => { const array = res.map(({ key }) => key); expect(array).toEqual(expect.arrayContaining([{ _id: 1 }, ...newIndex.map(({ key }) => key)])); }); + + test('Should be able to create unique index', async () => { + const database = generateRandomString(); + const col = generateRandomString(); + + await DB.insertMany(database, col, [{ n: 2 }, { a: 1 }]); + + const newIndex = { n: 1 }; + await expect(DB.createIndex(database, col, newIndex, { unique: true })).resolves.toBeUndefined(); + + await DB.insertOne(database, col, newIndex); + // Unique index means we shouldn't be able to insert another one with the same value. + await expect(DB.insertOne(database, col, newIndex)).rejects.not.toBeUndefined(); + // Unique index means we shouldn't be able to insert another one that is empty + await expect(DB.insertOne(database, col, { b: 1 })).rejects.not.toBeUndefined(); + }); }); };