diff --git a/backend/src/graphql/queries/reports.ts b/backend/src/graphql/queries/reports.ts index 13849d3e4..777ac6241 100644 --- a/backend/src/graphql/queries/reports.ts +++ b/backend/src/graphql/queries/reports.ts @@ -1,8 +1,8 @@ import gql from 'graphql-tag' export const reports = gql` - query ($closed: Boolean) { - reports(orderBy: createdAt_desc, closed: $closed) { + query ($orderBy: ReportOrdering, $reviewed: Boolean, $closed: Boolean) { + reports(orderBy: $orderBy, reviewed: $reviewed, closed: $closed) { id createdAt updatedAt diff --git a/backend/src/graphql/resolvers/reports.spec.ts b/backend/src/graphql/resolvers/reports.spec.ts index 5b51b1073..7ecb28d30 100644 --- a/backend/src/graphql/resolvers/reports.spec.ts +++ b/backend/src/graphql/resolvers/reports.spec.ts @@ -737,6 +737,88 @@ describe('file a report on a resource', () => { const { data } = await query({ query: reports }) expect(data).toEqual(expected) }) + + describe('orderBy', () => { + it('createdAt_asc returns reports in ascending order', async () => { + authenticatedUser = await moderator.toJson() + const { data } = await query({ + query: reports, + variables: { orderBy: 'createdAt_asc' }, + }) + expect(data.reports.length).toBeGreaterThanOrEqual(2) + for (let i = 1; i < data.reports.length; i++) { + expect(data.reports[i].createdAt >= data.reports[i - 1].createdAt).toBe(true) + } + }) + + it('createdAt_desc returns reports in descending order', async () => { + authenticatedUser = await moderator.toJson() + const { data } = await query({ + query: reports, + variables: { orderBy: 'createdAt_desc' }, + }) + expect(data.reports.length).toBeGreaterThanOrEqual(2) + for (let i = 1; i < data.reports.length; i++) { + expect(data.reports[i].createdAt <= data.reports[i - 1].createdAt).toBe(true) + } + }) + }) + + describe('reviewed filter', () => { + it('reviewed: false returns only unreviewed reports', async () => { + authenticatedUser = await moderator.toJson() + const { data } = await query({ + query: reports, + variables: { reviewed: false }, + }) + expect(data.reports).toHaveLength(3) + }) + + it('reviewed: true returns only reviewed reports', async () => { + authenticatedUser = await moderator.toJson() + // review one report + await mutate({ + mutation: review, + variables: { resourceId: 'abusive-post-1', disable: false, closed: false }, + }) + const { data } = await query({ + query: reports, + variables: { reviewed: true }, + }) + expect(data.reports).toHaveLength(1) + expect(data.reports[0].resource.id).toBe('abusive-post-1') + }) + }) + + describe('closed filter', () => { + it('closed: false returns only open reports', async () => { + authenticatedUser = await moderator.toJson() + const { data } = await query({ + query: reports, + variables: { closed: false }, + }) + expect(data.reports).toHaveLength(3) + data.reports.forEach((report) => { + expect(report.closed).toBe(false) + }) + }) + + it('closed: true returns only closed reports', async () => { + authenticatedUser = await moderator.toJson() + // close one report via review + await mutate({ + mutation: review, + variables: { resourceId: 'abusive-post-1', disable: false, closed: true }, + }) + const { data } = await query({ + query: reports, + variables: { closed: true }, + }) + expect(data.reports).toHaveLength(1) + expect(data.reports[0].resource.id).toBe('abusive-post-1') + expect(data.reports[0].closed).toBe(true) + }) + }) }) }) })