message-input.test.tsx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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: () => void
  7. let sendMessage: (content: string) => void
  8. beforeEach(function () {
  9. resetUnreadMessages = sinon.stub()
  10. sendMessage = sinon.stub()
  11. })
  12. it('renders successfully', function () {
  13. render(
  14. <MessageInput
  15. sendMessage={sendMessage}
  16. resetUnreadMessages={resetUnreadMessages}
  17. />
  18. )
  19. screen.getByLabelText('Send a message to your collaborators')
  20. })
  21. it('sends a message after typing and hitting enter', function () {
  22. render(
  23. <MessageInput
  24. sendMessage={sendMessage}
  25. resetUnreadMessages={resetUnreadMessages}
  26. />
  27. )
  28. const input = screen.getByRole('textbox')
  29. fireEvent.change(input, { target: { value: 'hello world' } })
  30. fireEvent.keyDown(input, { key: 'Enter' })
  31. expect(sendMessage).to.be.calledOnce
  32. expect(sendMessage).to.be.calledWith('hello world')
  33. })
  34. it('resets the number of unread messages after clicking on the input', function () {
  35. render(
  36. <MessageInput
  37. sendMessage={sendMessage}
  38. resetUnreadMessages={resetUnreadMessages}
  39. />
  40. )
  41. const input = screen.getByPlaceholderText(
  42. 'Send a message to your collaborators…'
  43. )
  44. fireEvent.click(input)
  45. expect(resetUnreadMessages).to.be.calledOnce
  46. })
  47. })