Skip to content
Snippets Groups Projects
Commit 8ccef490 authored by Steve Reis's avatar Steve Reis
Browse files

feat: Allow both user update (gateway and engine)

parent a98b6581
No related branches found
No related tags found
No related merge requests found
......@@ -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> {
......
......@@ -65,7 +65,7 @@ export interface IEngineService {
req?: Request,
userId?: string,
data?: UpdateUserInput,
): Promise<User>;
): Promise<UpdateUserInput | undefined>;
logout?(req?: Request): Promise<void>;
......
......@@ -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,
......
......@@ -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);
}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment