diff --git a/src/__tests__/integration.ts b/src/__tests__/integration.ts index 36667360..5ccc7c6c 100644 --- a/src/__tests__/integration.ts +++ b/src/__tests__/integration.ts @@ -218,8 +218,8 @@ describe('graphql server', () => { } ` const organizationsQuery = ` - query organizations($filter: OrgFilter, $sort: OrgSort) { - organizations(filter: $filter, sort: $sort) { + query organizations($filter: OrgFilter, $sort: OrgSort, $limit: Int) { + organizations(filter: $filter, sort: $sort, limit: $limit) { orgId associatedAreaIds displayName @@ -312,6 +312,20 @@ describe('graphql server', () => { expect(dataResult.map(o => o.orgId).sort()).toEqual([muuidToString(deltaOrg.orgId), muuidToString(gammaOrg.orgId)].sort()) }) + it('limits organizations returned', async () => { + const response = await queryAPI({ + query: organizationsQuery, + operationName: 'organizations', + variables: { + limit: 1 + }, + userUuid + }) + expect(response.statusCode).toBe(200) + const dataResult = response.body.data.organizations + expect(dataResult.length).toBe(1) // Three matching orgs, but only return one. + }) + it('retrieves organizations using an associatedAreaIds filter', async () => { const response = await queryAPI({ query: organizationsQuery, diff --git a/src/graphql/organization/OrganizationQueries.ts b/src/graphql/organization/OrganizationQueries.ts index 6c2cae59..72085181 100644 --- a/src/graphql/organization/OrganizationQueries.ts +++ b/src/graphql/organization/OrganizationQueries.ts @@ -15,15 +15,15 @@ const OrganizationQueries = { organizations: async ( _, - { filter, sort }: { filter?: OrganizationGQLFilter, sort?: Sort }, + { filter, sort, limit = 40 }: { filter?: OrganizationGQLFilter, sort?: Sort, limit?: number }, { dataSources } ) => { const { organizations }: { organizations: OrganizationDataSource } = dataSources const filtered = await organizations.findOrganizationsByFilter(filter) if (sort != null) { - return await filtered.collation({ locale: 'en' }).sort(sort).toArray() + return await filtered.collation({ locale: 'en' }).sort(sort).limit(limit).toArray() } else { - return await filtered.collation({ locale: 'en' }).toArray() + return await filtered.collation({ locale: 'en' }).limit(limit).toArray() } } } diff --git a/src/graphql/schema/Organization.gql b/src/graphql/schema/Organization.gql index 1f5eb42f..1f4f72de 100644 --- a/src/graphql/schema/Organization.gql +++ b/src/graphql/schema/Organization.gql @@ -1,6 +1,6 @@ type Query { organization(muuid: MUUID): Organization - organizations(filter: OrgFilter, sort: OrgSort): [Organization] + organizations(filter: OrgFilter, sort: OrgSort, limit: Int): [Organization] } "A climbing area, wall or crag" @@ -39,6 +39,7 @@ type OrganizationContent { input OrgSort { displayName: Int + updatedAt: Int } input OrgFilter {