From b870ed238fa1d75af822d7cf812081ab85f659d5 Mon Sep 17 00:00:00 2001
From: Paul Rastoin <45004772+prastoin@users.noreply.github.com>
Date: Mon, 6 Oct 2025 15:51:48 +0200
Subject: [PATCH] Fix `twenty-server` integration test on main (#14905)
Following https://github.com/twentyhq/twenty/pull/14869
Dynamically clearing the cache, as one entry was forgotten
It seems like a permission test deletes a role that's expected to be
existing in following tests, as now cache is getting invalidated tests
are failing
Seems to be related to
https://discord.com/channels/1130383047699738754/1423768505911869460
## Singleton local cache key collision
When set for the first time caches local keys looks like
`workspaceId:undefined", singleton is shared between several cache
instances
If the given key is undefined it will read on other entity cache entry.
---
.vscode/launch.json | 2 +-
.../interfaces/base-resolver-service.ts | 3 +-
...aphql-query-delete-one-resolver.service.ts | 4 +-
.../storage/workspace-query-hook.storage.ts | 4 +-
.../hooks/use-graphql-error-handler.hook.ts | 5 -
...space-permissions-cache-storage.service.ts | 32 ++--
.../workspace-permissions-cache.service.ts | 3 +
...-data-from-cache-with-recompute.service.ts | 12 +-
.../workspace-cache-storage.service.ts | 118 ++++++--------
packages/twenty-server/src/instrument.ts | 4 +-
...pace-member-delete-one.post-query.hook.ts} | 30 ++--
.../workspace-member-query-hook.module.ts | 4 +-
.../workspace-members.integration-spec.ts | 153 +++++++++---------
13 files changed, 183 insertions(+), 191 deletions(-)
rename packages/twenty-server/src/modules/workspace-member/query-hooks/{workspace-member-delete-one.pre-query.hook.ts => workspace-member-delete-one.post-query.hook.ts} (80%)
diff --git a/.vscode/launch.json b/.vscode/launch.json
index eb67626726..bd3a306621 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -67,7 +67,7 @@
"--config",
"./jest-integration.config.ts",
"${relativeFile}",
- "--testTimeout=0"
+ "--silent=false"
],
"cwd": "${workspaceFolder}/packages/twenty-server",
"console": "integratedTerminal",
diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/interfaces/base-resolver-service.ts b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/interfaces/base-resolver-service.ts
index 51332c2a63..c051d61999 100644
--- a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/interfaces/base-resolver-service.ts
+++ b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/interfaces/base-resolver-service.ts
@@ -28,6 +28,7 @@ import { workspaceQueryRunnerGraphqlApiExceptionHandler } from 'src/engine/api/g
import { WorkspaceQueryHookService } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/workspace-query-hook.service';
import { ApiKeyRoleService } from 'src/engine/core-modules/api-key/api-key-role.service';
import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
+import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
import { type PermissionFlagType } from 'src/engine/metadata-modules/permissions/constants/permission-flag-type.constants';
import {
PermissionsException,
@@ -39,7 +40,6 @@ import { UserRoleService } from 'src/engine/metadata-modules/user-role/user-role
import { type WorkspaceDataSource } from 'src/engine/twenty-orm/datasource/workspace.datasource';
import { type WorkspaceRepository } from 'src/engine/twenty-orm/repository/workspace.repository';
import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager';
-import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
export type GraphqlQueryResolverExecutionArgs = {
args: Input;
@@ -185,7 +185,6 @@ export abstract class GraphqlQueryBaseResolverService<
roleId,
shouldBypassPermissionChecks,
};
-
const results = await this.resolve(
graphqlQueryResolverExecutionArgs,
featureFlagsMap,
diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-delete-one-resolver.service.ts b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-delete-one-resolver.service.ts
index 062ac22055..d38b767506 100644
--- a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-delete-one-resolver.service.ts
+++ b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-delete-one-resolver.service.ts
@@ -77,12 +77,14 @@ export class GraphqlQueryDeleteOneResolverService extends GraphqlQueryBaseResolv
const typeORMObjectRecordsParser =
new ObjectRecordsToGraphqlConnectionHelper(objectMetadataMaps);
- return typeORMObjectRecordsParser.processRecord({
+ const result = typeORMObjectRecordsParser.processRecord({
objectRecord: deletedRecord,
objectName: objectMetadataItemWithFieldMaps.nameSingular,
take: 1,
totalCount: 1,
});
+
+ return result;
}
async validate(
diff --git a/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/workspace-query-hook/storage/workspace-query-hook.storage.ts b/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/workspace-query-hook/storage/workspace-query-hook.storage.ts
index 5943190415..9a48d43228 100644
--- a/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/workspace-query-hook/storage/workspace-query-hook.storage.ts
+++ b/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/workspace-query-hook/storage/workspace-query-hook.storage.ts
@@ -98,6 +98,8 @@ export class WorkspaceQueryHookStorage {
wildcardInstances = wildcardPosthooksInstance;
}
- return [...wildcardInstances, ...(this.postHookInstances.get(key) ?? [])];
+ const specificInstances = this.postHookInstances.get(key) ?? [];
+
+ return [...wildcardInstances, ...specificInstances];
}
}
diff --git a/packages/twenty-server/src/engine/core-modules/graphql/hooks/use-graphql-error-handler.hook.ts b/packages/twenty-server/src/engine/core-modules/graphql/hooks/use-graphql-error-handler.hook.ts
index e8164090cd..bd43061cbc 100644
--- a/packages/twenty-server/src/engine/core-modules/graphql/hooks/use-graphql-error-handler.hook.ts
+++ b/packages/twenty-server/src/engine/core-modules/graphql/hooks/use-graphql-error-handler.hook.ts
@@ -95,11 +95,6 @@ export const useGraphQLErrorHandlerHook = <
'Anonymous Operation';
const workspaceInfo = extractWorkspaceInfo(args.contextValue.req);
- // eslint-disable-next-line no-console
- console.log(
- `[GQL Execute] Processing GQL query ${opName} on workspace ${workspaceInfo?.id}`,
- );
-
return {
onExecuteDone(payload) {
const handleResult: OnExecuteDoneHookResultOnNextHook