From 4b138a76538aedaa94bf89eb8707a91d3a8b2ad6 Mon Sep 17 00:00:00 2001 From: Alessandro Magionami Date: Thu, 20 Mar 2025 10:30:59 +0100 Subject: [PATCH] fix(workspaces): filter out dismissed join requests --- .../repositories/workspaceJoinRequests.ts | 2 + .../workspaceJoinRequests.graph.spec.ts | 66 +++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/packages/server/modules/workspaces/repositories/workspaceJoinRequests.ts b/packages/server/modules/workspaces/repositories/workspaceJoinRequests.ts index 49faaa428..dac1d1393 100644 --- a/packages/server/modules/workspaces/repositories/workspaceJoinRequests.ts +++ b/packages/server/modules/workspaces/repositories/workspaceJoinRequests.ts @@ -69,6 +69,7 @@ const adminWorkspaceJoinRequestsBaseQueryFactory = .where(WorkspaceAcl.col.role, Roles.Workspace.Admin) .where(WorkspaceAcl.col.userId, filter.userId) .where(WorkspaceJoinRequests.col.workspaceId, filter.workspaceId) + .whereNot(WorkspaceJoinRequests.col.status, 'dismissed') if (filter.status) query.andWhere(WorkspaceJoinRequests.col.status, filter.status) return query } @@ -113,6 +114,7 @@ const workspaceJoinRequestsBaseQueryFactory = const query = tables .workspaceJoinRequests(db) .where(WorkspaceJoinRequests.col.userId, filter.userId) + .whereNot(WorkspaceJoinRequests.col.status, 'dismissed') if (filter.status) query.andWhere(WorkspaceJoinRequests.col.status, filter.status) if (filter.userId) query.andWhere(WorkspaceJoinRequests.col.userId, filter.userId) if (filter.workspaceId) diff --git a/packages/server/modules/workspaces/tests/integration/workspaceJoinRequests.graph.spec.ts b/packages/server/modules/workspaces/tests/integration/workspaceJoinRequests.graph.spec.ts index e745ba783..5f4806dd1 100644 --- a/packages/server/modules/workspaces/tests/integration/workspaceJoinRequests.graph.spec.ts +++ b/packages/server/modules/workspaces/tests/integration/workspaceJoinRequests.graph.spec.ts @@ -3,6 +3,7 @@ import { createRandomString } from '@/modules/core/helpers/testHelpers' import { createTestWorkspace } from '@/modules/workspaces/tests/helpers/creation' import { createTestUser, login } from '@/test/authHelper' import { + DismissWorkspaceDocument, GetActiveUserWithWorkspaceJoinRequestsDocument, GetWorkspaceWithJoinRequestsDocument, RequestToJoinWorkspaceDocument @@ -48,6 +49,15 @@ describe('WorkspaceJoinRequests GQL', () => { } await createTestWorkspace(workspace1, admin, { domain: 'example.org' }) + const dismissedWorkspace = { + id: createRandomString(), + name: 'should not be visible', + ownerId: admin.id, + description: '', + discoverabilityEnabled: true + } + await createTestWorkspace(dismissedWorkspace, admin, { domain: 'example.org' }) + const workspace2 = { id: createRandomString(), name: 'Workspace 2', @@ -99,6 +109,23 @@ describe('WorkspaceJoinRequests GQL', () => { }) expect(joinReq2).to.not.haveGraphQLErrors() + // User requests to join dismissedWorkspace + const joinReqDismissed = await sessionUser2.execute( + RequestToJoinWorkspaceDocument, + { + input: { + workspaceId: dismissedWorkspace.id + } + } + ) + expect(joinReqDismissed).to.not.haveGraphQLErrors() + const dismissReq = await sessionUser2.execute(DismissWorkspaceDocument, { + input: { + workspaceId: dismissedWorkspace.id + } + }) + expect(dismissReq).to.not.haveGraphQLErrors() + const sessionAdmin = await login(admin) const workspace1Res = await sessionAdmin.execute( GetWorkspaceWithJoinRequestsDocument, @@ -135,6 +162,19 @@ describe('WorkspaceJoinRequests GQL', () => { expect(items2[0].status).to.equal('pending') expect(items2[0].workspace.id).to.equal(workspace2.id) expect(items2[0].user.id).to.equal(user2.id) + + const workspaceDismissedRes = await sessionAdmin.execute( + GetWorkspaceWithJoinRequestsDocument, + { + workspaceId: dismissedWorkspace.id + } + ) + expect(workspaceDismissedRes).to.not.haveGraphQLErrors() + const { items: itemsDismissed, totalCount: totalCountDismissed } = + workspaceDismissedRes.data!.workspace!.adminWorkspacesJoinRequests! + + expect(totalCountDismissed).to.equal(0) + expect(itemsDismissed).to.have.length(0) }) }) @@ -172,6 +212,15 @@ describe('WorkspaceJoinRequests GQL', () => { } await createTestWorkspace(workspace2, admin, { domain: 'example.org' }) + const workspaceDismissed = { + id: createRandomString(), + name: 'should not see', + ownerId: admin.id, + description: '', + discoverabilityEnabled: true + } + await createTestWorkspace(workspaceDismissed, admin, { domain: 'example.org' }) + const sessionUser = await login(user) // User requests to join workspace1 @@ -190,6 +239,23 @@ describe('WorkspaceJoinRequests GQL', () => { }) expect(joinReq2).to.not.haveGraphQLErrors() + // User requests to join workspaceDismissed + const joinReqDismissed = await sessionUser.execute( + RequestToJoinWorkspaceDocument, + { + input: { + workspaceId: workspaceDismissed.id + } + } + ) + expect(joinReqDismissed).to.not.haveGraphQLErrors() + const dismissReq = await sessionUser.execute(DismissWorkspaceDocument, { + input: { + workspaceId: workspaceDismissed.id + } + }) + expect(dismissReq).to.not.haveGraphQLErrors() + const res = await sessionUser.execute( GetActiveUserWithWorkspaceJoinRequestsDocument, {}