ChatManager.test.mjs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. import { vi, expect } from 'vitest'
  2. import sinon from 'sinon'
  3. const modulePath = '../../../../app/src/Features/Chat/ChatManager.mjs'
  4. describe('ChatManager', function () {
  5. beforeEach(async function (ctx) {
  6. ctx.user_id = 'mock-user-id'
  7. vi.doMock('../../../../app/src/Features/User/UserGetter', () => ({
  8. default: (ctx.UserGetter = { promises: {} }),
  9. }))
  10. vi.doMock('../../../../app/src/Features/User/UserInfoController', () => ({
  11. default: (ctx.UserInfoController = {}),
  12. }))
  13. ctx.ChatManager = (await import(modulePath)).default
  14. ctx.req = {
  15. params: {
  16. project_id: ctx.project_id,
  17. },
  18. }
  19. ctx.res = {
  20. json: sinon.stub(),
  21. send: sinon.stub(),
  22. sendStatus: sinon.stub(),
  23. }
  24. })
  25. describe('injectUserInfoIntoThreads', function () {
  26. beforeEach(function (ctx) {
  27. ctx.users = {
  28. user_id_1: {
  29. _id: 'user_id_1',
  30. },
  31. user_id_2: {
  32. _id: 'user_id_2',
  33. },
  34. }
  35. ctx.UserGetter.promises.getUsers = userIds =>
  36. Promise.resolve(
  37. Array.from(userIds)
  38. .map(id => ctx.users[id])
  39. .filter(u => !!u)
  40. )
  41. sinon.spy(ctx.UserGetter.promises, 'getUsers')
  42. ctx.UserInfoController.formatPersonalInfo = user => ({
  43. formatted: { id: user._id.toString() },
  44. })
  45. })
  46. it('should inject a user object into messaged and resolved data', async function (ctx) {
  47. const threads = await ctx.ChatManager.promises.injectUserInfoIntoThreads({
  48. thread1: {
  49. resolved: true,
  50. resolved_by_user_id: 'user_id_1',
  51. messages: [
  52. {
  53. user_id: 'user_id_1',
  54. content: 'foo',
  55. },
  56. {
  57. user_id: 'user_id_2',
  58. content: 'bar',
  59. },
  60. ],
  61. },
  62. thread2: {
  63. messages: [
  64. {
  65. user_id: 'user_id_1',
  66. content: 'baz',
  67. },
  68. ],
  69. },
  70. })
  71. expect(threads).to.deep.equal({
  72. thread1: {
  73. resolved: true,
  74. resolved_by_user_id: 'user_id_1',
  75. resolved_by_user: { formatted: { id: 'user_id_1' } },
  76. messages: [
  77. {
  78. user_id: 'user_id_1',
  79. user: { formatted: { id: 'user_id_1' } },
  80. content: 'foo',
  81. },
  82. {
  83. user_id: 'user_id_2',
  84. user: { formatted: { id: 'user_id_2' } },
  85. content: 'bar',
  86. },
  87. ],
  88. },
  89. thread2: {
  90. messages: [
  91. {
  92. user_id: 'user_id_1',
  93. user: { formatted: { id: 'user_id_1' } },
  94. content: 'baz',
  95. },
  96. ],
  97. },
  98. })
  99. })
  100. it('should lookup all users in a single batch', async function (ctx) {
  101. await ctx.ChatManager.promises.injectUserInfoIntoThreads([
  102. {
  103. messages: [
  104. {
  105. user_id: 'user_id_1',
  106. content: 'foo',
  107. },
  108. {
  109. user_id: 'user_id_1',
  110. content: 'bar',
  111. },
  112. ],
  113. },
  114. ])
  115. ctx.UserGetter.promises.getUsers.should.have.been.calledOnce
  116. })
  117. })
  118. })