dictionary-modal-content.test.jsx 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import {
  2. screen,
  3. fireEvent,
  4. waitForElementToBeRemoved,
  5. } from '@testing-library/react'
  6. import fetchMock from 'fetch-mock'
  7. import DictionaryModal from '../../../../../frontend/js/features/dictionary/components/dictionary-modal'
  8. import { renderWithEditorContext } from '../../../helpers/render-with-context'
  9. function setLearnedWords(words) {
  10. window.metaAttributesCache.set('ol-learnedWords', words)
  11. window.dispatchEvent(new CustomEvent('learnedWords:doreset'))
  12. }
  13. describe('<DictionaryModalContent />', function () {
  14. afterEach(function () {
  15. fetchMock.reset()
  16. setLearnedWords([])
  17. })
  18. it('list words', async function () {
  19. setLearnedWords(['foo', 'bar'])
  20. renderWithEditorContext(<DictionaryModal show handleHide={() => {}} />)
  21. screen.getByText('foo')
  22. screen.getByText('bar')
  23. })
  24. it('shows message when empty', async function () {
  25. setLearnedWords([])
  26. renderWithEditorContext(<DictionaryModal show handleHide={() => {}} />)
  27. screen.getByText('Your custom dictionary is empty.')
  28. })
  29. it('removes words', async function () {
  30. fetchMock.post('/spelling/unlearn', 200)
  31. setLearnedWords(['Foo', 'bar'])
  32. renderWithEditorContext(<DictionaryModal show handleHide={() => {}} />)
  33. screen.getByText('Foo')
  34. screen.getByText('bar')
  35. const [firstButton] = screen.getAllByRole('button', {
  36. name: 'Remove from dictionary',
  37. })
  38. fireEvent.click(firstButton)
  39. await waitForElementToBeRemoved(() => screen.getByText('bar'))
  40. screen.getByText('Foo')
  41. })
  42. it('handles errors', async function () {
  43. fetchMock.post('/spelling/unlearn', 500)
  44. setLearnedWords(['foo'])
  45. renderWithEditorContext(<DictionaryModal show handleHide={() => {}} />)
  46. screen.getByText('foo')
  47. const [firstButton] = screen.getAllByRole('button', {
  48. name: 'Remove from dictionary',
  49. })
  50. fireEvent.click(firstButton)
  51. await fetchMock.flush()
  52. screen.getByText('Sorry, something went wrong')
  53. screen.getByText('foo')
  54. })
  55. })