From 8ccef49088effe6b6b5a5e8a0c63e30a7dfc2f1a Mon Sep 17 00:00:00 2001 From: Steve Reis <stevereis93@gmail.com> Date: Wed, 20 Apr 2022 17:42:17 +0200 Subject: [PATCH] feat: Allow both user update (gateway and engine) --- .../connectors/exareme/main.connector.ts | 13 ++++------- api/src/engine/engine.interfaces.ts | 2 +- api/src/users/users.resolver.spec.ts | 23 +++++++++++++------ api/src/users/users.resolver.ts | 11 +++++---- 4 files changed, 28 insertions(+), 21 deletions(-) diff --git a/api/src/engine/connectors/exareme/main.connector.ts b/api/src/engine/connectors/exareme/main.connector.ts index 02f28ae..a87e303 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 1a93078..c36cd48 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 e449f71..ad7ccb8 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 0b78a0f..ad1fcd0 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); } -- GitLab