Merge branch 'master' into 6439-fix-terms-and-condition+data-privacy-links-on-registration

This commit is contained in:
Wolfgang Huß 2023-06-21 14:09:32 +02:00 committed by GitHub
commit acbaf301bb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 115 additions and 29 deletions

View File

@ -21,11 +21,13 @@ export const messageQuery = () => {
return gql`
query($roomId: ID!) {
Message(roomId: $roomId) {
_id
id
content
author {
id
}
senderId
username
avatar
date
}
}
`

View File

@ -9,6 +9,7 @@ export const createRoomMutation = () => {
userId: $userId
) {
id
roomId
}
}
`
@ -19,8 +20,15 @@ export const roomQuery = () => {
query {
Room {
id
roomId
roomName
users {
_id
id
name
avatar {
url
}
}
}
}

View File

@ -184,20 +184,23 @@ describe('Message', () => {
describe('room exists with authenticated user chatting', () => {
it('returns the messages', async () => {
await expect(query({
const result = await query({
query: messageQuery(),
variables: {
roomId,
},
})).resolves.toMatchObject({
})
expect(result).toMatchObject({
errors: undefined,
data: {
Message: [{
id: expect.any(String),
_id: result.data.Message[0].id,
content: 'Some nice message to other chatting user',
author: {
id: 'chatting-user',
},
senderId: 'chatting-user',
username: 'Chatting User',
avatar: expect.any(String),
date: expect.any(String),
}],
},
})
@ -209,9 +212,17 @@ describe('Message', () => {
mutation: createMessageMutation(),
variables: {
roomId,
content: 'Another nice message to other chatting user',
content: 'A nice response message to chatting user',
}
})
authenticatedUser = await chattingUser.toJson()
await mutate({
mutation: createMessageMutation(),
variables: {
roomId,
content: 'And another nice message to other chatting user',
}
})
})
it('returns the messages', async () => {
@ -227,22 +238,32 @@ describe('Message', () => {
{
id: expect.any(String),
content: 'Some nice message to other chatting user',
author: {
id: 'chatting-user',
},
senderId: 'chatting-user',
username: 'Chatting User',
avatar: expect.any(String),
date: expect.any(String),
},
{
id: expect.any(String),
content: 'Another nice message to other chatting user',
author: {
id: 'other-chatting-user',
},
}
content: 'A nice response message to chatting user',
senderId: 'other-chatting-user',
username: 'Other Chatting User',
avatar: expect.any(String),
date: expect.any(String),
},
{
id: expect.any(String),
content: 'And another nice message to other chatting user',
senderId: 'chatting-user',
username: 'Chatting User',
avatar: expect.any(String),
date: expect.any(String),
},
],
},
})
})
})
})
})
describe('room exists, authenticated user not in room', () => {

View File

@ -13,7 +13,13 @@ export default {
id: context.user.id,
},
}
return neo4jgraphql(object, params, context, resolveInfo)
const resolved = await neo4jgraphql(object, params, context, resolveInfo)
if (resolved) {
resolved.forEach((message) => {
message._id = message.id
})
}
return resolved
},
},
Mutation: {
@ -24,11 +30,11 @@ export default {
const writeTxResultPromise = session.writeTransaction(async (transaction) => {
const createMessageCypher = `
MATCH (currentUser:User { id: $currentUserId })-[:CHATS_IN]->(room:Room { id: $roomId })
MERGE (currentUser)-[:CREATED]->(message:Message)-[:INSIDE]->(room)
ON CREATE SET
message.createdAt = toString(datetime()),
message.id = apoc.create.uuid(),
message.content = $content
CREATE (currentUser)-[:CREATED]->(message:Message {
createdAt: toString(datetime()),
id: apoc.create.uuid(),
content: $content
})-[:INSIDE]->(room)
RETURN message { .* }
`
const createMessageTxResponse = await transaction.run(

View File

@ -102,11 +102,12 @@ describe('Room', () => {
},
})
roomId = result.data.CreateRoom.id
await expect(result).toMatchObject({
expect(result).toMatchObject({
errors: undefined,
data: {
CreateRoom: {
id: expect.any(String),
roomId: result.data.CreateRoom.id,
},
},
})
@ -153,18 +154,31 @@ describe('Room', () => {
})
it('returns the room', async () => {
await expect(query({ query: roomQuery() })).resolves.toMatchObject({
const result = await query({ query: roomQuery() })
expect(result).toMatchObject({
errors: undefined,
data: {
Room: [
{
id: expect.any(String),
roomId: result.data.Room[0].id,
roomName: 'Other Chatting User',
users: expect.arrayContaining([
{
_id: 'chatting-user',
id: 'chatting-user',
name: 'Chatting User',
avatar: {
url: expect.any(String),
},
},
{
_id: 'other-chatting-user',
id: 'other-chatting-user',
name: 'Other Chatting User',
avatar: {
url: expect.any(String),
},
},
]),
},
@ -180,18 +194,31 @@ describe('Room', () => {
})
it('returns the room', async () => {
await expect(query({ query: roomQuery() })).resolves.toMatchObject({
const result = await query({ query: roomQuery() })
expect(result).toMatchObject({
errors: undefined,
data: {
Room: [
{
id: expect.any(String),
roomId: result.data.Room[0].id,
roomName: 'Chatting User',
users: expect.arrayContaining([
{
_id: 'chatting-user',
id: 'chatting-user',
name: 'Chatting User',
avatar: {
url: expect.any(String),
},
},
{
_id: 'other-chatting-user',
id: 'other-chatting-user',
name: 'Other Chatting User',
avatar: {
url: expect.any(String),
},
},
]),
},

View File

@ -8,7 +8,18 @@ export default {
params.filter.users_some = {
id: context.user.id,
}
return neo4jgraphql(object, params, context, resolveInfo)
const resolved = await neo4jgraphql(object, params, context, resolveInfo)
if (resolved) {
resolved.forEach((room) => {
if (room.users) {
room.roomName = room.users.filter((user) => user.id !== context.user.id)[0].name
room.users.forEach((user) => {
user._id = user.id
})
}
})
}
return resolved
},
},
Mutation: {
@ -37,6 +48,9 @@ export default {
})
try {
const room = await writeTxResultPromise
if (room) {
room.roomId = room.id
}
return room
} catch (error) {
throw new Error(error)

View File

@ -11,6 +11,11 @@ type Message {
author: User! @relation(name: "CREATED", direction: "IN")
room: Room! @relation(name: "INSIDE", direction: "OUT")
senderId: String! @cypher(statement: "MATCH (this)<-[:CREATED]-(user:User) RETURN user.id")
username: String! @cypher(statement: "MATCH (this)<-[:CREATED]-(user:User) RETURN user.name")
avatar: String @cypher(statement: "MATCH (this)<-[:CREATED]-(:User)-[:AVATAR_IMAGE]->(image:Image) RETURN image.url")
date: String! @cypher(statement: "RETURN this.createdAt")
}
type Mutation {

View File

@ -10,7 +10,10 @@ type Room {
createdAt: String
updatedAt: String
users: [User]! @relation(name: "CHATS_IN", direction: "IN")
users: [User]! @relation(name: "CHATS_IN", direction: "IN")
roomId: String! @cypher(statement: "RETURN this.id")
roomName: String! ## @cypher(statement: "MATCH (this)<-[:CHATS_IN]-(user:User) WHERE NOT user.id = $cypherParams.currentUserId RETURN user[0].name")
}
type Mutation {