diff --git a/backend/src/schema/resolvers/users.js b/backend/src/schema/resolvers/users.js index 60558a056..f1cfffd65 100644 --- a/backend/src/schema/resolvers/users.js +++ b/backend/src/schema/resolvers/users.js @@ -14,20 +14,23 @@ export default { DeleteUser: async (object, params, context, resolveInfo) => { const { resource } = params const session = context.driver.session() + if (resource && resource.length) { - resource.forEach(async node => { - await session.run( - ` + await Promise.all( + resource.map(async node => { + await session.run( + ` MATCH (resource:${node})<-[:WROTE]-(author:User {id: $userId}) DETACH DELETE resource RETURN author`, - { - userId: context.user.id, - }, - ) - }) + { + userId: context.user.id, + }, + ) + }), + ) + session.close() } - session.close() return neo4jgraphql(object, params, context, resolveInfo, false) }, }, diff --git a/backend/src/schema/resolvers/users.spec.js b/backend/src/schema/resolvers/users.spec.js index 320c49a7b..3706cbbae 100644 --- a/backend/src/schema/resolvers/users.spec.js +++ b/backend/src/schema/resolvers/users.spec.js @@ -91,6 +91,12 @@ describe('users', () => { mutation($id: ID!, $resource: [String]) { DeleteUser(id: $id, resource: $resource) { id + contributions { + id + } + comments { + id + } } } ` @@ -137,24 +143,7 @@ describe('users', () => { }) describe('attempting to delete my own account', () => { - const commentQueryVariables = { id: 'c155' } - const postQueryVariables = { id: 'p139' } - const commentQuery = gql` - query($id: ID) { - Comment(id: $id) { - id - } - } - ` - - const postQuery = gql` - query($id: ID) { - Post(id: $id) { - id - } - } - ` - + let expected beforeEach(async () => { await asAuthor.authenticateAs({ email: 'test@example.org', @@ -169,38 +158,18 @@ describe('users', () => { postId: 'p139', content: 'Comment by user u343', }) - }) - it('deletes my account', async () => { - const expected = { + expectedResponse = { DeleteUser: { id: 'u343', + contributions: [{ id: 'p139' }], + comments: [{ id: 'c155' }], }, } - await expect(client.request(deleteUserMutation, deleteUserVariables)).resolves.toEqual( - expected, - ) }) - - describe("doesn't delete a user's", () => { - it('comments by default', async () => { - await client.request(deleteUserMutation, deleteUserVariables) - const { Comment } = await client.request(commentQuery, commentQueryVariables) - expect(Comment).toEqual([ - { - id: 'c155', - }, - ]) - }) - - it('posts by default', async () => { - await client.request(deleteUserMutation, deleteUserVariables) - const { Post } = await client.request(postQuery, postQueryVariables) - expect(Post).toEqual([ - { - id: 'p139', - }, - ]) - }) + it("deletes my account, but doesn't delete posts or comments by default", async () => { + await expect(client.request(deleteUserMutation, deleteUserVariables)).resolves.toEqual( + expectedResponse, + ) }) describe("deletes a user's", () => { @@ -210,25 +179,44 @@ describe('users', () => { it('posts on request', async () => { deleteUserVariables = { id: 'u343', resource: ['Post'] } - await client.request(deleteUserMutation, deleteUserVariables) - const { Post } = await client.request(postQuery, postQueryVariables) - expect(Post).toEqual([]) + expectedResponse = { + DeleteUser: { + id: 'u343', + contributions: [], + comments: [{ id: 'c155' }], + }, + } + await expect(client.request(deleteUserMutation, deleteUserVariables)).resolves.toEqual( + expectedResponse, + ) }) it('comments on request', async () => { deleteUserVariables = { id: 'u343', resource: ['Comment'] } - await client.request(deleteUserMutation, deleteUserVariables) - const { Comment } = await client.request(commentQuery, commentQueryVariables) - expect(Comment).toEqual([]) + expectedResponse = { + DeleteUser: { + id: 'u343', + contributions: [{ id: 'p139' }], + comments: [], + }, + } + await expect(client.request(deleteUserMutation, deleteUserVariables)).resolves.toEqual( + expectedResponse, + ) }) it('posts and comments on request', async () => { deleteUserVariables = { id: 'u343', resource: ['Post', 'Comment'] } - await client.request(deleteUserMutation, deleteUserVariables) - const { Post } = await client.request(postQuery, postQueryVariables) - const { Comment } = await client.request(commentQuery, commentQueryVariables) - expect(Post).toEqual([]) - expect(Comment).toEqual([]) + expectedResponse = { + DeleteUser: { + id: 'u343', + contributions: [], + comments: [], + }, + } + await expect(client.request(deleteUserMutation, deleteUserVariables)).resolves.toEqual( + expectedResponse, + ) }) }) })