message-list.test.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import sinon from 'sinon'
  2. import { expect } from 'chai'
  3. import { screen, render, fireEvent } from '@testing-library/react'
  4. import MessageList from '../../../../../frontend/js/features/chat/components/message-list'
  5. import { stubMathJax, tearDownMathJaxStubs } from './stubs'
  6. describe('<MessageList />', function () {
  7. const currentUser = {
  8. id: 'fake_user',
  9. first_name: 'fake_user_first_name',
  10. email: 'fake@example.com',
  11. }
  12. function createMessages() {
  13. return [
  14. {
  15. id: '1',
  16. contents: ['a message'],
  17. user: currentUser,
  18. timestamp: new Date().getTime(),
  19. },
  20. {
  21. id: '2',
  22. contents: ['another message'],
  23. user: currentUser,
  24. timestamp: new Date().getTime(),
  25. },
  26. ]
  27. }
  28. before(function () {
  29. stubMathJax()
  30. })
  31. after(function () {
  32. tearDownMathJaxStubs()
  33. })
  34. it('renders multiple messages', function () {
  35. render(
  36. <MessageList
  37. userId={currentUser.id}
  38. messages={createMessages()}
  39. resetUnreadMessages={() => {}}
  40. />
  41. )
  42. screen.getByText('a message')
  43. screen.getByText('another message')
  44. })
  45. it('renders a single timestamp for all messages within 5 minutes', function () {
  46. const msgs = createMessages()
  47. msgs[0].timestamp = new Date(2019, 6, 3, 4, 23).getTime()
  48. msgs[1].timestamp = new Date(2019, 6, 3, 4, 27).getTime()
  49. render(
  50. <MessageList
  51. userId={currentUser.id}
  52. messages={msgs}
  53. resetUnreadMessages={() => {}}
  54. />
  55. )
  56. screen.getByText('4:23 am Wed, 3rd Jul 19')
  57. expect(screen.queryByText('4:27 am Wed, 3rd Jul 19')).to.not.exist
  58. })
  59. it('renders a timestamp for each messages separated for more than 5 minutes', function () {
  60. const msgs = createMessages()
  61. msgs[0].timestamp = new Date(2019, 6, 3, 4, 23).getTime()
  62. msgs[1].timestamp = new Date(2019, 6, 3, 4, 31).getTime()
  63. render(
  64. <MessageList
  65. userId={currentUser.id}
  66. messages={msgs}
  67. resetUnreadMessages={() => {}}
  68. />
  69. )
  70. screen.getByText('4:23 am Wed, 3rd Jul 19')
  71. screen.getByText('4:31 am Wed, 3rd Jul 19')
  72. })
  73. it('resets the number of unread messages after clicking on the input', function () {
  74. const resetUnreadMessages = sinon.stub()
  75. render(
  76. <MessageList
  77. userId={currentUser.id}
  78. messages={createMessages()}
  79. resetUnreadMessages={resetUnreadMessages}
  80. />
  81. )
  82. fireEvent.click(screen.getByRole('list'))
  83. expect(resetUnreadMessages).to.be.calledOnce
  84. })
  85. })