From f1f3fb9e25496df2ea4e9f9302d981cbd068089e Mon Sep 17 00:00:00 2001 From: Bereket Engida Date: Sat, 8 Nov 2025 18:59:39 -0800 Subject: [PATCH] fix test --- .../src/plugins/organization/adapter.ts | 6 +-- .../organization/routes/crud-members.test.ts | 13 ++++++ .../organization/routes/crud-members.ts | 46 ++++++++++++++++--- 3 files changed, 53 insertions(+), 12 deletions(-) diff --git a/packages/better-auth/src/plugins/organization/adapter.ts b/packages/better-auth/src/plugins/organization/adapter.ts index fb86443722..c1b48343a3 100644 --- a/packages/better-auth/src/plugins/organization/adapter.ts +++ b/packages/better-auth/src/plugins/organization/adapter.ts @@ -114,7 +114,6 @@ export const getOrgAdapter = ( organizationId?: string | undefined; limit?: number | undefined; offset?: number | undefined; - organizationSlug?: string | undefined; sortBy?: string | undefined; sortOrder?: ("asc" | "desc") | undefined; filter?: @@ -130,10 +129,7 @@ export const getOrgAdapter = ( adapter.findMany({ model: "member", where: [ - { - field: data.organizationSlug ? "slug" : "id", - value: data.organizationSlug ?? data.organizationId, - }, + { field: "organizationId", value: data.organizationId }, ...(data.filter?.field ? [ { diff --git a/packages/better-auth/src/plugins/organization/routes/crud-members.test.ts b/packages/better-auth/src/plugins/organization/routes/crud-members.test.ts index 1c654eec2d..bc18f01c3c 100644 --- a/packages/better-auth/src/plugins/organization/routes/crud-members.test.ts +++ b/packages/better-auth/src/plugins/organization/routes/crud-members.test.ts @@ -73,6 +73,19 @@ describe("listMembers", async () => { expect(members.data?.total).toBe(11); }); + it("should return all members by organization slug", async () => { + const members = await client.organization.listMembers({ + fetchOptions: { + headers, + }, + query: { + organizationSlug: "test-second", + }, + }); + expect(members.data?.members.length).toBe(1); + expect(members.data?.total).toBe(1); + }); + it("should limit the number of members", async () => { const members = await client.organization.listMembers({ fetchOptions: { diff --git a/packages/better-auth/src/plugins/organization/routes/crud-members.ts b/packages/better-auth/src/plugins/organization/routes/crud-members.ts index fbf2ef43a5..8407ee2ccd 100644 --- a/packages/better-auth/src/plugins/organization/routes/crud-members.ts +++ b/packages/better-auth/src/plugins/organization/routes/crud-members.ts @@ -880,14 +880,28 @@ export const listMembers = (options: O) => }, async (ctx) => { const session = ctx.context.session; - const organizationId = - ctx.query?.organizationId || session.session.activeOrganizationId; + let organizationId = + ctx.query?.organizationId || + ctx.query?.organizationSlug || + session.session.activeOrganizationId; + if (!organizationId) { throw new APIError("BAD_REQUEST", { message: ORGANIZATION_ERROR_CODES.NO_ACTIVE_ORGANIZATION, }); } const adapter = getOrgAdapter(ctx.context, options); + if (ctx.query?.organizationSlug) { + const organization = await adapter.findOrganizationBySlug( + ctx.query?.organizationSlug, + ); + if (!organization) { + throw new APIError("BAD_REQUEST", { + message: ORGANIZATION_ERROR_CODES.ORGANIZATION_NOT_FOUND, + }); + } + organizationId = organization.id; + } const isMember = await adapter.findMemberByOrgId({ userId: session.user.id, organizationId, @@ -911,7 +925,6 @@ export const listMembers = (options: O) => value: ctx.query.filterValue, } : undefined, - organizationSlug: ctx.query?.organizationSlug, }); return ctx.json({ members, @@ -943,22 +956,41 @@ export const getActiveMemberRole = ( 'The organization ID to list members for. If not provided, will default to the user\'s active organization. Eg: "organization-id"', }) .optional(), + organizationSlug: z + .string() + .meta({ + description: + 'The organization slug to list members for. If not provided, will default to the user\'s active organization. Eg: "organization-slug"', + }) + .optional(), }) .optional(), use: [orgMiddleware, orgSessionMiddleware], }, async (ctx) => { const session = ctx.context.session; - const organizationId = - ctx.query?.organizationId || session.session.activeOrganizationId; + let organizationId = + ctx.query?.organizationId || + ctx.query?.organizationSlug || + session.session.activeOrganizationId; if (!organizationId) { throw new APIError("BAD_REQUEST", { message: ORGANIZATION_ERROR_CODES.NO_ACTIVE_ORGANIZATION, }); } - const userId = ctx.query?.userId || session.user.id; - const adapter = getOrgAdapter(ctx.context, options); + if (ctx.query?.organizationSlug) { + const organization = await adapter.findOrganizationBySlug( + ctx.query?.organizationSlug, + ); + if (!organization) { + throw new APIError("BAD_REQUEST", { + message: ORGANIZATION_ERROR_CODES.ORGANIZATION_NOT_FOUND, + }); + } + organizationId = organization.id; + } + const userId = ctx.query?.userId || session.user.id || organizationId; const member = await adapter.findMemberByOrgId({ userId,