keybinding-setting.test.tsx 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { screen, within, render } from '@testing-library/react'
  2. import { expect } from 'chai'
  3. import fetchMock from 'fetch-mock'
  4. import { EditorProviders } from '../../../helpers/editor-providers'
  5. import { SettingsModalProvider } from '@/features/ide-redesign/contexts/settings-modal-context'
  6. import KeybindingSetting from '@/features/settings/components/editor-settings/keybinding-setting'
  7. import userEvent from '@testing-library/user-event'
  8. const OPTIONS = [
  9. {
  10. label: 'None',
  11. value: 'default',
  12. },
  13. {
  14. label: 'Vim',
  15. value: 'vim',
  16. },
  17. {
  18. label: 'Emacs',
  19. value: 'emacs',
  20. },
  21. ]
  22. describe('<KeybindingSetting />', function () {
  23. afterEach(function () {
  24. fetchMock.removeRoutes().clearHistory()
  25. })
  26. it('each option is shown and can be selected', async function () {
  27. render(
  28. <EditorProviders>
  29. <SettingsModalProvider>
  30. <KeybindingSetting />
  31. </SettingsModalProvider>
  32. </EditorProviders>
  33. )
  34. const saveSettingsMock = fetchMock.post(
  35. 'express:/user/settings',
  36. {
  37. status: 200,
  38. },
  39. { delay: 0 }
  40. )
  41. const select = screen.getByLabelText('Keybindings')
  42. // Reverse order so we test changing to each option
  43. for (const option of OPTIONS.reverse()) {
  44. const optionElement = within(select).getByText(option.label)
  45. expect(optionElement.getAttribute('value')).to.equal(option.value)
  46. await userEvent.selectOptions(select, [optionElement])
  47. expect(
  48. saveSettingsMock.callHistory.called('/user/settings', {
  49. body: { mode: option.value },
  50. })
  51. ).to.be.true
  52. }
  53. })
  54. })