online-users-widget.test.js 2.7 KB

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