mirror of
https://github.com/IT4Change/gradido.git
synced 2026-02-06 01:46:07 +00:00
work on tests
This commit is contained in:
parent
b0d2a1566e
commit
69510e7a73
@ -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'
|
||||
|
||||
/**
|
||||
|
||||
@ -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
|
||||
|
||||
34
backend/src/apis/humhub/syncUser.test.ts
Normal file
34
backend/src/apis/humhub/syncUser.test.ts
Normal 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)
|
||||
})
|
||||
})
|
||||
52
backend/src/apis/humhub/syncUser.ts
Normal file
52
backend/src/apis/humhub/syncUser.ts
Normal 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
|
||||
}
|
||||
@ -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)
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user