diff --git a/api/src/engine/connectors/exareme/main.connector.ts b/api/src/engine/connectors/exareme/main.connector.ts index 02f28ae18223e74286b62b83a5e1aca03ce577d7..a87e303490c3338cf2b776a725cf28f74f2a8679 100644 --- a/api/src/engine/connectors/exareme/main.connector.ts +++ b/api/src/engine/connectors/exareme/main.connector.ts @@ -27,6 +27,7 @@ import { ExperimentEditInput } from 'src/engine/models/experiment/input/experime import { ListExperiments } from 'src/engine/models/experiment/list-experiments.model'; import { Group } from 'src/engine/models/group.model'; import { Variable } from 'src/engine/models/variable.model'; +import { UpdateUserInput } from 'src/users/inputs/update-user.input'; import { User } from 'src/users/models/user.model'; import { transformToUser } from '../datashield/transformations'; import { @@ -191,21 +192,15 @@ export default class ExaremeService implements IEngineService { } } - async updateUser(request: Request): Promise<User> { + async updateUser(request: Request): Promise<UpdateUserInput | undefined> { const path = this.options.baseurl + 'activeUser/agreeNDA'; - const response = await firstValueFrom( + await firstValueFrom( this.post<string>(request, path, { agreeNDA: true, }), ); - try { - return transformToUser.evaluate(response.data); - } catch (e) { - throw new InternalServerErrorException( - 'Error when trying to parse user data from the engine', - ); - } + return undefined; //we don't want to manage data locally } getAlgorithmsREST(request: Request): Observable<string> { diff --git a/api/src/engine/engine.interfaces.ts b/api/src/engine/engine.interfaces.ts index 1a93078d70be9ded4272022f0dff5b85d2017e33..c36cd48cf4754d22138cf49cf567cf126a56ddcf 100644 --- a/api/src/engine/engine.interfaces.ts +++ b/api/src/engine/engine.interfaces.ts @@ -65,7 +65,7 @@ export interface IEngineService { req?: Request, userId?: string, data?: UpdateUserInput, - ): Promise<User>; + ): Promise<UpdateUserInput | undefined>; logout?(req?: Request): Promise<void>; diff --git a/api/src/users/users.resolver.spec.ts b/api/src/users/users.resolver.spec.ts index e449f71fb0900a50fc53711d934d8be13fdcc4d1..ad7ccb85c21bfd417f33c76cfb55fec94cbdcb9e 100644 --- a/api/src/users/users.resolver.spec.ts +++ b/api/src/users/users.resolver.spec.ts @@ -51,9 +51,14 @@ describe('UsersResolver', () => { const engineService = { getActiveUser, - updateUser: jest.fn().mockResolvedValue({ ...user, ...updateData }), + updateUser: jest + .fn() + .mockReturnValue(undefined) + .mockResolvedValue(undefined), }; + const updateService = jest.fn().mockResolvedValue({ ...user, ...internUser }); + beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ providers: [UsersResolver], @@ -62,7 +67,7 @@ describe('UsersResolver', () => { if (token == UsersService) { return { findOne, - update: jest.fn().mockResolvedValue({ ...user, ...internUser }), + update: updateService, }; } if (token == ENGINE_SERVICE) { @@ -107,14 +112,18 @@ describe('UsersResolver', () => { }); it('Update user from engine ', async () => { - expect(await resolver.updateUser(req, updateData, user)).toStrictEqual({ - ...user, - ...updateData, - }); + engineService.updateUser.mockClear(); + updateService.mockClear(); + await resolver.updateUser(req, updateData, user); + expect(engineService.updateUser.mock.calls.length > 0); + expect(updateService.mock.calls.length === 0); }); it('Update user from database', async () => { - engineService.updateUser = undefined; + engineService.updateUser = jest + .fn() + .mockReturnValue(undefined) + .mockResolvedValue(undefined); expect(await resolver.updateUser(req, updateData, user)).toStrictEqual({ ...user, ...internUser, diff --git a/api/src/users/users.resolver.ts b/api/src/users/users.resolver.ts index 0b78a0fb5af9b0dfb7de5a8d727e418954697de0..ad1fcd0e750bf635ab72bbd9c10a660e77658c18 100644 --- a/api/src/users/users.resolver.ts +++ b/api/src/users/users.resolver.ts @@ -75,14 +75,17 @@ export class UsersResolver { @Args('updateUserInput') updateUserInput: UpdateUserInput, @CurrentUser() user?: User, ) { - if (this.engineService.updateUser) - return await this.engineService.updateUser( + let updateData: UpdateUserInput | undefined = updateUserInput; + if (this.engineService.updateUser) { + updateData = await this.engineService.updateUser( request, user?.id, - updateUserInput, + updateData, ); + } - await this.usersService.update(user.id, updateUserInput); + if (updateData && Object.keys(updateData).length > 0) + await this.usersService.update(user.id, updateData); return await this.getUser(request, user); }