From 5ffaac193d79e0a4c9d33dbaaf7d22230429bca3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Wed, 19 Feb 2020 11:37:31 +0100 Subject: [PATCH] Refactor tests, going on --- backend/src/schema/resolvers/moderation.js | 32 ++--- backend/src/schema/resolvers/reports.js | 20 +-- backend/src/schema/resolvers/reports.spec.js | 136 ++++++++++++++++--- backend/src/schema/types/type/REVIEWED.gql | 1 - 4 files changed, 142 insertions(+), 47 deletions(-) diff --git a/backend/src/schema/resolvers/moderation.js b/backend/src/schema/resolvers/moderation.js index 4bdf82d50..08a3b6ff3 100644 --- a/backend/src/schema/resolvers/moderation.js +++ b/backend/src/schema/resolvers/moderation.js @@ -1,20 +1,10 @@ -const transformReturnType = record => { - return { - ...record.get('review').properties, - report: record.get('report').properties, - resource: { - __typename: record.get('type'), - ...record.get('resource').properties, - }, - } -} +import log from './helpers/databaseLogger' export default { Mutation: { review: async (_object, params, context, _resolveInfo) => { const { user: moderator, driver } = context - let createdRelationshipWithNestedAttributes = null // return value const session = driver.session() try { const cypher = ` @@ -25,10 +15,11 @@ export default { ON CREATE SET review.createdAt = $dateTime, review.updatedAt = review.createdAt ON MATCH SET review.updatedAt = $dateTime SET review.disable = $params.disable - SET report.updatedAt = $dateTime, report.closed = $params.closed - SET resource.disabled = review.disable + SET report.updatedAt = $dateTime, report.disable = review.disable, report.closed = $params.closed + SET resource.disabled = report.disable - RETURN review, report, resource, labels(resource)[0] AS type + WITH review, report, resource {.*, __typename: labels(resource)[0]} AS finalResource + RETURN review {.*, report: properties(report), resource: properties(finalResource)} ` const reviewWriteTxResultPromise = session.writeTransaction(async txc => { const reviewTransactionResponse = await txc.run(cypher, { @@ -36,16 +27,17 @@ export default { moderatorId: moderator.id, dateTime: new Date().toISOString(), }) - return reviewTransactionResponse.records.map(transformReturnType) + log(reviewTransactionResponse) + return reviewTransactionResponse.records.map(record => + record.get('review'), + ) }) - const txResult = await reviewWriteTxResultPromise - if (!txResult[0]) return null - createdRelationshipWithNestedAttributes = txResult[0] + const [reviewed] = await reviewWriteTxResultPromise + // Wolle console.log('reviewed: ', reviewed) + return reviewed || null } finally { session.close() } - - return createdRelationshipWithNestedAttributes }, }, } diff --git a/backend/src/schema/resolvers/reports.js b/backend/src/schema/resolvers/reports.js index d68f60f36..8e6bcf786 100644 --- a/backend/src/schema/resolvers/reports.js +++ b/backend/src/schema/resolvers/reports.js @@ -16,8 +16,8 @@ export default { const { resourceId, reasonCategory, reasonDescription } = params const { driver, user } = context const session = driver.session() - const reportWriteTxResultPromise = session.writeTransaction(async transaction => { - const reportTransactionResponse = await transaction.run( + const fileReportWriteTxResultPromise = session.writeTransaction(async transaction => { + const fileReportTransactionResponse = await transaction.run( ` MATCH (submitter:User {id: $submitterId}) MATCH (resource {id: $resourceId}) @@ -38,19 +38,19 @@ export default { reasonDescription, }, ) - log(reportTransactionResponse) - // Wolle return reportTransactionResponse.records.map(transformReturnType) - return reportTransactionResponse.records.map(record => + log(fileReportTransactionResponse) + // Wolle return fileReportTransactionResponse.records.map(transformReturnType) + return fileReportTransactionResponse.records.map(record => record.get('filedReport'), ) }) try { - const [createdRelationshipWithNestedAttributes] = await reportWriteTxResultPromise - console.log('createdRelationshipWithNestedAttributes: ', createdRelationshipWithNestedAttributes) - if (!createdRelationshipWithNestedAttributes) return null - return createdRelationshipWithNestedAttributes + const [filedReport] = await fileReportWriteTxResultPromise + console.log('filedReport: ', filedReport) + // Wolle if (!filedReport) return null + return filedReport || null } finally { - console.log('session.close !!!') + console.log('fileReport: session.close !!!') session.close() } }, diff --git a/backend/src/schema/resolvers/reports.spec.js b/backend/src/schema/resolvers/reports.spec.js index e411a2046..6a9df6639 100644 --- a/backend/src/schema/resolvers/reports.spec.js +++ b/backend/src/schema/resolvers/reports.spec.js @@ -75,18 +75,20 @@ describe('file a report on a resource', () => { reasonDescription: 'Violates code of conduct !!!', } const reportsQuery = gql` - query { - reports(orderBy: createdAt_desc) { + query($closed: Boolean) { + reports(orderBy: createdAt_desc, closed: $closed) { id createdAt updatedAt + rule + disable closed resource { __typename ... on User { id - # Wolle FOLLOWSfiledUnclosedReportByCurrentUser - followedByCurrentUser + # Wolle filedUnclosedReportByCurrentUser + # Wolle test followedByCurrentUser } ... on Post { id @@ -106,6 +108,31 @@ describe('file a report on a resource', () => { } } ` + const reviewMutation = gql` + mutation($resourceId: ID!, $disable: Boolean, $closed: Boolean) { + review(resourceId: $resourceId, disable: $disable, closed: $closed) { + createdAt + resource { + __typename + ... on User { + id + disabled + } + ... on Post { + id + disabled + } + ... on Comment { + id + disabled + } + } + report { + disable + } + } + } + ` beforeAll(async () => { await cleanDatabase() @@ -150,6 +177,17 @@ describe('file a report on a resource', () => { password: '1234', }, ) + moderator = await Factory.build( + 'user', + { + id: 'moderator-id', + role: 'moderator', + }, + { + email: 'moderator@example.org', + password: '1234', + }, + ) otherReportingUser = await Factory.build( 'user', { @@ -192,7 +230,8 @@ describe('file a report on a resource', () => { describe('valid resource', () => { describe('creates report', () => { - it.only('which belongs to resource now reported by current user', async () => { + it('which belongs to resource', async () => { + // Wolle it('which belongs to resource now reported by current user', async () => { await expect( mutate({ mutation: fileReportMutation, @@ -212,7 +251,7 @@ describe('file a report on a resource', () => { }) }) - it('creates only one report for multiple reports on the same resource', async () => { + it('only one report for multiple reports on the same resource', async () => { const firstReport = await mutate({ mutation: fileReportMutation, variables: { ...variables, resourceId: 'abusive-user-id' }, @@ -222,24 +261,89 @@ describe('file a report on a resource', () => { mutation: fileReportMutation, variables: { ...variables, resourceId: 'abusive-user-id' }, }) - expect(firstReport.data.fileReport.id).toEqual(secondReport.data.fileReport.id) + expect(firstReport.data.fileReport.reportId).toEqual(secondReport.data.fileReport.reportId) }) - it('returns the rule for how the report was decided', async () => { + it('with the rule for how the report will be decided', async () => { + await mutate({ + mutation: fileReportMutation, + variables: { ...variables, resourceId: 'abusive-user-id' }, + }) + authenticatedUser = await moderator.toJson() await expect( - mutate({ - mutation: fileReportMutation, - variables: { ...variables, resourceId: 'abusive-user-id' }, - }), + query({ + query: reportsQuery + }) ).resolves.toMatchObject({ data: { - fileReport: { + reports: [{ rule: 'latestReviewUpdatedAtRules', - }, + }], }, errors: undefined, }) }) + + describe('with overtaken disabled from resource in disable property', () => { + it('disable is false', async () => { + await mutate({ + mutation: fileReportMutation, + variables: { ...variables, resourceId: 'abusive-user-id' }, + }) + authenticatedUser = await moderator.toJson() + await expect( + query({ + query: reportsQuery + }), + ).resolves.toMatchObject({ + data: { + reports: [{ + disable: false, + }], + }, + errors: undefined, + }) + }) + + it.only('disable is true', async () => { + // first time filling a report to enable a moderator the disable the resource + await mutate({ + mutation: fileReportMutation, + variables: { ...variables, resourceId: 'abusive-user-id' }, + }) + authenticatedUser = await moderator.toJson() + const review = await mutate({ + mutation: reviewMutation, + variables: { + resourceId: 'abusive-user-id', + disable: true, + closed: true, + }, + }) + console.log('review: ', review) + authenticatedUser = await currentUser.toJson() + // second time filling a report to see if the "disabled is true" of the resource is overtaken + await mutate({ + mutation: fileReportMutation, + variables: { ...variables, resourceId: 'abusive-user-id' }, + }) + // authenticatedUser = await moderator.toJson() + // await expect( + // query({ + // query: reportsQuery, + // variables: { closed: false }, + // }), + // ).resolves.toMatchObject({ + // data: { + // reports: [{ + // disable: true, + // }], + // }, + // errors: undefined, + // }) + }) + }) + it.todo('creates multiple filed reports') }) @@ -707,7 +811,7 @@ describe('file a report on a resource', () => { }) }) - it.only('role "moderator" gets reports', async () => { + it('role "moderator" gets reports', async () => { const expected = { reports: expect.arrayContaining([ expect.objectContaining({ @@ -719,7 +823,7 @@ describe('file a report on a resource', () => { __typename: 'User', id: 'abusive-user-1', // Wolle filedUnclosedReportByCurrentUser: false, - followedByCurrentUser: false, + // Wolle test followedByCurrentUser: false, }, filed: expect.arrayContaining([ expect.objectContaining({ diff --git a/backend/src/schema/types/type/REVIEWED.gql b/backend/src/schema/types/type/REVIEWED.gql index aea005abe..086d73815 100644 --- a/backend/src/schema/types/type/REVIEWED.gql +++ b/backend/src/schema/types/type/REVIEWED.gql @@ -4,7 +4,6 @@ type REVIEWED { disable: Boolean! closed: Boolean! report: Report - # @cypher(statement: "MATCH (report:Report)<-[this:REVIEWED]-(:User) RETURN report") moderator: User resource: ReviewedResource }