From d2beca22c939c488c504b5f2fc00a6a28f30efd2 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 14 Jun 2023 17:27:42 +0200 Subject: [PATCH] set up unit tests for messages --- backend/src/graphql/messages.ts | 32 +++++++ backend/src/schema/resolvers/messages.spec.ts | 93 +++++++++++++++++++ .../resolvers/{message.ts => messages.ts} | 2 +- 3 files changed, 126 insertions(+), 1 deletion(-) create mode 100644 backend/src/graphql/messages.ts create mode 100644 backend/src/schema/resolvers/messages.spec.ts rename backend/src/schema/resolvers/{message.ts => messages.ts} (98%) diff --git a/backend/src/graphql/messages.ts b/backend/src/graphql/messages.ts new file mode 100644 index 000000000..59694914a --- /dev/null +++ b/backend/src/graphql/messages.ts @@ -0,0 +1,32 @@ +import gql from 'graphql-tag' + +export const createMessageMutation = () => { + return gql` + mutation ( + $roomId: ID! + $content: String! + ) { + CreateMessage( + roomId: $roomId + content: $content + ) { + id + content + } + } + ` +} + +export const messageQuery = () => { + return gql` + query($roomId: ID!) { + Message(roomId: $roomId) { + id + content + author { + id + } + } + } + ` +} diff --git a/backend/src/schema/resolvers/messages.spec.ts b/backend/src/schema/resolvers/messages.spec.ts new file mode 100644 index 000000000..b1fc0b208 --- /dev/null +++ b/backend/src/schema/resolvers/messages.spec.ts @@ -0,0 +1,93 @@ +import { createTestClient } from 'apollo-server-testing' +import Factory, { cleanDatabase } from '../../db/factories' +import { getNeode, getDriver } from '../../db/neo4j' +import { createRoomMutation } from '../../graphql/rooms' +import { createMessageMutation, messageQuery } from '../../graphql/messages' +import createServer from '../../server' + +const driver = getDriver() +const neode = getNeode() + +let query +let mutate +let authenticatedUser +let chattingUser, otherChattingUser, notChattingUser + +beforeAll(async () => { + await cleanDatabase() + + const { server } = createServer({ + context: () => { + return { + driver, + neode, + user: authenticatedUser, + } + }, + }) + query = createTestClient(server).query + mutate = createTestClient(server).mutate +}) + +afterAll(async () => { + // await cleanDatabase() + driver.close() +}) + + +describe('Message', () => { + beforeAll(async () => { + ;[chattingUser, otherChattingUser, notChattingUser] = await Promise.all([ + Factory.build( + 'user', + { + id: 'chatting-user', + name: 'Chatting User', + }, + ), + Factory.build( + 'user', + { + id: 'other-chatting-user', + name: 'Other Chatting User', + }, + ), + Factory.build( + 'user', + { + id: 'not-chatting-user', + name: 'Not Chatting User', + }, + ), + ]) + }) + + describe('create message', () => { + describe('unauthenticated', () => { + it('throws authorization error', async () => { + await expect(mutate({ mutation: createMessageMutation(), variables: { + roomId: 'some-id', content: 'Some bla bla bla', } })).resolves.toMatchObject({ + errors: [{ message: 'Not Authorized!' }], + }) + }) + }) + + describe('authenticated', () => { + beforeAll(async () => { + authenticatedUser = await chattingUser.toJson() + }) + + describe('room does not exist', () => { + it('returns null', async () => { + await expect(mutate({ mutation: createMessageMutation(), variables: { + roomId: 'some-id', content: 'Some bla bla bla', } })).resolves.toMatchObject({ + errors: undefined, + data: { + CreateMessage: null, + }, + }) + }) + }) + }) + }) +}) diff --git a/backend/src/schema/resolvers/message.ts b/backend/src/schema/resolvers/messages.ts similarity index 98% rename from backend/src/schema/resolvers/message.ts rename to backend/src/schema/resolvers/messages.ts index 3558343d9..44610fb83 100644 --- a/backend/src/schema/resolvers/message.ts +++ b/backend/src/schema/resolvers/messages.ts @@ -24,7 +24,7 @@ export default { MATCH (currentUser:User { id: $currentUserId })-[:CHATS_IN]->(room:Room { id: $roomId }) MERGE (currentUser)-[:CREATED]->(message:Message)-[:INSIDE]->(room) SET message.createdAt = toString(datetime()), - message.id = $messageId + message.id = $messageId, message.content = $content RETURN message { .* } `