diff --git a/src/categories/services/categories.service.spec.ts b/src/categories/services/categories.service.spec.ts
index 065e66e4bbd12a8b0774cc9a7180f66ec9a337d2..125760f11ae8bc904623916b72cbaa18d758912c 100644
--- a/src/categories/services/categories.service.spec.ts
+++ b/src/categories/services/categories.service.spec.ts
@@ -39,7 +39,8 @@ describe('CategoriesService', () => {
       { id: 'categoryId', theme: 'Public', name: 'test', modules: [{ id: 'Test', name: 'Text du test' }] },
       { id: 'categoryId', theme: 'Public', name: 'test2', modules: [{ id: 'Test2', name: 'Text du test test 2' }] },
     ];
-    mockCategoriesModel.find.mockResolvedValueOnce(data);
+    mockCategoriesModel.find.mockReturnThis();
+    mockCategoriesModel.exec.mockResolvedValueOnce(data);
     expect(await service.findAll()).toEqual(data);
   });
   it('should findOneComplete structures', async () => {
diff --git a/src/categories/services/categories.service.ts b/src/categories/services/categories.service.ts
index e411dc53174efc122f95b1841cab9f3e9fd72c4c..0cec6afbf3c07bf31fdb50eaff3e1937b6b84a09 100644
--- a/src/categories/services/categories.service.ts
+++ b/src/categories/services/categories.service.ts
@@ -17,7 +17,7 @@ export class CategoriesService {
 
   public async findAll(): Promise<Categories[]> {
     this.logger.debug(`findAll`);
-    return this.categoriesModel.find();
+    return this.categoriesModel.find().exec();
   }
 
   public findOneComplete(categoryId: string): Promise<Categories> {
@@ -57,7 +57,7 @@ export class CategoriesService {
       });
     }
 
-    await this.categoriesModel.updateOne({ id: 'ctm' }, [{ $set: newDocCTM }], { upsert: true });
+    await this.categoriesModel.updateOne({ id: 'ctm' }, [{ $set: newDocCTM }], { upsert: true }).exec();
     return newDocCTM;
   }
 }
diff --git a/src/newsletter/newsletter.service.spec.ts b/src/newsletter/newsletter.service.spec.ts
index 60c91fd90203b6e8ecb7172ef76e38c8dc179a7b..88b588dd5b158a12cffff59f86bf8a2c378545a1 100644
--- a/src/newsletter/newsletter.service.spec.ts
+++ b/src/newsletter/newsletter.service.spec.ts
@@ -115,6 +115,8 @@ describe('NewsletterService', () => {
   describe('newsletterUnsubscribe', () => {
     it('it should not remove subscription for email test@test.com : does not exist', async () => {
       mailchimp.lists.getListMember.mockRejectedValueOnce({ status: 404 });
+      mockNewsletterModel.findOne.mockReturnThis();
+      mockNewsletterModel.exec.mockResolvedValueOnce(undefined);
       try {
         await service.newsletterUnsubscribe('test@test.com');
         // Fail test if above expression doesn't throw anything.
@@ -143,13 +145,15 @@ describe('NewsletterService', () => {
 
   describe('findOne', () => {
     it('it should not find a subscription with email test@test.com', async () => {
-      mockNewsletterModel.findOne.mockResolvedValueOnce(undefined);
+      mockNewsletterModel.findOne.mockReturnThis();
+      mockNewsletterModel.exec.mockResolvedValueOnce(undefined);
       const findOneEmail = await service.findOne('test@test.com');
       expect(findOneEmail).toEqual(undefined);
     });
     it('it should find a subscription with email test2@test.com', async () => {
       const _doc = { _id: 'a1aaaaa1a1', email: 'test2@test.com' } as INewsletterSubscription;
-      mockNewsletterModel.findOne.mockResolvedValueOnce(_doc);
+      mockNewsletterModel.findOne.mockReturnThis();
+      mockNewsletterModel.exec.mockResolvedValueOnce(_doc);
       const findOneEmail = await service.findOne('test2@test.com');
       expect(findOneEmail).toEqual(_doc);
     });
@@ -157,7 +161,8 @@ describe('NewsletterService', () => {
   describe('findAll', () => {
     it('it should find all', async () => {
       const _docs = [{ _id: 'a1aaaaa1a1', email: 'test2@test.com' } as INewsletterSubscription];
-      mockNewsletterModel.find.mockResolvedValueOnce(_docs);
+      mockNewsletterModel.find.mockReturnThis();
+      mockNewsletterModel.exec.mockResolvedValueOnce(_docs);
       const findOneEmail = await service.findAll();
       expect(findOneEmail).toEqual(_docs);
     });
diff --git a/src/newsletter/newsletter.service.ts b/src/newsletter/newsletter.service.ts
index c6f2e752c14288f078c33e830caebfcb9b53402c..4d44ac9441880c1978cf9219fde5b899f551b72c 100644
--- a/src/newsletter/newsletter.service.ts
+++ b/src/newsletter/newsletter.service.ts
@@ -104,11 +104,11 @@ export class NewsletterService {
 
   public async findOne(mail: string): Promise<INewsletterSubscription | undefined> {
     this.logger.debug('findOne');
-    return this.newsletterSubscriptionModel.findOne({ email: mail });
+    return this.newsletterSubscriptionModel.findOne({ email: mail }).exec();
   }
 
   public async findAll(): Promise<NewsletterSubscription[]> {
     this.logger.debug('findAll');
-    return this.newsletterSubscriptionModel.find();
+    return this.newsletterSubscriptionModel.find().exec();
   }
 }
diff --git a/src/online-mediation/onlineMediation.service.spec.ts b/src/online-mediation/onlineMediation.service.spec.ts
index eff0f8dd3f411d335adc3dfc8392ff119d6dd2de..d1a530a8266564237375c6b4e22b75c5865d28f7 100644
--- a/src/online-mediation/onlineMediation.service.spec.ts
+++ b/src/online-mediation/onlineMediation.service.spec.ts
@@ -86,7 +86,8 @@ describe('userRegistryService', () => {
     it('should send the mail and reset db', async () => {
       mockConfigService.isProdConf.mockReturnValueOnce(true);
       mockOnlineMediationModel.exec.mockResolvedValueOnce(onlineMediationMockData);
-      mockOnlineMediationModel.deleteMany.mockResolvedValueOnce(onlineMediationMockData.length);
+      mockOnlineMediationModel.deleteMany.mockReturnThis();
+      mockOnlineMediationModel.exec.mockResolvedValueOnce(onlineMediationMockData.length);
       mockMailService.loadJsonConfig.mockReturnValueOnce({ subject: 'Teste Mail' });
       ejsSpy.mockResolvedValueOnce('coucou');
       const response = await service.sendMailAndResetDb();
@@ -96,7 +97,8 @@ describe('userRegistryService', () => {
     it('should send the mail and reset db', async () => {
       mockConfigService.isProdConf.mockReturnValueOnce(false);
       mockOnlineMediationModel.exec.mockResolvedValueOnce(onlineMediationMockData);
-      mockOnlineMediationModel.deleteMany.mockResolvedValueOnce(onlineMediationMockData.length);
+      mockOnlineMediationModel.deleteMany.mockReturnThis();
+      mockOnlineMediationModel.exec.mockResolvedValueOnce(onlineMediationMockData.length);
       const response = await service.sendMailAndResetDb();
       expect(mailerSpy).toHaveBeenCalledTimes(0);
       expect(response).toBe(onlineMediationMockData.length);
diff --git a/src/online-mediation/onlineMediation.service.ts b/src/online-mediation/onlineMediation.service.ts
index 8341c348d86fb1164d0c609a0d99d31d308bafee..ae44246a535041ec0b394d6936ed8bebab4f5866 100644
--- a/src/online-mediation/onlineMediation.service.ts
+++ b/src/online-mediation/onlineMediation.service.ts
@@ -61,7 +61,7 @@ export class OnlineMediationService {
       }
       //reset docs
       this.logger.debug('deletedocs');
-      return this.OnlineMediationModel.deleteMany({ _id: { $in: docs.map((doc) => doc._id) } });
+      return this.OnlineMediationModel.deleteMany({ _id: { $in: docs.map((doc) => doc._id) } }).exec();
     }
   }
 }
diff --git a/src/parameters/parameters.service.spec.ts b/src/parameters/parameters.service.spec.ts
index fc5df4eda2443d363a368c2754105daf8ff45f51..aba665562985592bcc1560c89a00e9d647d7c7c5 100644
--- a/src/parameters/parameters.service.spec.ts
+++ b/src/parameters/parameters.service.spec.ts
@@ -9,6 +9,7 @@ describe('ParametersService', () => {
 
   const parametersModelMock = {
     findOne: jest.fn(),
+    exec: jest.fn(),
   };
 
   beforeEach(async () => {
@@ -35,7 +36,8 @@ describe('ParametersService', () => {
   describe('getParameters', () => {
     it('should get parameters', async () => {
       const spyer = jest.spyOn(parametersModelMock, 'findOne');
-      parametersModelMock.findOne.mockResolvedValueOnce({ lockdownInfoDisplay: false });
+      parametersModelMock.findOne.mockReturnThis();
+      parametersModelMock.exec.mockResolvedValueOnce({ lockdownInfoDisplay: false });
 
       const result = await service.getParameters();
       expect(spyer).toBeCalledTimes(1);
@@ -44,7 +46,8 @@ describe('ParametersService', () => {
 
     it('should throw error because parameters was not found', async () => {
       const spyer = jest.spyOn(parametersModelMock, 'findOne');
-      parametersModelMock.findOne.mockResolvedValueOnce(null);
+      parametersModelMock.findOne.mockReturnThis();
+      parametersModelMock.exec.mockResolvedValueOnce(null);
 
       try {
         await service.getParameters();
@@ -60,7 +63,8 @@ describe('ParametersService', () => {
   describe('setParameters', () => {
     it('should set parameters', async () => {
       const spyer = jest.spyOn(parametersModelMock, 'findOne');
-      parametersModelMock.findOne.mockResolvedValueOnce({ lockdownInfoDisplay: false, save: jest.fn() });
+      parametersModelMock.findOne.mockReturnThis();
+      parametersModelMock.exec.mockResolvedValueOnce({ lockdownInfoDisplay: false, save: jest.fn() });
 
       const result = await service.setParameterLockdownInfoDisplay(true);
       expect(spyer).toBeCalledTimes(1);
@@ -69,7 +73,8 @@ describe('ParametersService', () => {
 
     it('should throw error because parameters was not found', async () => {
       const spyer = jest.spyOn(parametersModelMock, 'findOne');
-      parametersModelMock.findOne.mockResolvedValueOnce(null);
+      parametersModelMock.findOne.mockReturnThis();
+      parametersModelMock.exec.mockResolvedValueOnce(null);
 
       try {
         await service.setParameterLockdownInfoDisplay(true);
diff --git a/src/parameters/parameters.service.ts b/src/parameters/parameters.service.ts
index 671066506308233fdac87e9b373363439d7c3784..634b4f4b509620f888ff26b33f9f59d6496abc64 100644
--- a/src/parameters/parameters.service.ts
+++ b/src/parameters/parameters.service.ts
@@ -9,7 +9,7 @@ export class ParametersService {
   constructor(@InjectModel(Parameters.name) private parametersModel: Model<IParameters>) {}
 
   public async getParameters(): Promise<Parameters> {
-    const parameters = await this.parametersModel.findOne();
+    const parameters = await this.parametersModel.findOne().exec();
     if (!parameters) {
       throw new HttpException('Parameters not found', HttpStatus.NOT_FOUND);
     }
@@ -17,7 +17,7 @@ export class ParametersService {
   }
 
   public async setParameterLockdownInfoDisplay(lockdownInfoDisplay: boolean): Promise<Parameters> {
-    const parameters = await this.parametersModel.findOne();
+    const parameters = await this.parametersModel.findOne().exec();
     if (!parameters) {
       throw new HttpException('Parameters not found', HttpStatus.NOT_FOUND);
     }
diff --git a/src/structures/services/structures.service.ts b/src/structures/services/structures.service.ts
index 9d5af0f27b38dd672f6e79c1ea127b02237995a9..76dd53860967e36d47d862218055e586fb652e6e 100644
--- a/src/structures/services/structures.service.ts
+++ b/src/structures/services/structures.service.ts
@@ -776,9 +776,11 @@ export class StructuresService {
     structures.forEach((structure) => {
       if (structureIds.includes(structure.id)) {
         this.logger.debug(`cancel structure soft-delete : ${structure.structureName} (${structure._id})`);
-        this.structureModel.findByIdAndUpdate(new Types.ObjectId(structure.id), {
-          toBeDeletedAt: null,
-        });
+        this.structureModel
+          .findByIdAndUpdate(new Types.ObjectId(structure.id), {
+            toBeDeletedAt: null,
+          })
+          .exec();
       } else {
         this.deleteOne(structure);
       }
diff --git a/src/structures/structure-type/structure-type.service.ts b/src/structures/structure-type/structure-type.service.ts
index ed7bb7d005ea64e899a0a60b23a5c73820d8d141..59a0b05ac7a7c8c5a08f7b6e80002b6cb334736f 100644
--- a/src/structures/structure-type/structure-type.service.ts
+++ b/src/structures/structure-type/structure-type.service.ts
@@ -12,10 +12,10 @@ export class StructureTypeService {
   }
 
   public async find(id: string): Promise<StructureTypeDocument> {
-    return this.structureTypeModel.findOne({ _id: id });
+    return this.structureTypeModel.findOne({ _id: id }).exec();
   }
 
   public async findByValue(value: string): Promise<StructureTypeDocument> {
-    return this.structureTypeModel.findOne({ value: value });
+    return this.structureTypeModel.findOne({ value: value }).exec();
   }
 }
diff --git a/src/tcl/tclStopPoint.service.ts b/src/tcl/tclStopPoint.service.ts
index 30b8fcdf0ef22840841f3feda232220fa6d29da5..ae1967c6eaaabe5d6ffec3258bd14199ddeb7474 100644
--- a/src/tcl/tclStopPoint.service.ts
+++ b/src/tcl/tclStopPoint.service.ts
@@ -35,10 +35,8 @@ export class TclStopPointService {
     this.logger.debug('updateStopPoints');
     await this.getUpdatedData();
     const newStopPoints = await this.processReceivedStopPoints(this.receivedStopPoints);
-
-    this.tclStopPointModel.deleteMany({}, () => {
-      this.tclStopPointModel.insertMany(newStopPoints);
-    });
+    await this.tclStopPointModel.deleteMany({}).exec();
+    await this.tclStopPointModel.insertMany(newStopPoints);
   }
 
   /**
diff --git a/src/temp-user/temp-user.service.spec.ts b/src/temp-user/temp-user.service.spec.ts
index 141391ea3b2c78f0d2a0bdb9e08b880a60a0ffa3..458b7c32fcf911d9c2aeea16d56c82dd016ad16b 100644
--- a/src/temp-user/temp-user.service.spec.ts
+++ b/src/temp-user/temp-user.service.spec.ts
@@ -40,7 +40,8 @@ describe('TempUserService', () => {
   describe('create', () => {
     const tmpUser = { email: 'test@test.com', pendingStructuresLink: [] };
     it('should not create temporary user: already exist', async () => {
-      tempUserModelMock.findOne.mockResolvedValueOnce(tmpUser);
+      tempUserModelMock.findOne.mockReturnThis();
+      tempUserModelMock.exec.mockResolvedValueOnce(tmpUser);
       try {
         await service.create(tmpUser, 'PIMMS Framboise');
         expect(true).toBe(false);
@@ -50,32 +51,38 @@ describe('TempUserService', () => {
       }
     });
     it('should create temporary user', async () => {
-      tempUserModelMock.findOne.mockResolvedValueOnce(null).mockResolvedValueOnce(tmpUser);
+      tempUserModelMock.findOne.mockReturnThis();
+      tempUserModelMock.exec.mockResolvedValueOnce(null).mockResolvedValueOnce(tmpUser);
       tempUserModelMock.create.mockResolvedValueOnce(tmpUser);
       expect(await service.create(tmpUser, 'PIMMS Framboise')).toEqual(tmpUser);
     });
   });
   it('should find one', async () => {
     const tmpUser = { email: 'test2@test.com', pendingStructuresLink: [] };
-    tempUserModelMock.findOne.mockResolvedValueOnce(tmpUser);
+    tempUserModelMock.findOne.mockReturnThis();
+    tempUserModelMock.exec.mockResolvedValueOnce(tmpUser);
     expect(await service.findOne('test2@test.com')).toEqual(tmpUser);
   });
 
   it('should find one by id', async () => {
     const tmpUser = { email: 'test2@test.com', pendingStructuresLink: [] };
-    tempUserModelMock.findById.mockResolvedValueOnce(tmpUser);
+    tempUserModelMock.findById.mockReturnThis();
+    tempUserModelMock.exec.mockResolvedValueOnce(tmpUser);
     expect(await service.findById('5fbb92e480a5c257dc0161f0')).toEqual(tmpUser);
   });
 
   describe('delete', () => {
     it('should delete a temp user', async () => {
       const tmpUser = { email: 'test2@test.com', pendingStructuresLink: [] };
-      tempUserModelMock.findOne.mockResolvedValueOnce(tmpUser);
-      tempUserModelMock.deleteOne.mockImplementationOnce(() => ({}));
+      tempUserModelMock.findOne.mockReturnThis();
+      tempUserModelMock.exec.mockResolvedValueOnce(tmpUser);
+      tempUserModelMock.deleteOne.mockReturnThis();
+      tempUserModelMock.exec.mockImplementationOnce(() => ({}));
       expect(await service.delete('toto@test.com')).toEqual(tmpUser);
     });
     it('should return an error : user does not exist', async () => {
-      tempUserModelMock.findOne.mockResolvedValueOnce(null);
+      tempUserModelMock.findOne.mockReturnThis();
+      tempUserModelMock.exec.mockResolvedValueOnce(null);
       try {
         await service.delete('toto@test.com');
         expect(true).toBe(false);
diff --git a/src/temp-user/temp-user.service.ts b/src/temp-user/temp-user.service.ts
index e43f10fd0691dc8394f16f85a27fe6d50e659178..0059bb434618a5d66cf5a3d9f06867b13e00502a 100644
--- a/src/temp-user/temp-user.service.ts
+++ b/src/temp-user/temp-user.service.ts
@@ -30,11 +30,11 @@ export class TempUserService {
   }
 
   public async findOne(mail: string): Promise<ITempUser> {
-    return this.tempUserModel.findOne({ email: mail });
+    return this.tempUserModel.findOne({ email: mail }).exec();
   }
 
   public async findById(id: string): Promise<TempUser> {
-    return this.tempUserModel.findById(new Types.ObjectId(id));
+    return this.tempUserModel.findById(new Types.ObjectId(id)).exec();
   }
 
   public async delete(mail: string): Promise<TempUser> {
@@ -42,7 +42,7 @@ export class TempUserService {
     if (!userInDb) {
       throw new HttpException('User does not exists', HttpStatus.BAD_REQUEST);
     }
-    await this.tempUserModel.deleteOne({ email: mail });
+    await this.tempUserModel.deleteOne({ email: mail }).exec();
     return userInDb;
   }
 
diff --git a/src/users/services/employer.service.spec.ts b/src/users/services/employer.service.spec.ts
index 456ac964c30996f475a09c98772187b7ad4de867..ee6e05392aeee2cdbe9ca6bcd9b04d04d70aabc4 100644
--- a/src/users/services/employer.service.spec.ts
+++ b/src/users/services/employer.service.spec.ts
@@ -31,6 +31,7 @@ describe('EmployerService', () => {
     deleteOne: jest.fn(),
     find: jest.fn(() => mockEmployerModel),
     sort: jest.fn(() => mockEmployerModel),
+    exec: jest.fn(),
   };
   const mockUserService = {
     replaceEmployers: jest.fn(),
@@ -69,7 +70,8 @@ describe('EmployerService', () => {
   });
 
   it('findAll', async () => {
-    mockEmployerModel.sort.mockResolvedValueOnce([
+    mockEmployerModel.sort.mockReturnThis();
+    mockEmployerModel.exec.mockResolvedValueOnce([
       {
         _id: new Types.ObjectId('6231aefe76598527c8d0b5bc'),
         name: 'Metro',
@@ -85,7 +87,8 @@ describe('EmployerService', () => {
     expect(reply.length).toBe(2);
   });
   it('findOne', async () => {
-    mockEmployerModel.findById.mockResolvedValueOnce({
+    mockEmployerModel.findById.mockReturnThis();
+    mockEmployerModel.exec.mockResolvedValueOnce({
       _id: new Types.ObjectId('6231aefe76598527c8d0b5bc'),
       name: 'Sopra',
       validated: true,
@@ -94,7 +97,8 @@ describe('EmployerService', () => {
     expect(reply).toBeTruthy();
   });
   it('findAllValidated', async () => {
-    mockEmployerModel.find.mockResolvedValueOnce([
+    mockEmployerModel.find.mockReturnThis();
+    mockEmployerModel.exec.mockResolvedValueOnce([
       {
         _id: new Types.ObjectId('6231aefe76598527c8d0b5bc'),
         name: 'Sopra',
@@ -106,7 +110,8 @@ describe('EmployerService', () => {
   });
 
   it('findAllUnvalidated', async () => {
-    mockEmployerModel.find.mockResolvedValueOnce([
+    mockEmployerModel.find.mockReturnThis();
+    mockEmployerModel.exec.mockResolvedValueOnce([
       {
         _id: new Types.ObjectId('6231aefe76598527c8d0b5bc'),
         name: 'Sopra',
@@ -118,7 +123,8 @@ describe('EmployerService', () => {
   });
 
   it('finds all unvalidated employers', async () => {
-    mockEmployerModel.find.mockResolvedValueOnce([
+    mockEmployerModel.find.mockReturnThis();
+    mockEmployerModel.exec.mockResolvedValueOnce([
       {
         _id: new Types.ObjectId('6231aefe76598527c8d0b5bc'),
         name: 'Metro',
@@ -130,7 +136,8 @@ describe('EmployerService', () => {
   });
 
   it('finds all validated employers', async () => {
-    mockEmployerModel.find.mockResolvedValueOnce([
+    mockEmployerModel.find.mockReturnThis();
+    mockEmployerModel.exec.mockResolvedValueOnce([
       {
         _id: new Types.ObjectId('6231aefe76598527c8d0b5bc'),
         name: 'Metro',
@@ -147,7 +154,8 @@ describe('EmployerService', () => {
   });
 
   it('findByName', async () => {
-    mockEmployerModel.findOne.mockResolvedValue({
+    mockEmployerModel.findOne.mockReturnThis();
+    mockEmployerModel.exec.mockResolvedValueOnce({
       _id: new Types.ObjectId('6231aefe76598527c8d0b5bc'),
       name: 'Sopra',
       validated: true,
@@ -163,7 +171,8 @@ describe('EmployerService', () => {
         name: 'Sopra',
         validated: false,
       });
-      mockEmployerModel.findOne.mockResolvedValue({
+      mockEmployerModel.findOne.mockReturnThis();
+      mockEmployerModel.exec.mockResolvedValueOnce({
         _id: new Types.ObjectId('6231aefe76598527c8d0b5bc'),
         name: 'Sopra',
         validated: false,
@@ -183,7 +192,8 @@ describe('EmployerService', () => {
         name: 'Sopra',
         validated: false,
       });
-      mockEmployerModel.findOne.mockResolvedValue({
+      mockEmployerModel.findOne.mockReturnThis();
+      mockEmployerModel.exec.mockResolvedValueOnce({
         _id: new Types.ObjectId('6231aefe76598527c8d0b5bc'),
         name: 'Sopra',
         validated: false,
@@ -197,12 +207,14 @@ describe('EmployerService', () => {
   });
 
   it('delete', async () => {
-    mockEmployerModel.findOne.mockResolvedValueOnce({
+    mockEmployerModel.findOne.mockReturnThis();
+    mockEmployerModel.exec.mockResolvedValueOnce({
       _id: new Types.ObjectId('6231aefe76598527c8d0b5bc'),
       name: 'Sopra',
       validated: true,
     });
-    mockEmployerModel.deleteOne.mockResolvedValueOnce({
+    mockEmployerModel.deleteOne.mockReturnThis();
+    mockEmployerModel.exec.mockResolvedValueOnce({
       n: 1,
       ok: 1,
       deletedCount: 1,
@@ -222,7 +234,8 @@ describe('EmployerService', () => {
     it('initEmployerIndex', async () => {
       mockEmployerSearchService.dropIndex.mockResolvedValueOnce({});
       mockEmployerSearchService.createEmployerIndex.mockResolvedValueOnce({});
-      mockEmployerModel.sort.mockResolvedValueOnce([
+      mockEmployerModel.sort.mockReturnThis();
+      mockEmployerModel.exec.mockResolvedValueOnce([
         {
           _id: new Types.ObjectId('6231aefe76598527c8d0b5bc'),
           name: 'Metro',
@@ -258,7 +271,8 @@ describe('EmployerService', () => {
         name: 'Metro',
         validated: true,
       };
-      mockEmployerModel.findById
+      mockEmployerModel.findById.mockReturnThis();
+      mockEmployerModel.exec
         .mockResolvedValueOnce({
           _id: new Types.ObjectId('623aed68c5d45b6fbbaa7e60'),
           name: 'Sopra',
@@ -283,7 +297,8 @@ describe('EmployerService', () => {
         name: 'Metro',
         validated: true,
       };
-      mockEmployerModel.findById.mockResolvedValueOnce(null).mockResolvedValueOnce(result);
+      mockEmployerModel.findById.mockReturnThis();
+      mockEmployerModel.exec.mockResolvedValueOnce(null).mockResolvedValueOnce(result);
       jest.spyOn(service, 'deleteInvalidEmployer').mockRejectedValueOnce({});
       mockUserService.replaceEmployers.mockResolvedValueOnce(null);
       try {
@@ -345,7 +360,8 @@ describe('EmployerService', () => {
 
   describe('validate', () => {
     it('should validate employer', async () => {
-      mockEmployerModel.findById.mockResolvedValueOnce({
+      mockEmployerModel.findById.mockReturnThis();
+      mockEmployerModel.exec.mockResolvedValueOnce({
         _id: new Types.ObjectId('623aed68c5d45b6fbbaa7e60'),
         name: 'Sopra',
         validated: false,
@@ -355,7 +371,8 @@ describe('EmployerService', () => {
       expect(employer.validated).toBe(true);
     });
     it('should throw exception', async () => {
-      mockEmployerModel.findById.mockResolvedValueOnce(null);
+      mockEmployerModel.findById.mockReturnThis();
+      mockEmployerModel.exec.mockResolvedValueOnce(null);
       try {
         await service.validate('623aed68c5d45b6fbbaa7e60');
         expect(true).toBe(false);
@@ -368,7 +385,8 @@ describe('EmployerService', () => {
 
   describe('update', () => {
     it('should update employer', async () => {
-      mockEmployerModel.findById.mockResolvedValueOnce({
+      mockEmployerModel.findById.mockReturnThis();
+      mockEmployerModel.exec.mockResolvedValueOnce({
         _id: new Types.ObjectId('623aed68c5d45b6fbbaa7e60'),
         name: 'Sopraaa',
         validated: false,
@@ -378,7 +396,8 @@ describe('EmployerService', () => {
       expect(employer.name).toBe('Sopra');
     });
     it('should throw exception', async () => {
-      mockEmployerModel.findById.mockResolvedValueOnce(null);
+      mockEmployerModel.findById.mockReturnThis();
+      mockEmployerModel.exec.mockResolvedValueOnce(null);
       try {
         await service.update('623aed68c5d45b6fbbaa7e60', { name: 'Sopra' });
         expect(true).toBe(false);
@@ -391,14 +410,16 @@ describe('EmployerService', () => {
 
   describe('deleteInvalidEmployer', () => {
     it('should delete invalid employer', async () => {
-      mockEmployerModel.findById.mockResolvedValueOnce({
+      mockEmployerModel.findById.mockReturnThis();
+      mockEmployerModel.exec.mockResolvedValueOnce({
         _id: new Types.ObjectId('623aed68c5d45b6fbbaa7e60'),
         name: 'Sopra',
         validated: false,
         save: jest.fn().mockResolvedValueOnce(null),
       });
       mockEmployerSearchService.deleteIndex.mockResolvedValueOnce(null);
-      mockEmployerModel.deleteOne.mockResolvedValueOnce({
+      mockEmployerModel.deleteOne.mockReturnThis();
+      mockEmployerModel.exec.mockResolvedValueOnce({
         _id: new Types.ObjectId('623aed68c5d45b6fbbaa7e60'),
         name: 'Sopra',
         validated: false,
@@ -412,7 +433,8 @@ describe('EmployerService', () => {
 
   describe('deleteOneId', () => {
     it('should delete ', async () => {
-      mockEmployerModel.findOne.mockResolvedValueOnce({
+      mockEmployerModel.findOne.mockReturnThis();
+      mockEmployerModel.exec.mockResolvedValueOnce({
         _id: '6231aefe76598527c8d0b5bc',
         validationToken:
           'cf1c74c22cedb6b575945098db42d2f493fb759c9142c6aff7980f252886f36ee086574ee99a06bc99119079257116c959c8ec870949cebdef2b293666dbca42',
@@ -450,7 +472,8 @@ describe('EmployerService', () => {
       });
     });
     it('should throw an error ', async () => {
-      mockEmployerModel.findOne.mockResolvedValueOnce(null);
+      mockEmployerModel.findOne.mockReturnThis();
+      mockEmployerModel.exec.mockResolvedValueOnce(null);
 
       try {
         expect(await service.deleteOneId('6231aefe76598527c8d0b5bc')).toStrictEqual({
diff --git a/src/users/services/employer.service.ts b/src/users/services/employer.service.ts
index 991cda54d791657ae592a6831f34e9b26a9142c2..e3806bf1e672192eaeebc4714dc5d7dc7fbc7b94 100644
--- a/src/users/services/employer.service.ts
+++ b/src/users/services/employer.service.ts
@@ -24,27 +24,27 @@ export class EmployerService {
 
   public async findAll(): Promise<Employer[]> {
     this.logger.debug('findAll');
-    return this.employerModel.find().sort({ name: 1 });
+    return this.employerModel.find().sort({ name: 1 }).exec();
   }
 
   public async findOne(idParam: string): Promise<EmployerDocument> {
     this.logger.debug('findOne');
-    return this.employerModel.findById(new Types.ObjectId(idParam));
+    return this.employerModel.findById(new Types.ObjectId(idParam)).exec();
   }
 
   public async findAllUnvalidated(): Promise<Employer[]> {
     this.logger.debug('findAllUnvalidated');
-    return this.employerModel.find({ validated: false });
+    return this.employerModel.find({ validated: false }).exec();
   }
 
   public async findAllValidated(): Promise<IEmployer[]> {
     this.logger.debug(`findAllValidated`);
-    return this.employerModel.find({ validated: true });
+    return this.employerModel.find({ validated: true }).exec();
   }
 
   public async findByName(name: string): Promise<EmployerDocument> {
     this.logger.debug('findByName');
-    return this.employerModel.findOne({ name });
+    return this.employerModel.findOne({ name }).exec();
   }
 
   public async create(employer: CreateEmployerDto, validated = false, sendAdminNotification = true): Promise<Employer> {
@@ -82,7 +82,7 @@ export class EmployerService {
 
   public async validate(employerId: string): Promise<Employer> {
     this.logger.debug(`validateEmployer: ${employerId}`);
-    const employer = await this.employerModel.findById(new Types.ObjectId(employerId));
+    const employer = await this.employerModel.findById(new Types.ObjectId(employerId)).exec();
     if (employer) {
       employer.validated = true;
       employer.save();
@@ -94,7 +94,7 @@ export class EmployerService {
 
   public async update(employerId: string, newEmployer: CreateEmployerDto): Promise<Employer> {
     this.logger.debug(`editEmployer: ${employerId}`);
-    const employer = await this.employerModel.findById(new Types.ObjectId(employerId));
+    const employer = await this.employerModel.findById(new Types.ObjectId(employerId)).exec();
     if (employer) {
       employer.name = newEmployer.name;
       employer.save();
@@ -109,8 +109,8 @@ export class EmployerService {
     targetEmployerId,
   }: MergeEmployerDto): Promise<Employer | HttpException> {
     this.logger.debug(`mergeEmployer: ${sourceEmployerId} into ${targetEmployerId}`);
-    const sourceEmployer = await this.employerModel.findById(new Types.ObjectId(sourceEmployerId));
-    const targetEmployer = await this.employerModel.findById(new Types.ObjectId(targetEmployerId));
+    const sourceEmployer = await this.employerModel.findById(new Types.ObjectId(sourceEmployerId)).exec();
+    const targetEmployer = await this.employerModel.findById(new Types.ObjectId(targetEmployerId)).exec();
     if (targetEmployer && sourceEmployer) {
       await this.userService.replaceEmployers(sourceEmployer, targetEmployer);
       if (!sourceEmployer.validated) {
@@ -124,13 +124,13 @@ export class EmployerService {
 
   public async deleteInvalidEmployer(id: string): Promise<mongodb.DeleteResult> {
     this.logger.debug(`deleteInvalidEmployer: ${id}`);
-    const document = await this.employerModel.findById(new Types.ObjectId(id));
+    const document = await this.employerModel.findById(new Types.ObjectId(id)).exec();
     this.employerSearchService.deleteIndex(document, document._id);
-    return this.employerModel.deleteOne({ _id: id });
+    return this.employerModel.deleteOne({ _id: id }).exec();
   }
 
   public async deleteOneId(id: string): Promise<Employer> {
-    const employer = await this.employerModel.findOne({ _id: id });
+    const employer = await this.employerModel.findOne({ _id: id }).exec();
     if (!employer) {
       throw new HttpException('Invalid employer id', HttpStatus.BAD_REQUEST);
     }
@@ -141,7 +141,7 @@ export class EmployerService {
     this.logger.debug(`deleteByname: ${name}`);
     const document = await this.findByName(name);
     this.employerSearchService.deleteIndex(document, document._id);
-    return this.employerModel.deleteOne({ name });
+    return this.employerModel.deleteOne({ name }).exec();
   }
 
   // SEARCH
diff --git a/src/users/services/jobs.service.spec.ts b/src/users/services/jobs.service.spec.ts
index fe36c9fb8ecdba05aee9448ae92ef79aa92e7216..9d53daca0de9d26aa775d9942959dee707606fa1 100644
--- a/src/users/services/jobs.service.spec.ts
+++ b/src/users/services/jobs.service.spec.ts
@@ -24,10 +24,10 @@ describe('JobsService', () => {
     populate: jest.fn().mockReturnThis(),
     collation: jest.fn().mockReturnThis(),
     sort: jest.fn().mockReturnThis(),
-    exec: jest.fn().mockReturnThis(),
-    findOne: jest.fn(),
-    findById: jest.fn(),
-    deleteOne: jest.fn(),
+    exec: jest.fn(),
+    findOne: jest.fn().mockReturnThis(),
+    findById: jest.fn().mockReturnThis(),
+    deleteOne: jest.fn().mockReturnThis(),
   };
 
   const mockJobsGroupModel = {
@@ -109,7 +109,7 @@ describe('JobsService', () => {
   });
 
   it('findUnvalidated', async () => {
-    mockJobModel.find.mockResolvedValue([
+    mockJobModel.exec.mockResolvedValueOnce([
       {
         _id: new Types.ObjectId('6231aefe76598527c8d0b5bc'),
         name: 'CNFS',
@@ -123,7 +123,7 @@ describe('JobsService', () => {
   });
 
   it('findByName', async () => {
-    mockJobModel.findOne.mockResolvedValue({
+    mockJobModel.exec.mockResolvedValueOnce({
       _id: new Types.ObjectId('6231aefe76598527c8d0b5bc'),
       name: 'CNFS',
       validated: true,
@@ -134,7 +134,7 @@ describe('JobsService', () => {
     expect(reply).toBeTruthy();
   });
   it('findOne', async () => {
-    mockJobModel.findById.mockResolvedValue({
+    mockJobModel.exec.mockResolvedValueOnce({
       _id: new Types.ObjectId('6231aefe76598527c8d0b5bc'),
       name: 'CNFS',
       validated: true,
@@ -147,7 +147,7 @@ describe('JobsService', () => {
 
   describe('createJob', () => {
     it('create', async () => {
-      mockJobModel.create.mockResolvedValue({
+      mockJobModel.create.mockResolvedValueOnce({
         _id: new Types.ObjectId('6231aefe76598527c8d0b5bc'),
         name: 'Dev',
         validated: false,
@@ -198,7 +198,7 @@ describe('JobsService', () => {
   });
 
   it('createFromAdmin', async () => {
-    mockJobModel.create.mockResolvedValue({
+    mockJobModel.create.mockResolvedValueOnce({
       _id: new Types.ObjectId('6231aefe76598527c8d0b5bc'),
       name: 'Dev',
       validated: true,
@@ -271,7 +271,7 @@ describe('JobsService', () => {
 
   describe('validate', () => {
     it('should validate job', async () => {
-      mockJobModel.findById.mockResolvedValueOnce({
+      mockJobModel.exec.mockResolvedValueOnce({
         _id: new Types.ObjectId('623aed68c5d45b6fbbaa7e60'),
         name: 'Dev',
         validated: false,
@@ -281,7 +281,7 @@ describe('JobsService', () => {
       expect(job.validated).toBe(true);
     });
     it('should throw exception', async () => {
-      mockJobModel.findById.mockResolvedValueOnce(null);
+      mockJobModel.exec.mockResolvedValueOnce(null);
       try {
         await service.validate('623aed68c5d45b6fbbaa7e60');
         expect(true).toBe(false);
@@ -301,7 +301,7 @@ describe('JobsService', () => {
         hasPersonalOffer: false,
         jobsGroup: null,
       };
-      mockJobModel.findById
+      mockJobModel.exec
         .mockResolvedValueOnce({
           _id: new Types.ObjectId('623aed68c5d45b6fbbaa7e60'),
           name: 'Dev',
@@ -322,7 +322,7 @@ describe('JobsService', () => {
       }
     });
     it('should throw error if target job is not validated', async () => {
-      mockJobModel.findById
+      mockJobModel.exec
         .mockResolvedValueOnce({
           _id: new Types.ObjectId('623aed68c5d45b6fbbaa7e60'),
           name: 'Dev',
@@ -340,7 +340,7 @@ describe('JobsService', () => {
       }
     });
     it('should throw error if no source or target job', async () => {
-      mockJobModel.findById.mockResolvedValueOnce(null).mockResolvedValueOnce({
+      mockJobModel.exec.mockResolvedValueOnce(null).mockResolvedValueOnce({
         _id: new Types.ObjectId('623aed68c5d45b6fbbaa7e60'),
         name: 'Dev',
         validated: false,
@@ -358,7 +358,7 @@ describe('JobsService', () => {
   });
 
   it('deleteInvalidJob', async () => {
-    mockJobModel.deleteOne.mockResolvedValueOnce(null);
+    mockJobModel.exec.mockResolvedValueOnce(null);
     const spyer = jest.spyOn(service, 'deleteInvalidJob');
     await service.deleteInvalidJob('623aed68c5d45b6fbbaa7e60');
     expect(spyer.mock.calls.length).toEqual(1);
@@ -366,7 +366,7 @@ describe('JobsService', () => {
 
   describe('deleteOneId', () => {
     it('should delete ', async () => {
-      mockJobModel.findOne.mockResolvedValueOnce({
+      mockJobModel.exec.mockResolvedValueOnce({
         _id: new Types.ObjectId('623aed68c5d45b6fbbaa7e60'),
         name: 'Dev',
         validated: false,
@@ -376,7 +376,7 @@ describe('JobsService', () => {
       expect(reply).toBe('toto');
     });
     it('should delete ', async () => {
-      mockJobModel.findOne.mockResolvedValueOnce(null);
+      mockJobModel.exec.mockResolvedValueOnce(null);
       try {
         await service.deleteOneId('623aed68c5d45b6fbbaa7e60');
         expect(true).toBe(false);
@@ -401,7 +401,7 @@ describe('JobsService', () => {
         hasPersonalOffer: true,
         jobsGroup: null,
       };
-      mockJobModel.findById.mockResolvedValue({
+      mockJobModel.exec.mockResolvedValueOnce({
         _id: new Types.ObjectId('6231aefe76598527c8d0b5bc'),
         name: 'CNFS old',
         validated: true,
@@ -421,7 +421,7 @@ describe('JobsService', () => {
       hasPersonalOffer: true,
       jobsGroup: null,
     };
-    mockJobModel.findById.mockResolvedValue(null);
+    mockJobModel.exec.mockResolvedValueOnce(null);
     try {
       await service.update('623aed68c5d45b6fbbaa7e60', newJobDto);
       expect(true).toBe(false);
diff --git a/src/users/services/jobs.service.ts b/src/users/services/jobs.service.ts
index c9c1fe472aa5d3b4caa7ef749e2e2c9fb2edf25a..1f2d0cab10d1e3bbf8332acd30c7df5595a1853c 100644
--- a/src/users/services/jobs.service.ts
+++ b/src/users/services/jobs.service.ts
@@ -37,17 +37,17 @@ export class JobsService {
 
   public async findByName(name: string): Promise<JobDocument> {
     this.logger.debug('findByName');
-    return this.jobModel.findOne({ name });
+    return this.jobModel.findOne({ name }).exec();
   }
 
   public async findOne(idParam: string): Promise<JobDocument> {
     this.logger.debug('findOne');
-    return this.jobModel.findById(new Types.ObjectId(idParam));
+    return this.jobModel.findById(new Types.ObjectId(idParam)).exec();
   }
 
   public async findAllUnvalidated(): Promise<IJob[]> {
     this.logger.debug('findAllUnvalidated');
-    return this.jobModel.find({ validated: false });
+    return this.jobModel.find({ validated: false }).exec();
   }
 
   public async create(
@@ -91,7 +91,7 @@ export class JobsService {
 
   public async validate(jobId: string): Promise<Job> {
     this.logger.debug(`validateJob: ${jobId}`);
-    const job = await this.jobModel.findById(new Types.ObjectId(jobId));
+    const job = await this.jobModel.findById(new Types.ObjectId(jobId)).exec();
     if (job) {
       job.validated = true;
       job.save();
@@ -103,8 +103,8 @@ export class JobsService {
 
   public async mergeJob({ sourceJobId, targetJobId }: MergeJobDto): Promise<Job | HttpException> {
     this.logger.debug(`mergeJob: ${sourceJobId} into ${targetJobId}`);
-    const sourceJob = await this.jobModel.findById(new Types.ObjectId(sourceJobId));
-    const targetJob = await this.jobModel.findById(new Types.ObjectId(targetJobId));
+    const sourceJob = await this.jobModel.findById(new Types.ObjectId(sourceJobId)).exec();
+    const targetJob = await this.jobModel.findById(new Types.ObjectId(targetJobId)).exec();
     if (targetJob && sourceJob) {
       this.logger.debug(`Both jobs : ${JSON.stringify(sourceJob)}, ${JSON.stringify(targetJob)}`);
       await this.userService.replaceJobs(sourceJob, targetJob);
@@ -119,11 +119,11 @@ export class JobsService {
 
   public async deleteInvalidJob(id: string): Promise<mongodb.DeleteResult> {
     this.logger.debug(`deleteInvalidJob: ${id}`);
-    return this.jobModel.deleteOne({ _id: id });
+    return this.jobModel.deleteOne({ _id: id }).exec();
   }
 
   public async deleteOneId(id: string): Promise<Job> {
-    const job = await this.jobModel.findOne({ _id: id });
+    const job = await this.jobModel.findOne({ _id: id }).exec();
     if (!job) {
       throw new HttpException('Invalid job id', HttpStatus.BAD_REQUEST);
     }
@@ -132,7 +132,7 @@ export class JobsService {
 
   public async update(jobId: string, newJob: CreateJobDto): Promise<Job> {
     this.logger.debug(`editJob: ${jobId}`);
-    const job = await this.jobModel.findById(new Types.ObjectId(jobId));
+    const job = await this.jobModel.findById(new Types.ObjectId(jobId)).exec();
     if (job) {
       job.name = newJob.name;
       job.hasPersonalOffer = newJob.hasPersonalOffer;
diff --git a/src/users/services/jobsGroups.service.spec.ts b/src/users/services/jobsGroups.service.spec.ts
index 2288802605c8e0d2531a19778c205f74952d7865..ee25b30ddf2196b67351dfb80629611f4b52ebcf 100644
--- a/src/users/services/jobsGroups.service.spec.ts
+++ b/src/users/services/jobsGroups.service.spec.ts
@@ -18,10 +18,10 @@ describe('JobsGroupsService', () => {
     find: jest.fn().mockReturnThis(),
     collation: jest.fn().mockReturnThis(),
     sort: jest.fn().mockReturnThis(),
-    exec: jest.fn().mockReturnThis(),
-    findOne: jest.fn(),
-    findById: jest.fn(),
-    deleteOne: jest.fn(),
+    exec: jest.fn(),
+    findOne: jest.fn().mockReturnThis(),
+    findById: jest.fn().mockReturnThis(),
+    deleteOne: jest.fn().mockReturnThis(),
   };
 
   const mockJobModel = {
@@ -93,7 +93,7 @@ describe('JobsGroupsService', () => {
   });
 
   it('findByName', async () => {
-    mockJobsGroupsModel.findOne.mockResolvedValue({
+    mockJobsGroupsModel.exec.mockResolvedValueOnce({
       _id: new Types.ObjectId('6231aefe76598527c8d0b5bc'),
       name: 'Technique',
     });
@@ -101,7 +101,7 @@ describe('JobsGroupsService', () => {
     expect(reply).toBeTruthy();
   });
   it('findOne', async () => {
-    mockJobsGroupsModel.findById.mockResolvedValue({
+    mockJobsGroupsModel.exec.mockResolvedValueOnce({
       _id: new Types.ObjectId('6231aefe76598527c8d0b5bc'),
       name: 'Technique',
     });
@@ -111,7 +111,7 @@ describe('JobsGroupsService', () => {
 
   describe('createJobsGroups', () => {
     it('create', async () => {
-      mockJobsGroupsModel.create.mockResolvedValue({
+      mockJobsGroupsModel.create.mockResolvedValueOnce({
         _id: new Types.ObjectId('6231aefe76598527c8d0b5bc'),
         name: 'Technique',
       });
@@ -132,7 +132,7 @@ describe('JobsGroupsService', () => {
         _id: new Types.ObjectId('6231aefe76598527c8d0b5bc'),
         name: 'Technique',
       };
-      mockJobsGroupsModel.findById.mockResolvedValue({
+      mockJobsGroupsModel.exec.mockResolvedValueOnce({
         _id: new Types.ObjectId('6231aefe76598527c8d0b5bc'),
         name: 'Technique old',
         save: jest.fn().mockResolvedValueOnce(newJobsGroups),
@@ -146,7 +146,7 @@ describe('JobsGroupsService', () => {
     const newJobsGroupsDto = {
       name: 'Technique',
     };
-    mockJobsGroupsModel.findById.mockResolvedValue(null);
+    mockJobsGroupsModel.exec.mockResolvedValueOnce(null);
     try {
       await service.update('623aed68c5d45b6fbbaa7e60', newJobsGroupsDto);
       expect(true).toBe(false);
diff --git a/src/users/services/jobsGroups.service.ts b/src/users/services/jobsGroups.service.ts
index c763a58622ff43b07ba18a72bd67efbe5779f7e7..aa88edde02e46f609c7571ac6b7d8b5f2b4ea52d 100644
--- a/src/users/services/jobsGroups.service.ts
+++ b/src/users/services/jobsGroups.service.ts
@@ -33,12 +33,12 @@ export class JobsGroupsService {
 
   public async findByName(name: string): Promise<JobsGroupsDocument> {
     this.logger.debug(`findByName jobsGroups: ${name}`);
-    return this.jobsGroupsModel.findOne({ name });
+    return this.jobsGroupsModel.findOne({ name }).exec();
   }
 
   public async findOne(idParam: string): Promise<JobsGroupsDocument> {
     this.logger.debug(`findOne jobsGroups: ${idParam}`);
-    return this.jobsGroupsModel.findById(new Types.ObjectId(idParam));
+    return this.jobsGroupsModel.findById(new Types.ObjectId(idParam)).exec();
   }
 
   public async populateJobsGroupsWithJobs(jobsGroups: JobsGroupsDocument[]) {
@@ -64,7 +64,7 @@ export class JobsGroupsService {
 
   public async update(jobsGroupId: string, newJobsGroup: CreateJobsGroupsDto): Promise<JobsGroups> {
     this.logger.debug(`edit JobsGroup: ${jobsGroupId}`);
-    const jobsGroups = await this.jobsGroupsModel.findById(new Types.ObjectId(jobsGroupId));
+    const jobsGroups = await this.jobsGroupsModel.findById(new Types.ObjectId(jobsGroupId)).exec();
     if (!jobsGroups) {
       throw new HttpException('Jobs group not found', HttpStatus.NOT_FOUND);
     }
diff --git a/src/users/services/users.service.spec.ts b/src/users/services/users.service.spec.ts
index b503bb146dea557380aa3d544a431992b8c85a5c..71c895d0638bf171a3a3e3fbf541c7ac40a55039 100644
--- a/src/users/services/users.service.spec.ts
+++ b/src/users/services/users.service.spec.ts
@@ -8,7 +8,7 @@ import * as bcrypt from 'bcrypt';
 import { Types } from 'mongoose';
 import { employersMockData } from '../../../test/mock/data/employers.mock.data';
 import { personalOffersDataMock } from '../../../test/mock/data/personalOffers.mock.data';
-import { userDetails, usersMockData } from '../../../test/mock/data/users.mock.data';
+import { userDetails, userRegistryMockData, usersMockData } from '../../../test/mock/data/users.mock.data';
 import { MailerMockService } from '../../../test/mock/services/mailer.mock.service';
 import { LoginDto } from '../../auth/login-dto';
 import { ConfigurationModule } from '../../configuration/configuration.module';
@@ -417,15 +417,18 @@ describe('UsersService', () => {
 
     it('should updateUserProfile', async () => {
       const spyer = jest.spyOn(mockUserRegistrySearchService, 'update');
-      mockUserModel.findOne.mockReturnThis();
-      mockUserModel.findByIdAndUpdate.mockResolvedValueOnce(usersMockData[0]);
+      const spyerFindPopulate = jest
+        .spyOn(service, 'findPopulatedUserRegistryById')
+        .mockImplementationOnce(async () => userRegistryMockData);
+      mockUserModel.exec.mockResolvedValueOnce(usersMockData[0]);
       const result = await service.updateUserProfile(new Types.ObjectId('627b85aea0466f0f132e1599'), employer, job);
       expect(spyer).toBeCalledTimes(1);
+      expect(spyerFindPopulate).toBeCalledTimes(1);
       expect(result).toEqual(usersMockData[0]);
     });
     it('should not updateUserProfile', async () => {
       const spyer = jest.spyOn(mockUserRegistrySearchService, 'update');
-      mockUserModel.findByIdAndUpdate.mockResolvedValueOnce(null);
+      mockUserModel.exec.mockResolvedValueOnce(null);
       const result = await service.updateUserProfile(new Types.ObjectId('627b85aea0466f0f132e1599'), employer, job);
       expect(spyer).toBeCalledTimes(0);
       expect(result).toEqual(null);
@@ -440,15 +443,18 @@ describe('UsersService', () => {
     } as JobDocument;
     it('should updateUserJob', async () => {
       const spyer = jest.spyOn(mockUserRegistrySearchService, 'update');
-      mockUserModel.findByIdAndUpdate.mockResolvedValueOnce(usersMockData[0]);
-      mockUserModel.findOne.mockReturnThis();
+      const spyerFindPopulate = jest
+        .spyOn(service, 'findPopulatedUserRegistryById')
+        .mockImplementationOnce(async () => userRegistryMockData);
+      mockUserModel.exec.mockResolvedValueOnce(usersMockData[0]);
       const result = await service.updateUserJob(new Types.ObjectId('627b85aea0466f0f132e1599'), job);
       expect(spyer).toBeCalledTimes(1);
+      expect(spyerFindPopulate).toBeCalledTimes(1);
       expect(result).toEqual(usersMockData[0]);
     });
     it('should not updateUserJob', async () => {
       const spyer = jest.spyOn(mockUserRegistrySearchService, 'update');
-      mockUserModel.findByIdAndUpdate.mockResolvedValueOnce(null);
+      mockUserModel.exec.mockResolvedValueOnce(null);
       const result = await service.updateUserJob(new Types.ObjectId('627b85aea0466f0f132e1599'), job);
       expect(spyer).toBeCalledTimes(0);
       expect(result).toEqual(null);
@@ -463,14 +469,18 @@ describe('UsersService', () => {
     } as EmployerDocument;
     it('should updateUserEmployer', async () => {
       const spyer = jest.spyOn(mockUserRegistrySearchService, 'update');
-      mockUserModel.findByIdAndUpdate.mockResolvedValueOnce(usersMockData[0]);
+      const spyerFindPopulate = jest
+        .spyOn(service, 'findPopulatedUserRegistryById')
+        .mockImplementationOnce(async () => userRegistryMockData);
+      mockUserModel.exec.mockResolvedValueOnce(usersMockData[0]);
       const result = await service.updateUserEmployer(new Types.ObjectId('627b85aea0466f0f132e1599'), employer);
       expect(spyer).toBeCalledTimes(1);
+      expect(spyerFindPopulate).toBeCalledTimes(1);
       expect(result).toEqual(usersMockData[0]);
     });
     it('should not updateUserEmployer', async () => {
       const spyer = jest.spyOn(mockUserRegistrySearchService, 'update');
-      mockUserModel.findByIdAndUpdate.mockResolvedValueOnce(null);
+      mockUserModel.exec.mockResolvedValueOnce(null);
       const result = await service.updateUserEmployer(new Types.ObjectId('627b85aea0466f0f132e1599'), employer);
       expect(spyer).toBeCalledTimes(0);
       expect(result).toEqual(null);
@@ -481,16 +491,19 @@ describe('UsersService', () => {
     it('should update user details', async () => {
       const user = usersMockData[0];
       const detailsDto: UpdateDetailsDto = { name: 'Michel', surname: 'Chelmi', phone: '0601020304' };
-      mockUserModel.findByIdAndUpdate.mockResolvedValueOnce({ ...user, ...detailsDto });
-      mockUserModel.findPopulatedUserRegistryById.mockResolvedValueOnce({ ...user, ...detailsDto });
-      mockUserModel.findOne.mockReturnThis();
+      mockUserModel.exec.mockResolvedValueOnce({ ...user, ...detailsDto });
+      const spyerFindPopulate = jest
+        .spyOn(service, 'findPopulatedUserRegistryById')
+        .mockImplementationOnce(async () => userRegistryMockData);
       const updatedUser = await service.updateUserDetails('', { name: '', surname: '', phone: '' });
+      expect(spyerFindPopulate).toBeCalledTimes(1);
       expect(updatedUser.name).toBe(detailsDto.name);
       expect(updatedUser.surname).toBe(detailsDto.surname);
       expect(updatedUser.phone).toBe(detailsDto.phone);
     });
     it('should not found a user', async () => {
-      mockUserModel.findByIdAndUpdate.mockResolvedValueOnce(null);
+      mockUserModel.findByIdAndUpdate.mockReturnThis();
+      mockUserModel.exec.mockResolvedValueOnce(null);
       try {
         await service.updateUserDetails('', { name: '', surname: '', phone: '' });
         expect(true).toBe(false);
@@ -505,12 +518,16 @@ describe('UsersService', () => {
     it('should update user description', async () => {
       const user = usersMockData[0];
       const updatedDescription: DescriptionDto = { description: 'hello friend' };
-      mockUserModel.findByIdAndUpdate.mockResolvedValueOnce({ ...user, ...updatedDescription });
+      mockUserModel.exec.mockResolvedValueOnce({ ...user, ...updatedDescription });
+      const spyerFindPopulate = jest
+        .spyOn(service, 'findPopulatedUserRegistryById')
+        .mockImplementationOnce(async () => userRegistryMockData);
       const updatedUser = await service.updateDescription('', { description: '' });
+      expect(spyerFindPopulate).toBeCalledTimes(1);
       expect(updatedUser.description).toBe(updatedDescription.description);
     });
     it('should not found a user', async () => {
-      mockUserModel.findByIdAndUpdate.mockResolvedValueOnce(null);
+      mockUserModel.exec.mockResolvedValueOnce(null);
       try {
         await service.updateDescription('', { description: '' });
         expect(true).toBe(false);
diff --git a/src/users/services/users.service.ts b/src/users/services/users.service.ts
index e1c2243fd05f46d84d1715aac2ca7619a2509341..b2bd10a5fca0e72d49853c142a2096d8138cff7e 100644
--- a/src/users/services/users.service.ts
+++ b/src/users/services/users.service.ts
@@ -779,10 +779,9 @@ export class UsersService {
    */
   public async updateUserProfile(userId: Types.ObjectId, employer: EmployerDocument, job: JobDocument): Promise<IUser> {
     this.logger.debug(`updateUserProfile | ${userId}`);
-    const updated = await this.userModel.findByIdAndUpdate(
-      { _id: userId },
-      { $set: { employer: employer._id, job: job._id } }
-    );
+    const updated = await this.userModel
+      .findByIdAndUpdate({ _id: userId }, { $set: { employer: employer._id, job: job._id } })
+      .exec();
     if (updated) {
       const populatedResult = await this.findPopulatedUserRegistryById(updated._id);
       this.userRegistrySearchService.update(populatedResult);
@@ -797,7 +796,7 @@ export class UsersService {
    */
   public async updateUserJob(userId: Types.ObjectId, job: JobDocument): Promise<IUser> {
     this.logger.debug(`updateUserProfile - Job | ${userId}`);
-    const updated = await this.userModel.findByIdAndUpdate({ _id: userId }, { $set: { job: job._id } });
+    const updated = await this.userModel.findByIdAndUpdate({ _id: userId }, { $set: { job: job._id } }).exec();
     if (updated) {
       const populatedResult = await this.findPopulatedUserRegistryById(updated._id);
       this.userRegistrySearchService.update(populatedResult);
@@ -826,7 +825,9 @@ export class UsersService {
    */
   public async updateUserEmployer(userId: Types.ObjectId, employer: EmployerDocument): Promise<IUser> {
     this.logger.debug(`updateUserProfile - Employer | ${userId}`);
-    const updated = await this.userModel.findByIdAndUpdate({ _id: userId }, { $set: { employer: employer._id } });
+    const updated = await this.userModel
+      .findByIdAndUpdate({ _id: userId }, { $set: { employer: employer._id } })
+      .exec();
     if (updated) {
       const populatedResult = await this.findPopulatedUserRegistryById(updated._id);
       this.userRegistrySearchService.update(populatedResult);
@@ -855,7 +856,7 @@ export class UsersService {
    */
   public async updateUserDetails(userId: string, updatedDetails: UpdateDetailsDto): Promise<IUser> {
     this.logger.debug(`updateUserDetails | ${userId}`);
-    const result = await this.userModel.findByIdAndUpdate(userId, updatedDetails, { new: true });
+    const result = await this.userModel.findByIdAndUpdate(userId, updatedDetails, { new: true }).exec();
     if (!result) {
       throw new HttpException('User not found', HttpStatus.BAD_REQUEST);
     }
@@ -871,7 +872,7 @@ export class UsersService {
    */
   public async updateDescription(userId: string, description: DescriptionDto) {
     this.logger.debug(`updateUserDescription | ${userId}`);
-    const result = await this.userModel.findByIdAndUpdate(userId, description, { new: true });
+    const result = await this.userModel.findByIdAndUpdate(userId, description, { new: true }).exec();
     if (!result) {
       throw new HttpException('User not found', HttpStatus.BAD_REQUEST);
     }
diff --git a/test/mock/data/users.mock.data.ts b/test/mock/data/users.mock.data.ts
index 8c012955f191a663cc77f108bb37b85448286104..1e884cdbd1b3267c8b91748d265aabcfd1c5ebfa 100644
--- a/test/mock/data/users.mock.data.ts
+++ b/test/mock/data/users.mock.data.ts
@@ -1,5 +1,6 @@
 import { Types } from 'mongoose';
 import { IUser } from '../../../src/users/interfaces/user.interface';
+import { IUserRegistry } from '../../../src/users/interfaces/userRegistry.interface';
 
 export const usersMockData: IUser[] = [
   {
@@ -211,3 +212,12 @@ export const multipleUsers: IUser[] = [
     },
   },
 ] as IUser[];
+
+export const userRegistryMockData: IUserRegistry = {
+  resetPasswordToken: null,
+  _id: '6036721022462b001334c4bb',
+  name: 'Xavier',
+  surname: 'NIEL',
+  __v: 1,
+  save: jest.fn(),
+} as any;