From 69510e7a736e18904b8d5a5eb14d2e17760d6993 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Fri, 19 Apr 2024 07:09:44 +0200 Subject: [PATCH] work on tests --- backend/src/apis/humhub/HumHubClient.ts | 1 - backend/src/apis/humhub/ImportUsers.ts | 50 +---------------------- backend/src/apis/humhub/syncUser.test.ts | 34 ++++++++++++++++ backend/src/apis/humhub/syncUser.ts | 52 ++++++++++++++++++++++++ backend/src/data/PublishName.logic.ts | 14 +++---- backend/src/typeorm/connection.ts | 1 - 6 files changed, 93 insertions(+), 59 deletions(-) create mode 100644 backend/src/apis/humhub/syncUser.test.ts create mode 100644 backend/src/apis/humhub/syncUser.ts diff --git a/backend/src/apis/humhub/HumHubClient.ts b/backend/src/apis/humhub/HumHubClient.ts index 813946774..b69944773 100644 --- a/backend/src/apis/humhub/HumHubClient.ts +++ b/backend/src/apis/humhub/HumHubClient.ts @@ -7,7 +7,6 @@ import { backendLogger as logger } from '@/server/logger' import { GetUser } from './model/GetUser' import { PostUser } from './model/PostUser' -import { PostUserError } from './model/PostUserError' import { UsersResponse } from './model/UsersResponse' /** diff --git a/backend/src/apis/humhub/ImportUsers.ts b/backend/src/apis/humhub/ImportUsers.ts index c80db4344..b57350abc 100644 --- a/backend/src/apis/humhub/ImportUsers.ts +++ b/backend/src/apis/humhub/ImportUsers.ts @@ -7,20 +7,12 @@ import { backendLogger as logger } from '@/server/logger' import { Connection } from '@/typeorm/connection' import { checkDBVersion } from '@/typeorm/DBVersion' -import { isHumhubUserIdenticalToDbUser } from './compareHumhubUserDbUser' import { HumHubClient } from './HumHubClient' import { GetUser } from './model/GetUser' -import { PostUser } from './model/PostUser' +import { ExecutedHumhubAction, syncUser } from './syncUser' const USER_BULK_SIZE = 20 -enum ExecutedHumhubAction { - UPDATE, - CREATE, - SKIP, - DELETE, -} - function getUsersPage(page: number, limit: number): Promise<[User[], number]> { return User.findAndCount({ relations: { emailContact: true }, @@ -30,46 +22,6 @@ function getUsersPage(page: number, limit: number): Promise<[User[], number]> { }) } -/** - * Trigger action according to conditions - * | User exist on humhub | export to humhub allowed | changes in user data | ACTION - * | true | false | ignored | DELETE - * | true | true | true | UPDATE - * | true | true | false | SKIP - * | false | false | ignored | SKIP - * | false | true | ignored | CREATE - * @param user - * @param humHubClient - * @param humhubUsers - * @returns - */ -async function syncUser( - user: User, - humHubClient: HumHubClient, - humhubUsers: Map, -): Promise { - const postUser = new PostUser(user) - const humhubUser = humhubUsers.get(user.emailContact.email.trim()) - - if (humhubUser) { - if (!user.humhubAllowed) { - await humHubClient.deleteUser(humhubUser.id) - return ExecutedHumhubAction.DELETE - } - if (!isHumhubUserIdenticalToDbUser(humhubUser, user)) { - // if humhub allowed - await humHubClient.updateUser(postUser, humhubUser.id) - return ExecutedHumhubAction.UPDATE - } - } else { - if (user.humhubAllowed) { - await humHubClient.createUser(postUser) - return ExecutedHumhubAction.CREATE - } - } - return ExecutedHumhubAction.SKIP -} - /** * @param client * @returns user map indiced with email diff --git a/backend/src/apis/humhub/syncUser.test.ts b/backend/src/apis/humhub/syncUser.test.ts new file mode 100644 index 000000000..aebacc4cf --- /dev/null +++ b/backend/src/apis/humhub/syncUser.test.ts @@ -0,0 +1,34 @@ +/* eslint-disable @typescript-eslint/no-empty-function */ +import { User } from '@entity/User' +import { mocked } from 'ts-jest/utils' + +import { HumHubClient } from './HumHubClient' +import { GetUser } from './model/GetUser' +import { syncUser, ExecutedHumhubAction } from './syncUser' + +const defaultUser = User.create() + +jest.mock('./HumHubClient', () => { + return { + HumHubClient: jest.fn().mockImplementation(() => { + return { + createUser: () => {}, + updateUser: () => {}, + deleteUser: () => {}, + getInstance: () => { return new HumHubClient() } + } + }), + } +}) + +describe('syncUser function', () => { + test('When humhubUser exists and user.humhubAllowed is false, should return DELETE action', async () => { + const mockedHumhubClient = mocked(HumHubClient) + const humhubUsers = new Map() + + defaultUser.humhubAllowed = false + const result = await syncUser(defaultUser, new HumHubClient(), humhubUsers) + + expect(result).toBe(ExecutedHumhubAction.DELETE) + }) +}) diff --git a/backend/src/apis/humhub/syncUser.ts b/backend/src/apis/humhub/syncUser.ts new file mode 100644 index 000000000..33b04b6c0 --- /dev/null +++ b/backend/src/apis/humhub/syncUser.ts @@ -0,0 +1,52 @@ +import { User } from '@entity/User' + +import { isHumhubUserIdenticalToDbUser } from './compareHumhubUserDbUser' +import { HumHubClient } from './HumHubClient' +import { GetUser } from './model/GetUser' +import { PostUser } from './model/PostUser' + +export enum ExecutedHumhubAction { + UPDATE, + CREATE, + SKIP, + DELETE, +} +/** + * Trigger action according to conditions + * | User exist on humhub | export to humhub allowed | changes in user data | ACTION + * | true | false | ignored | DELETE + * | true | true | true | UPDATE + * | true | true | false | SKIP + * | false | false | ignored | SKIP + * | false | true | ignored | CREATE + * @param user + * @param humHubClient + * @param humhubUsers + * @returns + */ +export async function syncUser( + user: User, + humHubClient: HumHubClient, + humhubUsers: Map, +): Promise { + const postUser = new PostUser(user) + const humhubUser = humhubUsers.get(user.emailContact.email.trim()) + + if (humhubUser) { + if (!user.humhubAllowed) { + await humHubClient.deleteUser(humhubUser.id) + return ExecutedHumhubAction.DELETE + } + if (!isHumhubUserIdenticalToDbUser(humhubUser, user)) { + // if humhub allowed + await humHubClient.updateUser(postUser, humhubUser.id) + return ExecutedHumhubAction.UPDATE + } + } else { + if (user.humhubAllowed) { + await humHubClient.createUser(postUser) + return ExecutedHumhubAction.CREATE + } + } + return ExecutedHumhubAction.SKIP +} diff --git a/backend/src/data/PublishName.logic.ts b/backend/src/data/PublishName.logic.ts index 22262f6ca..e17708ceb 100644 --- a/backend/src/data/PublishName.logic.ts +++ b/backend/src/data/PublishName.logic.ts @@ -22,10 +22,9 @@ export class PublishNameLogic { return this.user.firstName } if ( - [ - PublishNameType.PUBLISH_NAME_INITIALS, - PublishNameType.PUBLISH_NAME_INITIAL_LAST, - ].includes(publishNameType) + [PublishNameType.PUBLISH_NAME_INITIALS, PublishNameType.PUBLISH_NAME_INITIAL_LAST].includes( + publishNameType, + ) ) { return this.user.firstName.substring(0, 1) } @@ -48,10 +47,9 @@ export class PublishNameLogic { return this.user.lastName } if ( - [ - PublishNameType.PUBLISH_NAME_FIRST_INITIAL, - PublishNameType.PUBLISH_NAME_INITIALS, - ].includes(publishNameType) + [PublishNameType.PUBLISH_NAME_FIRST_INITIAL, PublishNameType.PUBLISH_NAME_INITIALS].includes( + publishNameType, + ) ) { return this.user.lastName.substring(0, 1) } diff --git a/backend/src/typeorm/connection.ts b/backend/src/typeorm/connection.ts index 70df8cae5..104f6449d 100644 --- a/backend/src/typeorm/connection.ts +++ b/backend/src/typeorm/connection.ts @@ -50,7 +50,6 @@ export class Connection { } catch (error) { // eslint-disable-next-line no-console console.log(error) - console.log('catch from createConnection') return null } }