From f3e9b4bbf0eea72b86a3d7c3e292e23cb5e98d9c Mon Sep 17 00:00:00 2001 From: fengmk2 Date: Wed, 2 Apr 2025 14:33:06 +0000 Subject: [PATCH] feat(server): search workspace users support case insensitive (#11422) close CLOUD-193 --- .../__tests__/e2e/workspace/member.spec.ts | 66 +++++++++++++++++++ .../server/src/models/workspace-user.ts | 2 + 2 files changed, 68 insertions(+) create mode 100644 packages/backend/server/src/__tests__/e2e/workspace/member.spec.ts diff --git a/packages/backend/server/src/__tests__/e2e/workspace/member.spec.ts b/packages/backend/server/src/__tests__/e2e/workspace/member.spec.ts new file mode 100644 index 0000000000..d97c31a369 --- /dev/null +++ b/packages/backend/server/src/__tests__/e2e/workspace/member.spec.ts @@ -0,0 +1,66 @@ +import { getMembersByWorkspaceIdQuery } from '@affine/graphql'; +import { faker } from '@faker-js/faker'; + +import { Mockers } from '../../mocks'; +import { app, e2e } from '../test'; + +e2e( + 'should search members by name and email support case insensitive', + async t => { + const owner = await app.create(Mockers.User); + const workspace = await app.create(Mockers.Workspace, { + owner: { id: owner.id }, + }); + const user1 = await app.create(Mockers.User, { + name: faker.internet.displayName({ firstName: 'Lucy' }), + }); + const user2 = await app.create(Mockers.User, { + email: faker.internet.email({ + firstName: 'Jeanne', + lastName: 'Doe', + }), + }); + await app.create(Mockers.WorkspaceUser, { + workspaceId: workspace.id, + userId: user1.id, + }); + await app.create(Mockers.WorkspaceUser, { + workspaceId: workspace.id, + userId: user2.id, + }); + + await app.login(owner); + let result = await app.gql({ + query: getMembersByWorkspaceIdQuery, + variables: { + workspaceId: workspace.id, + query: 'lucy', + }, + }); + t.is(result.workspace.memberCount, 3); + t.is(result.workspace.members.length, 1); + t.is(result.workspace.members[0].name, user1.name); + + result = await app.gql({ + query: getMembersByWorkspaceIdQuery, + variables: { + workspaceId: workspace.id, + query: 'LUCY', + }, + }); + t.is(result.workspace.memberCount, 3); + t.is(result.workspace.members.length, 1); + t.is(result.workspace.members[0].name, user1.name); + + result = await app.gql({ + query: getMembersByWorkspaceIdQuery, + variables: { + workspaceId: workspace.id, + query: 'jeanne_doe', + }, + }); + t.is(result.workspace.memberCount, 3); + t.is(result.workspace.members.length, 1); + t.is(result.workspace.members[0].email, user2.email); + } +); diff --git a/packages/backend/server/src/models/workspace-user.ts b/packages/backend/server/src/models/workspace-user.ts index 5de6fbd89e..1be0fa2fc3 100644 --- a/packages/backend/server/src/models/workspace-user.ts +++ b/packages/backend/server/src/models/workspace-user.ts @@ -322,11 +322,13 @@ export class WorkspaceUserModel extends BaseModel { { email: { contains: query, + mode: 'insensitive', }, }, { name: { contains: query, + mode: 'insensitive', }, }, ],