Refactor resolver to use Promise and map

- forEach cannot be used with async/await
This commit is contained in:
Matt Rider 2019-06-07 15:58:51 -03:00
parent ef1f5ea51c
commit f7b2d52a7e
2 changed files with 56 additions and 65 deletions

View File

@ -14,8 +14,10 @@ export default {
DeleteUser: async (object, params, context, resolveInfo) => { DeleteUser: async (object, params, context, resolveInfo) => {
const { resource } = params const { resource } = params
const session = context.driver.session() const session = context.driver.session()
if (resource && resource.length) { if (resource && resource.length) {
resource.forEach(async node => { await Promise.all(
resource.map(async node => {
await session.run( await session.run(
` `
MATCH (resource:${node})<-[:WROTE]-(author:User {id: $userId}) MATCH (resource:${node})<-[:WROTE]-(author:User {id: $userId})
@ -25,9 +27,10 @@ export default {
userId: context.user.id, userId: context.user.id,
}, },
) )
}) }),
} )
session.close() session.close()
}
return neo4jgraphql(object, params, context, resolveInfo, false) return neo4jgraphql(object, params, context, resolveInfo, false)
}, },
}, },

View File

@ -91,6 +91,12 @@ describe('users', () => {
mutation($id: ID!, $resource: [String]) { mutation($id: ID!, $resource: [String]) {
DeleteUser(id: $id, resource: $resource) { DeleteUser(id: $id, resource: $resource) {
id id
contributions {
id
}
comments {
id
}
} }
} }
` `
@ -137,24 +143,7 @@ describe('users', () => {
}) })
describe('attempting to delete my own account', () => { describe('attempting to delete my own account', () => {
const commentQueryVariables = { id: 'c155' } let expected
const postQueryVariables = { id: 'p139' }
const commentQuery = gql`
query($id: ID) {
Comment(id: $id) {
id
}
}
`
const postQuery = gql`
query($id: ID) {
Post(id: $id) {
id
}
}
`
beforeEach(async () => { beforeEach(async () => {
await asAuthor.authenticateAs({ await asAuthor.authenticateAs({
email: 'test@example.org', email: 'test@example.org',
@ -169,40 +158,20 @@ describe('users', () => {
postId: 'p139', postId: 'p139',
content: 'Comment by user u343', content: 'Comment by user u343',
}) })
}) expectedResponse = {
it('deletes my account', async () => {
const expected = {
DeleteUser: { DeleteUser: {
id: 'u343', id: 'u343',
contributions: [{ id: 'p139' }],
comments: [{ id: 'c155' }],
}, },
} }
})
it("deletes my account, but doesn't delete posts or comments by default", async () => {
await expect(client.request(deleteUserMutation, deleteUserVariables)).resolves.toEqual( await expect(client.request(deleteUserMutation, deleteUserVariables)).resolves.toEqual(
expected, expectedResponse,
) )
}) })
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',
},
])
})
})
describe("deletes a user's", () => { describe("deletes a user's", () => {
beforeEach(async () => { beforeEach(async () => {
deleteUserVariables = { id: 'u343', resource: [] } deleteUserVariables = { id: 'u343', resource: [] }
@ -210,25 +179,44 @@ describe('users', () => {
it('posts on request', async () => { it('posts on request', async () => {
deleteUserVariables = { id: 'u343', resource: ['Post'] } deleteUserVariables = { id: 'u343', resource: ['Post'] }
await client.request(deleteUserMutation, deleteUserVariables) expectedResponse = {
const { Post } = await client.request(postQuery, postQueryVariables) DeleteUser: {
expect(Post).toEqual([]) id: 'u343',
contributions: [],
comments: [{ id: 'c155' }],
},
}
await expect(client.request(deleteUserMutation, deleteUserVariables)).resolves.toEqual(
expectedResponse,
)
}) })
it('comments on request', async () => { it('comments on request', async () => {
deleteUserVariables = { id: 'u343', resource: ['Comment'] } deleteUserVariables = { id: 'u343', resource: ['Comment'] }
await client.request(deleteUserMutation, deleteUserVariables) expectedResponse = {
const { Comment } = await client.request(commentQuery, commentQueryVariables) DeleteUser: {
expect(Comment).toEqual([]) id: 'u343',
contributions: [{ id: 'p139' }],
comments: [],
},
}
await expect(client.request(deleteUserMutation, deleteUserVariables)).resolves.toEqual(
expectedResponse,
)
}) })
it('posts and comments on request', async () => { it('posts and comments on request', async () => {
deleteUserVariables = { id: 'u343', resource: ['Post', 'Comment'] } deleteUserVariables = { id: 'u343', resource: ['Post', 'Comment'] }
await client.request(deleteUserMutation, deleteUserVariables) expectedResponse = {
const { Post } = await client.request(postQuery, postQueryVariables) DeleteUser: {
const { Comment } = await client.request(commentQuery, commentQueryVariables) id: 'u343',
expect(Post).toEqual([]) contributions: [],
expect(Comment).toEqual([]) comments: [],
},
}
await expect(client.request(deleteUserMutation, deleteUserVariables)).resolves.toEqual(
expectedResponse,
)
}) })
}) })
}) })