From 5831bf96531931735c8c2a642192fa64cbd59858 Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Fri, 13 Oct 2023 01:03:54 +0200 Subject: [PATCH 1/2] test: Implement getCurrentUser graphQL test --- .../graphql/queries/get-current-user.test.ts | 107 ++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 packages/backend/src/graphql/queries/get-current-user.test.ts diff --git a/packages/backend/src/graphql/queries/get-current-user.test.ts b/packages/backend/src/graphql/queries/get-current-user.test.ts new file mode 100644 index 0000000000..0c0cc92ae0 --- /dev/null +++ b/packages/backend/src/graphql/queries/get-current-user.test.ts @@ -0,0 +1,107 @@ +import request, { Test } from 'supertest'; +import app from '../../app'; +import createAuthTokenByUserId from '../../helpers/create-auth-token-by-user-id'; +import createRole from '../../../test/fixtures/role'; +import createUser from '../../../test/fixtures/user'; +import { IRole, IUser } from '@automatisch/types'; + +describe('getCurrentUser', () => { + describe('with unauthorized user', () => { + it('should throw not authorized error', async () => { + const invalidUserToken = 'invalid-token'; + + const query = ` + query { + getCurrentUser { + id + email + } + } + `; + + const response = await request(app) + .post('/graphql') + .set('Authorization', invalidUserToken) + .send({ query }) + .expect(200); + + expect(response.body.errors).toBeDefined(); + expect(response.body.errors[0].message).toEqual('Not Authorised!'); + }); + }); + + describe('with authorized user', () => { + let role: IRole, currentUser: IUser, token: string, requestObject: Test; + + beforeEach(async () => { + role = await createRole({ + key: 'sample', + name: 'sample', + }); + + currentUser = await createUser({ + roleId: role.id, + }); + + token = createAuthTokenByUserId(currentUser.id); + requestObject = request(app) + .post('/graphql') + .set('Authorization', `${token}`); + }); + + it('should return user data', async () => { + const query = ` + query { + getCurrentUser { + id + email + fullName + email + createdAt + updatedAt + role { + id + name + } + } + } + `; + + const response = await requestObject.send({ query }).expect(200); + + const expectedResponsePayload = { + data: { + getCurrentUser: { + createdAt: (currentUser.createdAt as Date).getTime().toString(), + email: currentUser.email, + fullName: currentUser.fullName, + id: currentUser.id, + role: { id: role.id, name: role.name }, + updatedAt: (currentUser.updatedAt as Date).getTime().toString(), + }, + }, + }; + + expect(response.body).toEqual(expectedResponsePayload); + }); + + it('should not return user password', async () => { + const query = ` + query { + getCurrentUser { + id + email + password + } + } + `; + + const response = await requestObject.send({ query }).expect(400); + + expect(response.body.errors).toBeDefined(); + expect(response.body.errors[0].message).toEqual( + 'Cannot query field "password" on type "User".' + ); + }); + }); +}); From 5f335ef5b3265f3182a5b49179827fdb50a7fb14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20Faruk=20Ayd=C4=B1n?= Date: Fri, 13 Oct 2023 11:24:54 +0200 Subject: [PATCH 2/2] refactor: Use token without string interpolation for getCurrentUser test Co-authored-by: Ali BARIN --- packages/backend/src/graphql/queries/get-current-user.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend/src/graphql/queries/get-current-user.test.ts b/packages/backend/src/graphql/queries/get-current-user.test.ts index 0c0cc92ae0..20d2cbae5a 100644 --- a/packages/backend/src/graphql/queries/get-current-user.test.ts +++ b/packages/backend/src/graphql/queries/get-current-user.test.ts @@ -46,7 +46,7 @@ describe('getCurrentUser', () => { token = createAuthTokenByUserId(currentUser.id); requestObject = request(app) .post('/graphql') - .set('Authorization', `${token}`); + .set('Authorization', token); }); it('should return user data', async () => {