Files
Verso/services/web/test/unit/src/Chat/ChatManager.test.mjs
T
Antoine Clausse 46715191e3 Merge pull request #28544 from overleaf/ac-some-web-esm-migration-4
[web] Convert some Features files to ES modules (part 4)

GitOrigin-RevId: cf11a7584e39c4d4de08e2f924240e488a4066c4
2025-09-24 08:05:58 +00:00

130 lines
3.2 KiB
JavaScript

import { vi, expect } from 'vitest'
import sinon from 'sinon'
const modulePath = '../../../../app/src/Features/Chat/ChatManager.mjs'
describe('ChatManager', function () {
beforeEach(async function (ctx) {
ctx.user_id = 'mock-user-id'
vi.doMock('../../../../app/src/Features/User/UserGetter', () => ({
default: (ctx.UserGetter = { promises: {} }),
}))
vi.doMock('../../../../app/src/Features/User/UserInfoController', () => ({
default: (ctx.UserInfoController = {}),
}))
ctx.ChatManager = (await import(modulePath)).default
ctx.req = {
params: {
project_id: ctx.project_id,
},
}
ctx.res = {
json: sinon.stub(),
send: sinon.stub(),
sendStatus: sinon.stub(),
}
})
describe('injectUserInfoIntoThreads', function () {
beforeEach(function (ctx) {
ctx.users = {
user_id_1: {
_id: 'user_id_1',
},
user_id_2: {
_id: 'user_id_2',
},
}
ctx.UserGetter.promises.getUsers = userIds =>
Promise.resolve(
Array.from(userIds)
.map(id => ctx.users[id])
.filter(u => !!u)
)
sinon.spy(ctx.UserGetter.promises, 'getUsers')
ctx.UserInfoController.formatPersonalInfo = user => ({
formatted: { id: user._id.toString() },
})
})
it('should inject a user object into messaged and resolved data', async function (ctx) {
const threads = await ctx.ChatManager.promises.injectUserInfoIntoThreads({
thread1: {
resolved: true,
resolved_by_user_id: 'user_id_1',
messages: [
{
user_id: 'user_id_1',
content: 'foo',
},
{
user_id: 'user_id_2',
content: 'bar',
},
],
},
thread2: {
messages: [
{
user_id: 'user_id_1',
content: 'baz',
},
],
},
})
expect(threads).to.deep.equal({
thread1: {
resolved: true,
resolved_by_user_id: 'user_id_1',
resolved_by_user: { formatted: { id: 'user_id_1' } },
messages: [
{
user_id: 'user_id_1',
user: { formatted: { id: 'user_id_1' } },
content: 'foo',
},
{
user_id: 'user_id_2',
user: { formatted: { id: 'user_id_2' } },
content: 'bar',
},
],
},
thread2: {
messages: [
{
user_id: 'user_id_1',
user: { formatted: { id: 'user_id_1' } },
content: 'baz',
},
],
},
})
})
it('should lookup all users in a single batch', async function (ctx) {
await ctx.ChatManager.promises.injectUserInfoIntoThreads([
{
messages: [
{
user_id: 'user_id_1',
content: 'foo',
},
{
user_id: 'user_id_1',
content: 'bar',
},
],
},
])
ctx.UserGetter.promises.getUsers.should.have.been.calledOnce
})
})
})