From 3ce1f58a8924dc59a7070dae2d19656d46f323d4 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 12 Nov 2024 16:43:25 +0100 Subject: [PATCH 1/6] fix, small refactor --- backend/src/apis/humhub/model/Account.ts | 3 +-- backend/src/data/PublishName.logic.ts | 3 ++- backend/src/graphql/resolver/UserResolver.ts | 11 ++++++++--- backend/src/graphql/resolver/util/syncHumhub.ts | 3 ++- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/backend/src/apis/humhub/model/Account.ts b/backend/src/apis/humhub/model/Account.ts index 1eb3e37be..ac80a195b 100644 --- a/backend/src/apis/humhub/model/Account.ts +++ b/backend/src/apis/humhub/model/Account.ts @@ -3,12 +3,11 @@ import { User } from '@entity/User' import { convertGradidoLanguageToHumhub } from '@/apis/humhub/convertLanguage' import { PublishNameLogic } from '@/data/PublishName.logic' -import { PublishNameType } from '@/graphql/enum/PublishNameType' export class Account { public constructor(user: User) { const publishNameLogic = new PublishNameLogic(user) - this.username = publishNameLogic.getUsername(user.humhubPublishName as PublishNameType) + this.username = publishNameLogic.getUsername() this.email = user.emailContact.email this.language = convertGradidoLanguageToHumhub(user.language) this.status = 1 diff --git a/backend/src/data/PublishName.logic.ts b/backend/src/data/PublishName.logic.ts index d3643d633..3c89fc057 100644 --- a/backend/src/data/PublishName.logic.ts +++ b/backend/src/data/PublishName.logic.ts @@ -66,7 +66,8 @@ export class PublishNameLogic { * @returns user.alias for publishNameType = PUBLISH_NAME_ALIAS_OR_INITALS and user has alias * else return user.firstName[0,2] + user.lastName[0,2] for publishNameType = [PUBLISH_NAME_ALIAS_OR_INITALS, PUBLISH_NAME_INITIALS] */ - public getUsername(publishNameType: PublishNameType): string { + public getUsername(): string { + const publishNameType = this.user.humhubPublishName as PublishNameType if ( [ PublishNameType.PUBLISH_NAME_ALIAS_OR_INITALS, diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index e31dc4867..e74ae8f45 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -60,7 +60,6 @@ import { EVENT_ADMIN_USER_DELETE, EVENT_ADMIN_USER_UNDELETE, } from '@/event/Events' -import { PublishNameType } from '@/graphql/enum/PublishNameType' import { isValidPassword } from '@/password/EncryptorUtils' import { encryptPassword, verifyPassword } from '@/password/PasswordEncryptor' import { Context, getUser, getClientTimezoneOffset } from '@/server/context' @@ -172,7 +171,7 @@ export class UserResolver { if (CONFIG.HUMHUB_ACTIVE && dbUser.humhubAllowed) { const publishNameLogic = new PublishNameLogic(dbUser) humhubUserPromise = HumHubClient.getInstance()?.userByUsernameAsync( - publishNameLogic.getUsername(dbUser.humhubPublishName as PublishNameType), + publishNameLogic.getUsername(), ) } @@ -316,6 +315,8 @@ export class UserResolver { dbUser.firstName = firstName dbUser.lastName = lastName dbUser.language = language + // enable humhub from now on for new user + dbUser.humhubAllowed = true if (alias && (await validateAlias(alias))) { dbUser.alias = alias } @@ -386,6 +387,9 @@ export class UserResolver { await queryRunner.release() } logger.info('createUser() successful...') + if (CONFIG.HUMHUB_ACTIVE) { + void syncHumhub(null, dbUser) + } if (redeemCode) { eventRegisterRedeem.affectedUser = dbUser @@ -736,7 +740,8 @@ export class UserResolver { if (!humhubClient) { throw new LogError('cannot create humhub client') } - const username = dbUser.alias ?? dbUser.gradidoID + const userNameLogic = new PublishNameLogic(dbUser) + const username = userNameLogic.getUsername() let humhubUser = await humhubClient.userByUsername(username) if (!humhubUser) { humhubUser = await humhubClient.userByEmail(dbUser.emailContact.email) diff --git a/backend/src/graphql/resolver/util/syncHumhub.ts b/backend/src/graphql/resolver/util/syncHumhub.ts index 426f89c92..c229df655 100644 --- a/backend/src/graphql/resolver/util/syncHumhub.ts +++ b/backend/src/graphql/resolver/util/syncHumhub.ts @@ -7,11 +7,12 @@ import { UpdateUserInfosArgs } from '@/graphql/arg/UpdateUserInfosArgs' import { backendLogger as logger } from '@/server/logger' export async function syncHumhub( - updateUserInfosArg: UpdateUserInfosArgs, + updateUserInfosArg: UpdateUserInfosArgs | null, user: User, ): Promise { // check for humhub relevant changes if ( + updateUserInfosArg && updateUserInfosArg.alias === undefined && updateUserInfosArg.firstName === undefined && updateUserInfosArg.lastName === undefined && From da6bdfaa61e8af6115f7992a43f2ef1d73b3e57f Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 12 Nov 2024 16:48:04 +0100 Subject: [PATCH 2/6] fix test --- backend/src/data/PublishName.logic.test.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/backend/src/data/PublishName.logic.test.ts b/backend/src/data/PublishName.logic.test.ts index 280836c5e..9249670de 100644 --- a/backend/src/data/PublishName.logic.test.ts +++ b/backend/src/data/PublishName.logic.test.ts @@ -9,15 +9,17 @@ describe('test publish name logic', () => { it('alias or initials with alias set', () => { const user = new User() user.alias = 'alias' + user.humhubPublishName = PublishNameType.PUBLISH_NAME_ALIAS_OR_INITALS const logic = new PublishNameLogic(user) - expect(logic.getUsername(PublishNameType.PUBLISH_NAME_ALIAS_OR_INITALS)).toBe(user.alias) + expect(logic.getUsername()).toBe(user.alias) }) it('alias or initials with empty alias', () => { const user = new User() user.firstName = 'John' user.lastName = 'Smith' + user.humhubPublishName = PublishNameType.PUBLISH_NAME_ALIAS_OR_INITALS const logic = new PublishNameLogic(user) - expect(logic.getUsername(PublishNameType.PUBLISH_NAME_ALIAS_OR_INITALS)).toBe('JoSm') + expect(logic.getUsername()).toBe('JoSm') }) }) }) From 0ad93ebbf4175427b99887a73cd4129cfd8ff095 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 12 Nov 2024 16:54:09 +0100 Subject: [PATCH 3/6] remove change, parameter is neccessary for using is also for gms --- backend/src/apis/humhub/model/Account.ts | 3 ++- backend/src/data/PublishName.logic.test.ts | 6 ++---- backend/src/data/PublishName.logic.ts | 3 +-- backend/src/graphql/resolver/UserResolver.ts | 5 +++-- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/backend/src/apis/humhub/model/Account.ts b/backend/src/apis/humhub/model/Account.ts index ac80a195b..1eb3e37be 100644 --- a/backend/src/apis/humhub/model/Account.ts +++ b/backend/src/apis/humhub/model/Account.ts @@ -3,11 +3,12 @@ import { User } from '@entity/User' import { convertGradidoLanguageToHumhub } from '@/apis/humhub/convertLanguage' import { PublishNameLogic } from '@/data/PublishName.logic' +import { PublishNameType } from '@/graphql/enum/PublishNameType' export class Account { public constructor(user: User) { const publishNameLogic = new PublishNameLogic(user) - this.username = publishNameLogic.getUsername() + this.username = publishNameLogic.getUsername(user.humhubPublishName as PublishNameType) this.email = user.emailContact.email this.language = convertGradidoLanguageToHumhub(user.language) this.status = 1 diff --git a/backend/src/data/PublishName.logic.test.ts b/backend/src/data/PublishName.logic.test.ts index 9249670de..280836c5e 100644 --- a/backend/src/data/PublishName.logic.test.ts +++ b/backend/src/data/PublishName.logic.test.ts @@ -9,17 +9,15 @@ describe('test publish name logic', () => { it('alias or initials with alias set', () => { const user = new User() user.alias = 'alias' - user.humhubPublishName = PublishNameType.PUBLISH_NAME_ALIAS_OR_INITALS const logic = new PublishNameLogic(user) - expect(logic.getUsername()).toBe(user.alias) + expect(logic.getUsername(PublishNameType.PUBLISH_NAME_ALIAS_OR_INITALS)).toBe(user.alias) }) it('alias or initials with empty alias', () => { const user = new User() user.firstName = 'John' user.lastName = 'Smith' - user.humhubPublishName = PublishNameType.PUBLISH_NAME_ALIAS_OR_INITALS const logic = new PublishNameLogic(user) - expect(logic.getUsername()).toBe('JoSm') + expect(logic.getUsername(PublishNameType.PUBLISH_NAME_ALIAS_OR_INITALS)).toBe('JoSm') }) }) }) diff --git a/backend/src/data/PublishName.logic.ts b/backend/src/data/PublishName.logic.ts index 3c89fc057..d3643d633 100644 --- a/backend/src/data/PublishName.logic.ts +++ b/backend/src/data/PublishName.logic.ts @@ -66,8 +66,7 @@ export class PublishNameLogic { * @returns user.alias for publishNameType = PUBLISH_NAME_ALIAS_OR_INITALS and user has alias * else return user.firstName[0,2] + user.lastName[0,2] for publishNameType = [PUBLISH_NAME_ALIAS_OR_INITALS, PUBLISH_NAME_INITIALS] */ - public getUsername(): string { - const publishNameType = this.user.humhubPublishName as PublishNameType + public getUsername(publishNameType: PublishNameType): string { if ( [ PublishNameType.PUBLISH_NAME_ALIAS_OR_INITALS, diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index e74ae8f45..40a1fcbc2 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -60,6 +60,7 @@ import { EVENT_ADMIN_USER_DELETE, EVENT_ADMIN_USER_UNDELETE, } from '@/event/Events' +import { PublishNameType } from '@/graphql/enum/PublishNameType' import { isValidPassword } from '@/password/EncryptorUtils' import { encryptPassword, verifyPassword } from '@/password/PasswordEncryptor' import { Context, getUser, getClientTimezoneOffset } from '@/server/context' @@ -171,7 +172,7 @@ export class UserResolver { if (CONFIG.HUMHUB_ACTIVE && dbUser.humhubAllowed) { const publishNameLogic = new PublishNameLogic(dbUser) humhubUserPromise = HumHubClient.getInstance()?.userByUsernameAsync( - publishNameLogic.getUsername(), + publishNameLogic.getUsername(dbUser.humhubPublishName as PublishNameType), ) } @@ -741,7 +742,7 @@ export class UserResolver { throw new LogError('cannot create humhub client') } const userNameLogic = new PublishNameLogic(dbUser) - const username = userNameLogic.getUsername() + const username = userNameLogic.getUsername(dbUser.humhubPublishName as PublishNameType) let humhubUser = await humhubClient.userByUsername(username) if (!humhubUser) { humhubUser = await humhubClient.userByEmail(dbUser.emailContact.email) From f7cd831fee31827a80e97760a0870bd6de08ab75 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 12 Nov 2024 17:00:45 +0100 Subject: [PATCH 4/6] fix backend test error --- backend/src/graphql/resolver/UserResolver.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/graphql/resolver/UserResolver.test.ts b/backend/src/graphql/resolver/UserResolver.test.ts index 83ee8f64e..c0a707577 100644 --- a/backend/src/graphql/resolver/UserResolver.test.ts +++ b/backend/src/graphql/resolver/UserResolver.test.ts @@ -185,7 +185,7 @@ describe('UserResolver', () => { communityUuid: homeCom.communityUuid, foreign: false, gmsAllowed: true, - humhubAllowed: false, + humhubAllowed: true, gmsPublishName: 0, humhubPublishName: 0, gmsPublishLocation: 2, From fb0f901472d515b067190a239b9513940dea4357 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 12 Nov 2024 19:55:14 +0100 Subject: [PATCH 5/6] call frontend docker before waiting 10 seconds, use build instead of dev to prevent timeout --- .github/workflows/test_e2e.yml | 6 +++--- frontend/Dockerfile | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test_e2e.yml b/.github/workflows/test_e2e.yml index 590758248..bdf979bf9 100644 --- a/.github/workflows/test_e2e.yml +++ b/.github/workflows/test_e2e.yml @@ -23,6 +23,9 @@ jobs: cd .. docker compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps backend + - name: Boot up test system | docker-compose frontends + run: docker compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps frontend admin nginx + - name: Sleep for 10 seconds run: sleep 10s @@ -34,9 +37,6 @@ jobs: cd ../backend yarn && yarn seed - - name: Boot up test system | docker-compose frontends - run: docker compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps frontend admin nginx - - name: Boot up test system | docker-compose mailserver run: docker compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps mailserver diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 6f6cc0e9e..6acd4f268 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -75,8 +75,10 @@ FROM build as test # Install Additional Software RUN apk add --no-cache bash jq +RUN yarn run build + # Run command -CMD /bin/sh -c "yarn run dev" +CMD /bin/sh -c "yarn run start" ################################################################################## # PRODUCTION (Does contain only "binary"- and static-files to reduce image size) # From c5fcf61154ecf902d82fc120f211f3336ab8be4b Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 12 Nov 2024 20:45:00 +0100 Subject: [PATCH 6/6] increase cypress timeout --- e2e-tests/cypress.config.ts | 2 +- frontend/Dockerfile | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/e2e-tests/cypress.config.ts b/e2e-tests/cypress.config.ts index fd6caa069..3251f379c 100644 --- a/e2e-tests/cypress.config.ts +++ b/e2e-tests/cypress.config.ts @@ -35,7 +35,7 @@ export default defineConfig({ excludeSpecPattern: '*.js', baseUrl: 'http://localhost:3000', chromeWebSecurity: false, - defaultCommandTimeout: 10000, + defaultCommandTimeout: 100000, supportFile: 'cypress/support/index.ts', viewportHeight: 720, viewportWidth: 1280, diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 6acd4f268..6f6cc0e9e 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -75,10 +75,8 @@ FROM build as test # Install Additional Software RUN apk add --no-cache bash jq -RUN yarn run build - # Run command -CMD /bin/sh -c "yarn run start" +CMD /bin/sh -c "yarn run dev" ################################################################################## # PRODUCTION (Does contain only "binary"- and static-files to reduce image size) #