spell-check-setting.test.tsx 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import { screen, within, render } from '@testing-library/react'
  2. import { expect } from 'chai'
  3. import fetchMock from 'fetch-mock'
  4. import type { SpellCheckLanguage } from '../../../../../types/project-settings'
  5. import {
  6. EditorProviders,
  7. projectDefaults,
  8. } from '../../../helpers/editor-providers'
  9. import { SettingsModalProvider } from '@/features/settings/context/settings-modal-context'
  10. import SpellCheckSetting from '@/features/settings/components/editor-settings/spell-check-setting'
  11. import userEvent from '@testing-library/user-event'
  12. describe('<SpellCheckSetting />', function () {
  13. const languages: SpellCheckLanguage[] = [
  14. {
  15. name: 'Lang 1',
  16. code: 'lang-1',
  17. dic: 'lang_1',
  18. },
  19. {
  20. name: 'Lang 2',
  21. code: 'lang-2',
  22. dic: 'lang_2',
  23. },
  24. ]
  25. beforeEach(function () {
  26. window.metaAttributesCache.set('ol-languages', languages)
  27. })
  28. afterEach(function () {
  29. fetchMock.removeRoutes().clearHistory()
  30. })
  31. it('each option is shown and can be selected', async function () {
  32. render(
  33. <EditorProviders>
  34. <SettingsModalProvider>
  35. <SpellCheckSetting />
  36. </SettingsModalProvider>
  37. </EditorProviders>
  38. )
  39. const saveSettingsMock = fetchMock.post(
  40. `express:/project/:projectId/settings`,
  41. {
  42. status: 200,
  43. },
  44. { delay: 0 }
  45. )
  46. const select = screen.getByLabelText('Spellcheck language')
  47. const optionEmpty = within(select).getByText('Off')
  48. expect(optionEmpty.getAttribute('value')).to.equal('')
  49. await userEvent.selectOptions(select, [optionEmpty])
  50. expect(
  51. saveSettingsMock.callHistory.called(
  52. `/project/${projectDefaults._id}/settings`,
  53. {
  54. body: { spellCheckLanguage: '' },
  55. }
  56. )
  57. ).to.be.true
  58. for (const language of languages) {
  59. const option = within(select).getByText(language.name)
  60. expect(option.getAttribute('value')).to.equal(language.code)
  61. await userEvent.selectOptions(select, [option])
  62. expect(
  63. saveSettingsMock.callHistory.called(
  64. `/project/${projectDefaults._id}/settings`,
  65. {
  66. body: { spellCheckLanguage: language.code },
  67. }
  68. )
  69. ).to.be.true
  70. }
  71. })
  72. })