import { describe, it, expect, beforeEach } from 'vitest'; import request from 'supertest'; import app from '../../app'; import createAuthTokenByUserId from '../../helpers/create-auth-token-by-user-id'; import { createRole } from '../../../test/factories/role'; import { createUser } from '../../../test/factories/user'; describe('graphQL getCurrentUser query', () => { let role, currentUser, token, requestObject; 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.getTime().toString(), email: currentUser.email, fullName: currentUser.fullName, id: currentUser.id, role: { id: role.id, name: role.name }, updatedAt: currentUser.updatedAt.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".' ); }); });