work on tests

This commit is contained in:
einhornimmond 2024-04-19 07:09:44 +02:00
parent b0d2a1566e
commit 69510e7a73
6 changed files with 93 additions and 59 deletions

View File

@ -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'
/**

View File

@ -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<string, GetUser>,
): Promise<ExecutedHumhubAction> {
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

View File

@ -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<string, GetUser>()
defaultUser.humhubAllowed = false
const result = await syncUser(defaultUser, new HumHubClient(), humhubUsers)
expect(result).toBe(ExecutedHumhubAction.DELETE)
})
})

View File

@ -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<string, GetUser>,
): Promise<ExecutedHumhubAction> {
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
}

View File

@ -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)
}

View File

@ -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
}
}