image-name-setting.test.tsx 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import { screen, within, render } from '@testing-library/react'
  2. import { expect } from 'chai'
  3. import fetchMock from 'fetch-mock'
  4. import type { ImageName } from '../../../../../types/project-settings'
  5. import { SettingsModalProvider } from '@/features/ide-redesign/contexts/settings-modal-context'
  6. import {
  7. EditorProviders,
  8. projectDefaults,
  9. } from '../../../helpers/editor-providers'
  10. import ImageNameSetting from '@/features/settings/components/compiler-settings/image-name-setting'
  11. import userEvent from '@testing-library/user-event'
  12. describe('<ImageNameSetting />', function () {
  13. const imageNames: ImageName[] = [
  14. {
  15. imageDesc: 'Image 1',
  16. imageName: 'img-1',
  17. allowed: true,
  18. },
  19. {
  20. imageDesc: 'Image 2',
  21. imageName: 'img-2',
  22. allowed: true,
  23. },
  24. ]
  25. beforeEach(function () {
  26. window.metaAttributesCache.set('ol-imageNames', imageNames)
  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. <ImageNameSetting />
  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('TeX Live version')
  47. for (const { imageName, imageDesc } of imageNames) {
  48. const option = within(select).getByText(imageDesc)
  49. expect(option.getAttribute('value')).to.equal(imageName)
  50. await userEvent.selectOptions(select, [option])
  51. expect(
  52. saveSettingsMock.callHistory.called(
  53. `/project/${projectDefaults._id}/settings`,
  54. {
  55. body: { imageName },
  56. }
  57. )
  58. ).to.be.true
  59. }
  60. })
  61. })