fix(backend): fix structure of unit test reports (#9199)

This commit is contained in:
Ulf Gebhardt 2026-02-10 17:13:07 +01:00 committed by GitHub
parent 75e36abbc6
commit 56eecf066b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -14,7 +14,7 @@ import createServer from '@src/server'
const instance = getNeode() const instance = getNeode()
const driver = getDriver() const driver = getDriver()
describe('file a report on a resource', () => { describe('reports', () => {
let authenticatedUser, currentUser, mutate, query, moderator, abusiveUser, otherReportingUser let authenticatedUser, currentUser, mutate, query, moderator, abusiveUser, otherReportingUser
const categoryIds = ['cat9'] const categoryIds = ['cat9']
const variables = { const variables = {
@ -659,251 +659,249 @@ describe('file a report on a resource', () => {
}) })
describe('authenticated', () => { describe('authenticated', () => {
it('role "user" gets no reports', async () => { describe('as user', () => {
authenticatedUser = await currentUser.toJson() beforeEach(async () => {
await expect(query({ query: reports })).resolves.toMatchObject({ authenticatedUser = await currentUser.toJson()
data: { reports: null }, })
errors: [{ message: 'Not Authorized!' }],
it('returns no reports', async () => {
await expect(query({ query: reports })).resolves.toMatchObject({
data: { reports: null },
errors: [{ message: 'Not Authorized!' }],
})
}) })
}) })
it('role "moderator" gets reports', async () => { describe('as moderator', () => {
const expected = { beforeEach(async () => {
reports: expect.arrayContaining([ authenticatedUser = await moderator.toJson()
expect.objectContaining({ })
id: expect.any(String),
createdAt: expect.any(String), it('gets reports', async () => {
updatedAt: expect.any(String), const expected = {
closed: false, reports: expect.arrayContaining([
resource: { expect.objectContaining({
__typename: 'User', id: expect.any(String),
id: 'abusive-user-1', createdAt: expect.any(String),
}, updatedAt: expect.any(String),
filed: expect.arrayContaining([ closed: false,
expect.objectContaining({ resource: {
submitter: expect.objectContaining({ __typename: 'User',
id: 'current-user-id', id: 'abusive-user-1',
},
filed: expect.arrayContaining([
expect.objectContaining({
submitter: expect.objectContaining({
id: 'current-user-id',
}),
createdAt: expect.any(String),
reasonCategory: 'doxing',
reasonDescription: 'This user is harassing me with bigoted remarks',
}), }),
createdAt: expect.any(String), ]),
reasonCategory: 'doxing', }),
reasonDescription: 'This user is harassing me with bigoted remarks', expect.objectContaining({
}), id: expect.any(String),
]), createdAt: expect.any(String),
}), updatedAt: expect.any(String),
expect.objectContaining({ closed: false,
id: expect.any(String), resource: {
createdAt: expect.any(String), __typename: 'Post',
updatedAt: expect.any(String), id: 'abusive-post-1',
closed: false, },
resource: { filed: expect.arrayContaining([
__typename: 'Post', expect.objectContaining({
id: 'abusive-post-1', submitter: expect.objectContaining({
}, id: 'current-user-id',
filed: expect.arrayContaining([ }),
expect.objectContaining({ createdAt: expect.any(String),
submitter: expect.objectContaining({ reasonCategory: 'other',
id: 'current-user-id', reasonDescription: 'This post is bigoted',
}), }),
createdAt: expect.any(String), ]),
reasonCategory: 'other', }),
reasonDescription: 'This post is bigoted', expect.objectContaining({
}), id: expect.any(String),
]), createdAt: expect.any(String),
}), updatedAt: expect.any(String),
expect.objectContaining({ closed: false,
id: expect.any(String), resource: {
createdAt: expect.any(String), __typename: 'Comment',
updatedAt: expect.any(String), id: 'abusive-comment-1',
closed: false, },
resource: { filed: expect.arrayContaining([
__typename: 'Comment', expect.objectContaining({
id: 'abusive-comment-1', submitter: expect.objectContaining({
}, id: 'current-user-id',
filed: expect.arrayContaining([ }),
expect.objectContaining({ createdAt: expect.any(String),
submitter: expect.objectContaining({ reasonCategory: 'discrimination_etc',
id: 'current-user-id', reasonDescription: 'This comment is bigoted',
}), }),
createdAt: expect.any(String), ]),
reasonCategory: 'discrimination_etc', }),
reasonDescription: 'This comment is bigoted', ]),
}), }
]), const { data } = await query({ query: reports })
}), expect(data).toEqual(expected)
]),
}
authenticatedUser = await moderator.toJson()
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' },
})
const sorted = [...data.reports].sort((a, b) => (a.createdAt > b.createdAt ? 1 : -1))
expect(data.reports).toEqual(sorted)
}) })
it('createdAt_desc returns reports in descending order', async () => { describe('orderBy', () => {
authenticatedUser = await moderator.toJson() it('createdAt_asc returns reports in ascending order', async () => {
const { data } = await query({ const { data } = await query({
query: reports, query: reports,
variables: { orderBy: 'createdAt_desc' }, variables: { orderBy: 'createdAt_asc' },
})
const sorted = [...data.reports].sort((a, b) => (a.createdAt > b.createdAt ? 1 : -1))
expect(data.reports).toEqual(sorted)
}) })
const sorted = [...data.reports].sort((a, b) => (a.createdAt < b.createdAt ? 1 : -1))
expect(data.reports).toEqual(sorted)
})
})
describe('reviewed filter', () => { it('createdAt_desc returns reports in descending order', async () => {
it('reviewed: false returns only unreviewed reports', async () => { const { data } = await query({
authenticatedUser = await moderator.toJson() query: reports,
const { data } = await query({ variables: { orderBy: 'createdAt_desc' },
query: reports, })
variables: { reviewed: false }, const sorted = [...data.reports].sort((a, b) => (a.createdAt < b.createdAt ? 1 : -1))
}) expect(data.reports).toEqual(sorted)
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 () => { describe('reviewed filter', () => {
authenticatedUser = await moderator.toJson() it('reviewed: false returns only unreviewed reports', async () => {
// close one report via review const { data } = await query({
await mutate({ query: reports,
mutation: review, variables: { reviewed: false },
variables: { resourceId: 'abusive-post-1', disable: false, closed: true }, })
expect(data.reports).toHaveLength(3)
}) })
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)
})
})
describe('combined reviewed and closed filter', () => { it('reviewed: true returns only reviewed reports', async () => {
it('returns only reports matching both filters', async () => { // review one report
authenticatedUser = await moderator.toJson() await mutate({
// review and close one report mutation: review,
await mutate({ variables: { resourceId: 'abusive-post-1', disable: false, closed: false },
mutation: review, })
variables: { resourceId: 'abusive-post-1', disable: false, closed: true }, const { data } = await query({
query: reports,
variables: { reviewed: true },
})
expect(data.reports).toHaveLength(1)
expect(data.reports[0].resource.id).toBe('abusive-post-1')
}) })
// review but keep open another report
await mutate({
mutation: review,
variables: { resourceId: 'abusive-user-1', disable: false, closed: false },
})
const { data } = await query({
query: reports,
variables: { reviewed: true, closed: true },
})
expect(data.reports).toHaveLength(1)
expect(data.reports[0].resource.id).toBe('abusive-post-1')
expect(data.reports[0].closed).toBe(true)
}) })
it('reviewed: true, closed: false returns reviewed but open reports', async () => { describe('closed filter', () => {
authenticatedUser = await moderator.toJson() it('closed: false returns only open reports', async () => {
// review and close one report const { data } = await query({
await mutate({ query: reports,
mutation: review, variables: { closed: false },
variables: { resourceId: 'abusive-post-1', disable: false, closed: true }, })
expect(data.reports).toHaveLength(3)
data.reports.forEach((report) => {
expect(report.closed).toBe(false)
})
}) })
// review but keep open another report
await mutate({
mutation: review,
variables: { resourceId: 'abusive-user-1', disable: false, closed: false },
})
const { data } = await query({
query: reports,
variables: { reviewed: true, closed: false },
})
expect(data.reports).toHaveLength(1)
expect(data.reports[0].resource.id).toBe('abusive-user-1')
expect(data.reports[0].closed).toBe(false)
})
})
describe('pagination', () => { it('closed: true returns only closed reports', async () => {
it('first: 2 returns only 2 reports', async () => { // close one report via review
authenticatedUser = await moderator.toJson() await mutate({
const { data } = await query({ mutation: review,
query: reports, variables: { resourceId: 'abusive-post-1', disable: false, closed: true },
variables: { first: 2 }, })
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)
}) })
expect(data.reports).toHaveLength(2)
}) })
it('first: 1 returns only 1 report', async () => { describe('combined reviewed and closed filter', () => {
authenticatedUser = await moderator.toJson() it('returns only reports matching both filters', async () => {
const { data } = await query({ // review and close one report
query: reports, await mutate({
variables: { first: 1 }, mutation: review,
variables: { resourceId: 'abusive-post-1', disable: false, closed: true },
})
// review but keep open another report
await mutate({
mutation: review,
variables: { resourceId: 'abusive-user-1', disable: false, closed: false },
})
const { data } = await query({
query: reports,
variables: { reviewed: true, closed: true },
})
expect(data.reports).toHaveLength(1)
expect(data.reports[0].resource.id).toBe('abusive-post-1')
expect(data.reports[0].closed).toBe(true)
})
it('reviewed: true, closed: false returns reviewed but open reports', async () => {
// review and close one report
await mutate({
mutation: review,
variables: { resourceId: 'abusive-post-1', disable: false, closed: true },
})
// review but keep open another report
await mutate({
mutation: review,
variables: { resourceId: 'abusive-user-1', disable: false, closed: false },
})
const { data } = await query({
query: reports,
variables: { reviewed: true, closed: false },
})
expect(data.reports).toHaveLength(1)
expect(data.reports[0].resource.id).toBe('abusive-user-1')
expect(data.reports[0].closed).toBe(false)
}) })
expect(data.reports).toHaveLength(1)
}) })
it('offset: 1 skips the first report', async () => { describe('pagination', () => {
authenticatedUser = await moderator.toJson() it('first: 2 returns only 2 reports', async () => {
const { data: allData } = await query({ const { data } = await query({
query: reports, query: reports,
variables: { orderBy: 'createdAt_asc' }, variables: { first: 2 },
})
expect(data.reports).toHaveLength(2)
}) })
const { data: offsetData } = await query({
query: reports,
variables: { orderBy: 'createdAt_asc', offset: 1 },
})
expect(offsetData.reports).toHaveLength(allData.reports.length - 1)
expect(offsetData.reports[0].id).toBe(allData.reports[1].id)
})
it('first and offset combined for paging', async () => { it('first: 1 returns only 1 report', async () => {
authenticatedUser = await moderator.toJson() const { data } = await query({
const { data: allData } = await query({ query: reports,
query: reports, variables: { first: 1 },
variables: { orderBy: 'createdAt_asc' }, })
expect(data.reports).toHaveLength(1)
}) })
const { data: pageData } = await query({
query: reports, it('offset: 1 skips the first report', async () => {
variables: { orderBy: 'createdAt_asc', first: 1, offset: 1 }, const { data: allData } = await query({
query: reports,
variables: { orderBy: 'createdAt_asc' },
})
const { data: offsetData } = await query({
query: reports,
variables: { orderBy: 'createdAt_asc', offset: 1 },
})
expect(offsetData.reports).toHaveLength(allData.reports.length - 1)
expect(offsetData.reports[0].id).toBe(allData.reports[1].id)
})
it('first and offset combined for paging', async () => {
const { data: allData } = await query({
query: reports,
variables: { orderBy: 'createdAt_asc' },
})
const { data: pageData } = await query({
query: reports,
variables: { orderBy: 'createdAt_asc', first: 1, offset: 1 },
})
expect(pageData.reports).toHaveLength(1)
expect(pageData.reports[0].id).toBe(allData.reports[1].id)
}) })
expect(pageData.reports).toHaveLength(1)
expect(pageData.reports[0].id).toBe(allData.reports[1].id)
}) })
}) })
}) })