message-list.test.js 2.5 KB

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