From 40c210a0ce61107482d0f281e134259f9c6a0b2c Mon Sep 17 00:00:00 2001 From: Matt Rider Date: Thu, 21 Feb 2019 21:09:33 -0300 Subject: [PATCH] Start unit testing report feature --- src/graphql-schema.spec.js | 61 +++++++++++++++++++- src/jest/helpers.js | 6 +- src/middleware/permissionsMiddleware.spec.js | 6 +- 3 files changed, 66 insertions(+), 7 deletions(-) diff --git a/src/graphql-schema.spec.js b/src/graphql-schema.spec.js index 69073444c..d425b0114 100644 --- a/src/graphql-schema.spec.js +++ b/src/graphql-schema.spec.js @@ -1,7 +1,7 @@ -import { request } from 'graphql-request' +import { GraphQLClient, request } from 'graphql-request' import { create, cleanDatabase } from './seed/factories' import jwt from 'jsonwebtoken' -import { host } from './jest/helpers' +import { host, login } from './jest/helpers' describe('login', () => { const mutation = (params) => { @@ -60,3 +60,60 @@ describe('login', () => { }) }) }) + +describe('report', () => { + beforeEach(async () => { + await create('user', { + email: 'test@example.org', + password: '1234' + }) + }) + + afterEach(async () => { + await cleanDatabase() + }) + + describe('unauthenticated', () => { + let client + it('throws authorization error', async () => { + client = new GraphQLClient(host) + await expect( + client.request(`mutation { + report( + description: "I don't like this user", + resource: { + id: "u1", + type: user + } + ) { id, createdAt } + }`) + ).rejects.toThrow('Not Authorised') + }) + + describe('authenticated', () => { + let headers + let response + beforeEach(async () => { + headers = await login({ email: 'test@example.org', password: '1234' }) + client = new GraphQLClient(host, { headers }) + response = await client.request(`mutation { + report( + description: "I don't like this user", + resource: { + id: "u1", + type: user + } + ) { id, createdAt } + }`, + { headers } + ) + }) + it('creates a report', () => { + let { id, createdAt } = response.report + expect(response).toEqual({ + report: { id, createdAt } + }) + }) + }) + }) +}) diff --git a/src/jest/helpers.js b/src/jest/helpers.js index 01a26e9d3..12cb63335 100644 --- a/src/jest/helpers.js +++ b/src/jest/helpers.js @@ -1,8 +1,10 @@ import { request } from 'graphql-request' +// this is the to-be-tested server host +// not to be confused with the seeder host export const host = 'http://127.0.0.1:4123' -export async function authenticatedHeaders ({ email, password }) { +export async function login ({ email, password }) { const mutation = ` mutation { login(email:"${email}", password:"${password}"){ @@ -13,4 +15,4 @@ export async function authenticatedHeaders ({ email, password }) { return { authorization: `Bearer ${response.login.token}` } -} +} \ No newline at end of file diff --git a/src/middleware/permissionsMiddleware.spec.js b/src/middleware/permissionsMiddleware.spec.js index cf86d11c9..9b115eae3 100644 --- a/src/middleware/permissionsMiddleware.spec.js +++ b/src/middleware/permissionsMiddleware.spec.js @@ -1,5 +1,5 @@ import { create, cleanDatabase } from '../seed/factories' -import { host, authenticatedHeaders } from '../jest/helpers' +import { host, login } from '../jest/helpers' import { GraphQLClient } from 'graphql-request' describe('authorization', () => { @@ -45,7 +45,7 @@ describe('authorization', () => { describe('as owner', () => { it('exposes the owner\'s email address', async () => { - headers = await authenticatedHeaders({ + headers = await login({ email: 'owner@example.org', password: 'iamtheowner' }) @@ -55,7 +55,7 @@ describe('authorization', () => { describe('as someone else', () => { it('does not expose the owner\'s email address', async () => { - headers = await authenticatedHeaders({ + headers = await login({ email: 'someone@example.org', password: 'else' })