online-users-widget.test.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import { expect } from 'chai'
  2. import sinon from 'sinon'
  3. import { fireEvent, render, screen } from '@testing-library/react'
  4. import OnlineUsersWidget from '../../../../../frontend/js/features/editor-navigation-toolbar/components/online-users-widget'
  5. describe('<OnlineUsersWidget />', function () {
  6. const defaultProps = {
  7. onlineUsers: [
  8. {
  9. user_id: 'test_user',
  10. name: 'test_user',
  11. },
  12. {
  13. user_id: 'another_test_user',
  14. name: 'another_test_user',
  15. },
  16. ],
  17. goToUser: () => {},
  18. }
  19. describe('with less than 4 users', function () {
  20. it('displays user initials', function () {
  21. render(<OnlineUsersWidget {...defaultProps} />)
  22. screen.getByText('t')
  23. screen.getByText('a')
  24. })
  25. it('displays user name in a tooltip', function () {
  26. render(<OnlineUsersWidget {...defaultProps} />)
  27. const icon = screen.getByText('t')
  28. fireEvent.mouseOver(icon)
  29. screen.getByRole('tooltip', { name: 'test_user' })
  30. })
  31. it('calls "goToUser" when the user initial is clicked', function () {
  32. const props = {
  33. ...defaultProps,
  34. goToUser: sinon.stub(),
  35. }
  36. render(<OnlineUsersWidget {...props} />)
  37. const icon = screen.getByText('t')
  38. fireEvent.click(icon)
  39. expect(props.goToUser).to.be.calledWith({
  40. name: 'test_user',
  41. user_id: 'test_user',
  42. })
  43. })
  44. })
  45. describe('with 4 users and more', function () {
  46. const props = {
  47. ...defaultProps,
  48. onlineUsers: defaultProps.onlineUsers.concat([
  49. {
  50. user_id: 'user_3',
  51. name: 'user_3',
  52. },
  53. {
  54. user_id: 'user_4',
  55. name: 'user_4',
  56. },
  57. ]),
  58. }
  59. it('displays the count of users', function () {
  60. render(<OnlineUsersWidget {...props} />)
  61. screen.getByText('4')
  62. })
  63. it('displays user names on hover', function () {
  64. render(<OnlineUsersWidget {...props} />)
  65. const toggleButton = screen.getByRole('button')
  66. fireEvent.click(toggleButton)
  67. screen.getByText('test_user')
  68. screen.getByText('another_test_user')
  69. screen.getByText('user_3')
  70. screen.getByText('user_4')
  71. })
  72. it('calls "goToUser" when the user name is clicked', function () {
  73. const testProps = {
  74. ...props,
  75. goToUser: sinon.stub(),
  76. }
  77. render(<OnlineUsersWidget {...testProps} />)
  78. const toggleButton = screen.getByRole('button')
  79. fireEvent.click(toggleButton)
  80. const icon = screen.getByText('user_3')
  81. fireEvent.click(icon)
  82. expect(testProps.goToUser).to.be.calledWith({
  83. name: 'user_3',
  84. user_id: 'user_3',
  85. })
  86. })
  87. })
  88. })