Start writing a resolver for requestPasswordReset

This commit is contained in:
Robert Schäfer 2019-06-15 15:42:17 +02:00
parent f9d25828d5
commit e44ed7d281
5 changed files with 60 additions and 1 deletions

View File

@ -147,6 +147,7 @@ const permissions = shield(
CreateComment: isAuthenticated,
DeleteComment: isAuthor,
DeleteUser: isDeletingOwnAccount,
requestPasswordReset: allow,
},
User: {
email: isMyOwn,

View File

@ -0,0 +1,10 @@
export default {
Mutation: {
requestPasswordReset: async (_, { email }, { driver }) => {
throw Error('Not Implemented')
},
resetPassword: async (_, { email, token, newPassword }, { driver }) => {
throw Error('Not Implemented')
}
}
}

View File

@ -0,0 +1,46 @@
import { GraphQLClient } from 'graphql-request'
import Factory from '../../seed/factories'
import { host, login } from '../../jest/helpers'
import { getDriver } from '../../bootstrap/neo4j'
const factory = Factory()
let client
const driver = getDriver()
const getAllPasswordResets = async () => {
const session = driver.session()
let transactionRes = await session.run('MATCH (r:PasswordReset) RETURN r')
const resets = transactionRes.records.map(record => record.get('r'))
session.close()
return resets
}
describe('passwordReset', () => {
beforeEach(async () => {
client = new GraphQLClient(host)
await factory.create('User', {
email: 'user@example.org',
role: 'user',
password: '1234',
})
})
afterEach(async () => {
await factory.cleanDatabase()
})
describe('requestPasswordReset', () => {
const variables = { email: 'user@example.org' }
const mutation = `mutation($email: String!) { requestPasswordReset(email: $email) }`
it('resolves', async () => {
await expect(client.request(mutation, variables)).resolves.toEqual(true)
})
it('creates node with label `PasswordReset`', async () => {
await client.request(mutation, variables)
const resets = await getAllPasswordResets()
expect(resets).toHaveLength(1)
})
})
})

View File

@ -59,7 +59,7 @@ export default {
changePassword: async (_, { oldPassword, newPassword }, { driver, user }) => {
const session = driver.session()
let result = await session.run(
`MATCH (user:User {email: $userEmail})
`MATCH (user:User {email: $userEmail})
RETURN user {.id, .email, .password}`,
{
userEmail: user.email,

View File

@ -25,6 +25,8 @@ type Mutation {
login(email: String!, password: String!): String!
signup(email: String!, password: String!): Boolean!
changePassword(oldPassword: String!, newPassword: String!): String!
requestPasswordReset(email: String!): Boolean!
resetPassword(email: String!, resetToken: String!, newPassword: String!): String!
report(id: ID!, description: String): Report
disable(id: ID!): ID
enable(id: ID!): ID