overleaf/services/chat/test/acceptance/js/helpers/ChatClient.js
Mathias Jakobsen 304f572f9c Merge pull request #18637 from overleaf/mj-chat-duplicate-threads
[chat] Add endpoint for duplicating comment threads

GitOrigin-RevId: 0b3fb1b836150ccb6d213ab2bba6ce7ff6c69b4a
2024-06-10 08:04:16 +00:00

156 lines
3.3 KiB
JavaScript

import Request from 'request'
const request = Request.defaults({
baseUrl: 'http://127.0.0.1:3010',
})
async function asyncRequest(options) {
return await new Promise((resolve, reject) => {
request(options, (err, response, body) => {
if (err) {
reject(err)
} else {
resolve({ response, body })
}
})
})
}
export async function sendGlobalMessage(projectId, userId, content) {
return await asyncRequest({
method: 'post',
url: `/project/${projectId}/messages`,
json: {
user_id: userId,
content,
},
})
}
export async function getGlobalMessages(projectId) {
return await asyncRequest({
method: 'get',
url: `/project/${projectId}/messages`,
json: true,
})
}
export async function sendMessage(projectId, threadId, userId, content) {
return await asyncRequest({
method: 'post',
url: `/project/${projectId}/thread/${threadId}/messages`,
json: {
user_id: userId,
content,
},
})
}
export async function getThreads(projectId) {
return await asyncRequest({
method: 'get',
url: `/project/${projectId}/threads`,
json: true,
})
}
export async function resolveThread(projectId, threadId, userId) {
return await asyncRequest({
method: 'post',
url: `/project/${projectId}/thread/${threadId}/resolve`,
json: {
user_id: userId,
},
})
}
export async function getResolvedThreadIds(projectId) {
return await asyncRequest({
method: 'get',
url: `/project/${projectId}/resolved-thread-ids`,
json: true,
})
}
export async function editMessage(projectId, threadId, messageId, content) {
return await asyncRequest({
method: 'post',
url: `/project/${projectId}/thread/${threadId}/messages/${messageId}/edit`,
json: {
content,
},
})
}
export async function editMessageWithUser(
projectId,
threadId,
messageId,
userId,
content
) {
return await asyncRequest({
method: 'post',
url: `/project/${projectId}/thread/${threadId}/messages/${messageId}/edit`,
json: {
content,
userId,
},
})
}
export async function checkStatus() {
return await asyncRequest({
method: 'get',
url: `/status`,
json: true,
})
}
export async function getMetric(matcher) {
const { body } = await asyncRequest({
method: 'get',
url: `/metrics`,
})
const found = body.split('\n').find(matcher)
if (!found) return 0
return parseInt(found.split(' ')[1], 0)
}
export async function reopenThread(projectId, threadId) {
return await asyncRequest({
method: 'post',
url: `/project/${projectId}/thread/${threadId}/reopen`,
})
}
export async function deleteThread(projectId, threadId) {
return await asyncRequest({
method: 'delete',
url: `/project/${projectId}/thread/${threadId}`,
})
}
export async function deleteMessage(projectId, threadId, messageId) {
return await asyncRequest({
method: 'delete',
url: `/project/${projectId}/thread/${threadId}/messages/${messageId}`,
})
}
export async function destroyProject(projectId) {
return await asyncRequest({
method: 'delete',
url: `/project/${projectId}`,
})
}
export async function duplicateCommentThreads(projectId, threads) {
return await asyncRequest({
method: 'post',
url: `/project/${projectId}/duplicate-comment-threads`,
json: {
threads,
},
})
}