From b32a91dd8b5ea35867070206563dbe4011dac3a9 Mon Sep 17 00:00:00 2001 From: Joao Date: Tue, 21 Jan 2025 09:39:59 -0400 Subject: [PATCH 01/11] Add user ID validation and custom error handling in ModelWithPermissions --- app/api/odm/ModelWithPermissions.ts | 21 +++++++++++ .../odm/specs/ModelWithPermissions.spec.ts | 36 ++++++++++++++++++- 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/app/api/odm/ModelWithPermissions.ts b/app/api/odm/ModelWithPermissions.ts index a14749d6f7..34529bbe92 100644 --- a/app/api/odm/ModelWithPermissions.ts +++ b/app/api/odm/ModelWithPermissions.ts @@ -13,6 +13,7 @@ import { UwaziQueryOptions, EnforcedWithId, } from './model'; +import { ObjectId } from 'mongodb'; type WithPermissions = T & { published?: boolean; permissions?: PermissionSchema[] }; type WithPermissionsDataType = DataType>; @@ -127,9 +128,27 @@ const controlPermissionsData = ( return { ...data, permissions: undefined }; }; +export class InvalidUserIdError extends Error { + constructor() { + super('You are trying to persist a userId that is invalid'); + this.name = 'InvalidUserIdError'; + } +} + export class ModelWithPermissions extends OdmModel> { + private validateUser(user: DataType | undefined) { + try { + // eslint-disable-next-line no-new + new ObjectId(user?._id?.toString()); + } catch (e) { + throw new InvalidUserIdError(); + } + } + async save(data: WithPermissionsDataType) { const user = permissionsContext.getUserInContext(); + this.validateUser(user); + const query = { _id: data._id }; return data._id || data.permissions ? super.save(data, appendPermissionQuery(query, AccessLevels.WRITE, user)) @@ -138,6 +157,8 @@ export class ModelWithPermissions extends OdmModel> { async saveMultiple(dataArray: WithPermissionsDataType[]) { const user = permissionsContext.getUserInContext(); + this.validateUser(user); + const dataArrayWithPermissions = dataArray.map(data => data._id || data.permissions ? data : appendPermissionData(data, user) ); diff --git a/app/api/odm/specs/ModelWithPermissions.spec.ts b/app/api/odm/specs/ModelWithPermissions.spec.ts index ea09dd1245..aafa042d60 100644 --- a/app/api/odm/specs/ModelWithPermissions.spec.ts +++ b/app/api/odm/specs/ModelWithPermissions.spec.ts @@ -1,6 +1,10 @@ import { PermissionSchema } from 'shared/types/permissionType'; import { AccessLevels, PermissionType } from 'shared/types/permissionSchema'; -import { instanceModelWithPermissions, ModelWithPermissions } from 'api/odm/ModelWithPermissions'; +import { + instanceModelWithPermissions, + InvalidUserIdError, + ModelWithPermissions, +} from 'api/odm/ModelWithPermissions'; import { permissionsContext } from 'api/permissions/permissionsContext'; import testingDB from 'api/utils/testing_db'; import * as mongoose from 'mongoose'; @@ -185,6 +189,18 @@ describe('ModelWithPermissions', () => { }); describe('save', () => { + it('should throw InvalidUserIdError if the user id is incorrect', async () => { + jest + .spyOn(permissionsContext, 'getUserInContext') + .mockReturnValue({ _id: 'invalid_id' } as any); + + const promise = model.save({ + _id: writeDocId.toString(), + name: 'writeDocUpdated', + }); + await expect(promise).rejects.toEqual(new InvalidUserIdError()); + }); + it('should save the data if user has permissions on the document', async () => { const saved = await model.save({ _id: writeDocId.toString(), @@ -253,6 +269,24 @@ describe('ModelWithPermissions', () => { }); describe('saveMultiple', () => { + it('should throw InvalidUserIdError if the user id is incorrect', async () => { + jest + .spyOn(permissionsContext, 'getUserInContext') + .mockReturnValue({ _id: 'invalid_id' } as any); + + const promise = model.saveMultiple([ + { + _id: writeDocId.toString(), + name: 'writeDocMultiUpdated', + }, + { + _id: writeDoc2Id.toString(), + name: 'writeDoc2MultiUpdated', + }, + ]); + await expect(promise).rejects.toEqual(new InvalidUserIdError()); + }); + it('should save the data if user has permissions on the document', async () => { const saved = await model.saveMultiple([ { From b88a8245bf761ddbf8725b3e3142282cf1fa7cac Mon Sep 17 00:00:00 2001 From: Joao Date: Tue, 21 Jan 2025 10:39:56 -0400 Subject: [PATCH 02/11] Refactor save methods in ModelWithPermissions to validate user before appending permissions --- app/api/odm/ModelWithPermissions.ts | 20 ++++++++++++-------- app/api/utils/testingUserInContext.ts | 3 ++- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/app/api/odm/ModelWithPermissions.ts b/app/api/odm/ModelWithPermissions.ts index 34529bbe92..b422d04e66 100644 --- a/app/api/odm/ModelWithPermissions.ts +++ b/app/api/odm/ModelWithPermissions.ts @@ -147,21 +147,25 @@ export class ModelWithPermissions extends OdmModel> { async save(data: WithPermissionsDataType) { const user = permissionsContext.getUserInContext(); - this.validateUser(user); - const query = { _id: data._id }; - return data._id || data.permissions - ? super.save(data, appendPermissionQuery(query, AccessLevels.WRITE, user)) - : super.save(appendPermissionData(data, user)); + + if (data._id || data.permissions) { + return super.save(data, appendPermissionQuery(query, AccessLevels.WRITE, user)); + } + + this.validateUser(user); + return super.save(appendPermissionData(data, user)); } async saveMultiple(dataArray: WithPermissionsDataType[]) { const user = permissionsContext.getUserInContext(); this.validateUser(user); - const dataArrayWithPermissions = dataArray.map(data => - data._id || data.permissions ? data : appendPermissionData(data, user) - ); + const dataArrayWithPermissions = dataArray.map(data => { + if (data._id || data.permissions) return data; + this.validateUser(user); + return appendPermissionData(data, user); + }); const query = appendPermissionQuery({}, AccessLevels.WRITE, user); return super.saveMultiple(dataArrayWithPermissions, query, !!user); } diff --git a/app/api/utils/testingUserInContext.ts b/app/api/utils/testingUserInContext.ts index 4fa177e0c8..0b46c8c3ae 100644 --- a/app/api/utils/testingUserInContext.ts +++ b/app/api/utils/testingUserInContext.ts @@ -2,6 +2,7 @@ import { permissionsContext } from 'api/permissions/permissionsContext'; import { UserSchema } from 'shared/types/userType'; import { UserRole } from 'shared/types/userSchema'; import { DataType } from 'api/odm'; +import { ObjectId } from 'mongodb'; export class UserInContextMockFactory { spy: jest.SpyInstance | undefined; @@ -12,7 +13,7 @@ export class UserInContextMockFactory { mockEditorUser() { this.mock({ - _id: 'userId', + _id: new ObjectId(), role: UserRole.EDITOR, username: 'editorUser', email: 'editor@test.com', From ad127cfd6b81e8ea49b20cebbbd3e66682d0e815 Mon Sep 17 00:00:00 2001 From: Joao Date: Tue, 21 Jan 2025 14:09:44 -0400 Subject: [PATCH 03/11] Update ModelWithPermissions tests to use dynamic user ID and remove invalid user ID checks --- .../odm/specs/ModelWithPermissions.spec.ts | 63 ++++++------------- 1 file changed, 20 insertions(+), 43 deletions(-) diff --git a/app/api/odm/specs/ModelWithPermissions.spec.ts b/app/api/odm/specs/ModelWithPermissions.spec.ts index aafa042d60..2c0e918902 100644 --- a/app/api/odm/specs/ModelWithPermissions.spec.ts +++ b/app/api/odm/specs/ModelWithPermissions.spec.ts @@ -1,13 +1,10 @@ import { PermissionSchema } from 'shared/types/permissionType'; import { AccessLevels, PermissionType } from 'shared/types/permissionSchema'; -import { - instanceModelWithPermissions, - InvalidUserIdError, - ModelWithPermissions, -} from 'api/odm/ModelWithPermissions'; +import { instanceModelWithPermissions, ModelWithPermissions } from 'api/odm/ModelWithPermissions'; import { permissionsContext } from 'api/permissions/permissionsContext'; import testingDB from 'api/utils/testing_db'; import * as mongoose from 'mongoose'; +import { ObjectId } from 'mongodb'; describe('ModelWithPermissions', () => { let model: ModelWithPermissions; @@ -22,6 +19,7 @@ describe('ModelWithPermissions', () => { permissions: { type: mongoose.Schema.Types.Mixed, select: false }, fixed: Boolean, }); + const userId = new ObjectId(); const readDocId = testingDB.id(); const writeDocId = testingDB.id(); const writeDoc2Id = testingDB.id(); @@ -37,19 +35,25 @@ describe('ModelWithPermissions', () => { _id: readDocId, name: 'readDoc', published: false, - permissions: [{ refId: 'user1', type: PermissionType.USER, level: AccessLevels.READ }], + permissions: [ + { refId: userId.toString(), type: PermissionType.USER, level: AccessLevels.READ }, + ], fixed: true, }, { _id: writeDocId, name: 'writeDoc', - permissions: [{ refId: 'user1', type: PermissionType.USER, level: AccessLevels.WRITE }], + permissions: [ + { refId: userId.toString(), type: PermissionType.USER, level: AccessLevels.WRITE }, + ], fixed: true, }, { _id: writeDoc2Id, name: 'writeDoc2', - permissions: [{ refId: 'user1', type: PermissionType.USER, level: AccessLevels.WRITE }], + permissions: [ + { refId: userId.toString(), type: PermissionType.USER, level: AccessLevels.WRITE }, + ], fixed: true, }, { @@ -84,7 +88,9 @@ describe('ModelWithPermissions', () => { { _id: deleteDocId, name: 'docToDelete', - permissions: [{ refId: 'user1', type: PermissionType.USER, level: AccessLevels.WRITE }], + permissions: [ + { refId: userId.toString(), type: PermissionType.USER, level: AccessLevels.WRITE }, + ], }, { _id: public2Id, @@ -107,7 +113,7 @@ describe('ModelWithPermissions', () => { describe('collaborator user', () => { beforeAll(async () => { jest.spyOn(permissionsContext, 'getUserInContext').mockReturnValue({ - _id: 'user1', + _id: userId, username: 'User 1', email: 'user@test.test', role: 'collaborator', @@ -189,18 +195,6 @@ describe('ModelWithPermissions', () => { }); describe('save', () => { - it('should throw InvalidUserIdError if the user id is incorrect', async () => { - jest - .spyOn(permissionsContext, 'getUserInContext') - .mockReturnValue({ _id: 'invalid_id' } as any); - - const promise = model.save({ - _id: writeDocId.toString(), - name: 'writeDocUpdated', - }); - await expect(promise).rejects.toEqual(new InvalidUserIdError()); - }); - it('should save the data if user has permissions on the document', async () => { const saved = await model.save({ _id: writeDocId.toString(), @@ -243,10 +237,11 @@ describe('ModelWithPermissions', () => { it('should add the user in the permissions property of the new doc', async () => { const saved = await model.save({ name: 'newDoc' }); + expect(saved).toEqual( expect.objectContaining({ name: 'newDoc', - permissions: [{ refId: 'user1', type: 'user', level: 'write' }], + permissions: [{ refId: userId.toString(), type: 'user', level: 'write' }], }) ); }); @@ -269,24 +264,6 @@ describe('ModelWithPermissions', () => { }); describe('saveMultiple', () => { - it('should throw InvalidUserIdError if the user id is incorrect', async () => { - jest - .spyOn(permissionsContext, 'getUserInContext') - .mockReturnValue({ _id: 'invalid_id' } as any); - - const promise = model.saveMultiple([ - { - _id: writeDocId.toString(), - name: 'writeDocMultiUpdated', - }, - { - _id: writeDoc2Id.toString(), - name: 'writeDoc2MultiUpdated', - }, - ]); - await expect(promise).rejects.toEqual(new InvalidUserIdError()); - }); - it('should save the data if user has permissions on the document', async () => { const saved = await model.saveMultiple([ { @@ -335,11 +312,11 @@ describe('ModelWithPermissions', () => { expect(saved).toMatchObject([ { name: 'newDoc', - permissions: [{ refId: 'user1', type: 'user', level: 'write' }], + permissions: [{ refId: userId.toString(), type: 'user', level: 'write' }], }, { name: 'newDoc2', - permissions: [{ refId: 'user1', type: 'user', level: 'write' }], + permissions: [{ refId: userId.toString(), type: 'user', level: 'write' }], }, ]); }); From 2cf50f567843583a2d42618c6633f462b7e0323e Mon Sep 17 00:00:00 2001 From: Joao Date: Tue, 21 Jan 2025 14:12:26 -0400 Subject: [PATCH 04/11] Remove user validation from saveMultiple method in ModelWithPermissions --- app/api/odm/ModelWithPermissions.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/app/api/odm/ModelWithPermissions.ts b/app/api/odm/ModelWithPermissions.ts index b422d04e66..26479cf66a 100644 --- a/app/api/odm/ModelWithPermissions.ts +++ b/app/api/odm/ModelWithPermissions.ts @@ -159,7 +159,6 @@ export class ModelWithPermissions extends OdmModel> { async saveMultiple(dataArray: WithPermissionsDataType[]) { const user = permissionsContext.getUserInContext(); - this.validateUser(user); const dataArrayWithPermissions = dataArray.map(data => { if (data._id || data.permissions) return data; From f0acbad199b32655fe78b4a00c671c4d38fdcf40 Mon Sep 17 00:00:00 2001 From: Joao Date: Tue, 21 Jan 2025 14:14:16 -0400 Subject: [PATCH 05/11] Update ModelWithPermissions tests to use testingDB for user ID generation --- app/api/odm/specs/ModelWithPermissions.spec.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/api/odm/specs/ModelWithPermissions.spec.ts b/app/api/odm/specs/ModelWithPermissions.spec.ts index 2c0e918902..a9e2473f7d 100644 --- a/app/api/odm/specs/ModelWithPermissions.spec.ts +++ b/app/api/odm/specs/ModelWithPermissions.spec.ts @@ -4,7 +4,6 @@ import { instanceModelWithPermissions, ModelWithPermissions } from 'api/odm/Mode import { permissionsContext } from 'api/permissions/permissionsContext'; import testingDB from 'api/utils/testing_db'; import * as mongoose from 'mongoose'; -import { ObjectId } from 'mongodb'; describe('ModelWithPermissions', () => { let model: ModelWithPermissions; @@ -19,7 +18,7 @@ describe('ModelWithPermissions', () => { permissions: { type: mongoose.Schema.Types.Mixed, select: false }, fixed: Boolean, }); - const userId = new ObjectId(); + const userId = testingDB.id(); const readDocId = testingDB.id(); const writeDocId = testingDB.id(); const writeDoc2Id = testingDB.id(); From b90a4b878e775b43460c98d52b1105ed8700f33c Mon Sep 17 00:00:00 2001 From: Joao Date: Wed, 22 Jan 2025 08:18:00 -0400 Subject: [PATCH 06/11] Add user context mocking for entity creation tests in entitySavingManager --- app/api/entities/specs/entitySavingManager.spec.ts | 6 +++++- app/api/utils/testingUserInContext.ts | 6 ++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/api/entities/specs/entitySavingManager.spec.ts b/app/api/entities/specs/entitySavingManager.spec.ts index 44bc1fe647..a4a3824fef 100644 --- a/app/api/entities/specs/entitySavingManager.spec.ts +++ b/app/api/entities/specs/entitySavingManager.spec.ts @@ -11,6 +11,7 @@ import { writeFile } from 'fs/promises'; import { ObjectId } from 'mongodb'; import path from 'path'; import { EntityWithFilesSchema } from 'shared/types/entityType'; +import { UserInContextMockFactory } from 'api/utils/testingUserInContext'; import waitForExpect from 'wait-for-expect'; import entities from '../entities'; import { @@ -38,6 +39,8 @@ trailer<> const tmpDir = (filename: string) => path.join(os.tmpdir(), filename); describe('entitySavingManager', () => { + const userInContextMock = new UserInContextMockFactory(); + const file = { originalname: 'sampleFile.txt', mimetype: 'text/plain', @@ -80,11 +83,12 @@ describe('entitySavingManager', () => { describe('new entity', () => { it('should create an entity without attachments', async () => { + const mockedUser = userInContextMock.mockEditorUser(); const entity = { title: 'newEntity', template: template1Id }; const { entity: savedEntity } = await saveEntity(entity, { ...reqData }); expect(savedEntity.permissions).toEqual([ - { level: 'write', refId: 'userId', type: 'user' }, + { level: 'write', refId: mockedUser._id?.toString(), type: 'user' }, ]); }); diff --git a/app/api/utils/testingUserInContext.ts b/app/api/utils/testingUserInContext.ts index 0b46c8c3ae..b446ee0207 100644 --- a/app/api/utils/testingUserInContext.ts +++ b/app/api/utils/testingUserInContext.ts @@ -12,12 +12,14 @@ export class UserInContextMockFactory { } mockEditorUser() { - this.mock({ + const user = { _id: new ObjectId(), role: UserRole.EDITOR, username: 'editorUser', email: 'editor@test.com', - }); + }; + this.mock(user); + return user; } restore() { From 786c8367774e65d465fa18ef58d9cefc3ebf7f27 Mon Sep 17 00:00:00 2001 From: Joao Date: Thu, 23 Jan 2025 14:16:36 -0400 Subject: [PATCH 07/11] Refactor validateUser method to be static in ModelWithPermissions --- app/api/odm/ModelWithPermissions.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/app/api/odm/ModelWithPermissions.ts b/app/api/odm/ModelWithPermissions.ts index 26479cf66a..87a40c5684 100644 --- a/app/api/odm/ModelWithPermissions.ts +++ b/app/api/odm/ModelWithPermissions.ts @@ -136,10 +136,10 @@ export class InvalidUserIdError extends Error { } export class ModelWithPermissions extends OdmModel> { - private validateUser(user: DataType | undefined) { + private static validateUser(user: DataType | undefined) { try { - // eslint-disable-next-line no-new - new ObjectId(user?._id?.toString()); + if (typeof user === 'undefined') return; + ObjectId.createFromHexString(user?._id?.toString()!); } catch (e) { throw new InvalidUserIdError(); } @@ -153,7 +153,7 @@ export class ModelWithPermissions extends OdmModel> { return super.save(data, appendPermissionQuery(query, AccessLevels.WRITE, user)); } - this.validateUser(user); + ModelWithPermissions.validateUser(user); return super.save(appendPermissionData(data, user)); } @@ -162,7 +162,8 @@ export class ModelWithPermissions extends OdmModel> { const dataArrayWithPermissions = dataArray.map(data => { if (data._id || data.permissions) return data; - this.validateUser(user); + + ModelWithPermissions.validateUser(user); return appendPermissionData(data, user); }); const query = appendPermissionQuery({}, AccessLevels.WRITE, user); From c062c2b6eab269c09dd1eaeb335b3135e25f5eef Mon Sep 17 00:00:00 2001 From: Joao Date: Wed, 12 Feb 2025 07:19:59 -0400 Subject: [PATCH 08/11] Remove duplicate import of ObjectId in ModelWithPermissions.ts --- app/api/odm/ModelWithPermissions.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/api/odm/ModelWithPermissions.ts b/app/api/odm/ModelWithPermissions.ts index 87a40c5684..a36df5bbf2 100644 --- a/app/api/odm/ModelWithPermissions.ts +++ b/app/api/odm/ModelWithPermissions.ts @@ -1,9 +1,12 @@ +import { ObjectId } from 'mongodb'; import mongoose from 'mongoose'; + import { permissionsContext } from 'api/permissions/permissionsContext'; import { AccessLevels, PermissionType } from 'shared/types/permissionSchema'; import { UserSchema } from 'shared/types/userType'; import { PermissionSchema } from 'shared/types/permissionType'; import { ObjectIdSchema } from 'shared/types/commonTypes'; + import { createUpdateLogHelper } from './logHelper'; import { DataType, @@ -13,7 +16,6 @@ import { UwaziQueryOptions, EnforcedWithId, } from './model'; -import { ObjectId } from 'mongodb'; type WithPermissions = T & { published?: boolean; permissions?: PermissionSchema[] }; type WithPermissionsDataType = DataType>; From e05fba7a3943018c0d9ccb174d8481a8ef69c162 Mon Sep 17 00:00:00 2001 From: Joao Date: Wed, 12 Feb 2025 07:23:31 -0400 Subject: [PATCH 09/11] Fix user ID validation to check for undefined _id property before conversion --- app/api/odm/ModelWithPermissions.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/api/odm/ModelWithPermissions.ts b/app/api/odm/ModelWithPermissions.ts index a36df5bbf2..01c17c35ae 100644 --- a/app/api/odm/ModelWithPermissions.ts +++ b/app/api/odm/ModelWithPermissions.ts @@ -140,8 +140,8 @@ export class InvalidUserIdError extends Error { export class ModelWithPermissions extends OdmModel> { private static validateUser(user: DataType | undefined) { try { - if (typeof user === 'undefined') return; - ObjectId.createFromHexString(user?._id?.toString()!); + if (typeof user?._id === 'undefined') return; + ObjectId.createFromHexString(user._id.toString()); } catch (e) { throw new InvalidUserIdError(); } From 6a4bb59be5d3805a358afc913cbe4bcfdf6c8954 Mon Sep 17 00:00:00 2001 From: Joao Date: Wed, 12 Feb 2025 07:25:16 -0400 Subject: [PATCH 10/11] Fix permissions test to ensure _id is defined before conversion --- app/api/entities/specs/entitySavingManager.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/api/entities/specs/entitySavingManager.spec.ts b/app/api/entities/specs/entitySavingManager.spec.ts index a4a3824fef..c8f70bf85b 100644 --- a/app/api/entities/specs/entitySavingManager.spec.ts +++ b/app/api/entities/specs/entitySavingManager.spec.ts @@ -88,7 +88,7 @@ describe('entitySavingManager', () => { const { entity: savedEntity } = await saveEntity(entity, { ...reqData }); expect(savedEntity.permissions).toEqual([ - { level: 'write', refId: mockedUser._id?.toString(), type: 'user' }, + { level: 'write', refId: mockedUser._id.toString(), type: 'user' }, ]); }); From 373d2e025041c984ac6b146fb6d3272927028371 Mon Sep 17 00:00:00 2001 From: Joao Date: Wed, 12 Feb 2025 07:29:57 -0400 Subject: [PATCH 11/11] Update ModelWithPermissions tests to use unique user IDs for permissions --- .../odm/specs/ModelWithPermissions.spec.ts | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/app/api/odm/specs/ModelWithPermissions.spec.ts b/app/api/odm/specs/ModelWithPermissions.spec.ts index a9e2473f7d..cb62b9063e 100644 --- a/app/api/odm/specs/ModelWithPermissions.spec.ts +++ b/app/api/odm/specs/ModelWithPermissions.spec.ts @@ -18,7 +18,8 @@ describe('ModelWithPermissions', () => { permissions: { type: mongoose.Schema.Types.Mixed, select: false }, fixed: Boolean, }); - const userId = testingDB.id(); + const userId1 = testingDB.id(); + const userId2 = testingDB.id(); const readDocId = testingDB.id(); const writeDocId = testingDB.id(); const writeDoc2Id = testingDB.id(); @@ -35,7 +36,7 @@ describe('ModelWithPermissions', () => { name: 'readDoc', published: false, permissions: [ - { refId: userId.toString(), type: PermissionType.USER, level: AccessLevels.READ }, + { refId: userId1.toString(), type: PermissionType.USER, level: AccessLevels.READ }, ], fixed: true, }, @@ -43,7 +44,7 @@ describe('ModelWithPermissions', () => { _id: writeDocId, name: 'writeDoc', permissions: [ - { refId: userId.toString(), type: PermissionType.USER, level: AccessLevels.WRITE }, + { refId: userId1.toString(), type: PermissionType.USER, level: AccessLevels.WRITE }, ], fixed: true, }, @@ -51,7 +52,7 @@ describe('ModelWithPermissions', () => { _id: writeDoc2Id, name: 'writeDoc2', permissions: [ - { refId: userId.toString(), type: PermissionType.USER, level: AccessLevels.WRITE }, + { refId: userId1.toString(), type: PermissionType.USER, level: AccessLevels.WRITE }, ], fixed: true, }, @@ -64,7 +65,9 @@ describe('ModelWithPermissions', () => { { _id: otherOwnerId, name: 'no shared with user', - permissions: [{ refId: 'user2', type: PermissionType.USER, level: AccessLevels.WRITE }], + permissions: [ + { refId: userId2.toString(), type: PermissionType.USER, level: AccessLevels.WRITE }, + ], fixed: true, }, { @@ -88,7 +91,7 @@ describe('ModelWithPermissions', () => { _id: deleteDocId, name: 'docToDelete', permissions: [ - { refId: userId.toString(), type: PermissionType.USER, level: AccessLevels.WRITE }, + { refId: userId1.toString(), type: PermissionType.USER, level: AccessLevels.WRITE }, ], }, { @@ -112,7 +115,7 @@ describe('ModelWithPermissions', () => { describe('collaborator user', () => { beforeAll(async () => { jest.spyOn(permissionsContext, 'getUserInContext').mockReturnValue({ - _id: userId, + _id: userId1, username: 'User 1', email: 'user@test.test', role: 'collaborator', @@ -240,7 +243,7 @@ describe('ModelWithPermissions', () => { expect(saved).toEqual( expect.objectContaining({ name: 'newDoc', - permissions: [{ refId: userId.toString(), type: 'user', level: 'write' }], + permissions: [{ refId: userId1.toString(), type: 'user', level: 'write' }], }) ); }); @@ -311,11 +314,11 @@ describe('ModelWithPermissions', () => { expect(saved).toMatchObject([ { name: 'newDoc', - permissions: [{ refId: userId.toString(), type: 'user', level: 'write' }], + permissions: [{ refId: userId1.toString(), type: 'user', level: 'write' }], }, { name: 'newDoc2', - permissions: [{ refId: userId.toString(), type: 'user', level: 'write' }], + permissions: [{ refId: userId1.toString(), type: 'user', level: 'write' }], }, ]); });