message-input.test.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { expect } from 'chai'
  2. import sinon from 'sinon'
  3. import { screen, render, fireEvent } from '@testing-library/react'
  4. import MessageInput from '../../../../../frontend/js/features/chat/components/message-input'
  5. describe('<MessageInput />', function () {
  6. let resetUnreadMessages, sendMessage
  7. beforeEach(function () {
  8. resetUnreadMessages = sinon.stub()
  9. sendMessage = sinon.stub()
  10. })
  11. it('renders successfully', function () {
  12. render(
  13. <MessageInput
  14. sendMessage={sendMessage}
  15. resetUnreadMessages={resetUnreadMessages}
  16. />
  17. )
  18. screen.getByLabelText('Send a message to your collaborators')
  19. })
  20. it('sends a message after typing and hitting enter', function () {
  21. render(
  22. <MessageInput
  23. sendMessage={sendMessage}
  24. resetUnreadMessages={resetUnreadMessages}
  25. />
  26. )
  27. const input = screen.getByRole('textbox')
  28. fireEvent.change(input, { target: { value: 'hello world' } })
  29. fireEvent.keyDown(input, { key: 'Enter' })
  30. expect(sendMessage).to.be.calledOnce
  31. expect(sendMessage).to.be.calledWith('hello world')
  32. })
  33. it('resets the number of unread messages after clicking on the input', function () {
  34. render(
  35. <MessageInput
  36. sendMessage={sendMessage}
  37. resetUnreadMessages={resetUnreadMessages}
  38. />
  39. )
  40. const input = screen.getByPlaceholderText(
  41. 'Send a message to your collaborators…'
  42. )
  43. fireEvent.click(input)
  44. expect(resetUnreadMessages).to.be.calledOnce
  45. })
  46. })