settings-modal.test.tsx 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. import { screen, 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 SettingsModal from '@/features/ide-redesign/components/settings/settings-modal'
  6. import { Folder } from '@ol-types/folder'
  7. import { ImageName, OverallThemeMeta } from '@ol-types/project-settings'
  8. const selectTab = async (tabName: string) => {
  9. const tab = screen.getByRole('tab', { name: tabName })
  10. expect(tab).to.exist
  11. tab.click()
  12. }
  13. const assertSettingIsVisible = (settingName: string) => {
  14. expect(screen.getByLabelText(settingName)).to.exist
  15. }
  16. const TAB_SETTINGS = {
  17. Editor: [
  18. 'Auto-complete',
  19. 'Auto-close brackets',
  20. 'Code check',
  21. 'Keybindings',
  22. 'PDF Viewer',
  23. 'Reference search',
  24. 'Spellcheck language',
  25. 'Dictionary',
  26. 'Breadcrumbs',
  27. 'Equation preview',
  28. ],
  29. Compiler: [
  30. 'Main document',
  31. 'Compiler',
  32. 'TeX Live version',
  33. 'Compile mode',
  34. 'Stop on first error',
  35. 'Autocompile',
  36. ],
  37. Appearance: [
  38. 'Overall theme',
  39. 'Editor theme',
  40. 'Editor font size',
  41. 'Editor font family',
  42. 'Editor line height',
  43. ],
  44. }
  45. describe('<SettingsModal />', function () {
  46. const overallThemes: OverallThemeMeta[] = [
  47. {
  48. name: 'Overall Theme 1',
  49. val: '',
  50. path: 'https://overleaf.com/overalltheme-1.css',
  51. },
  52. {
  53. name: 'Overall Theme 2',
  54. val: 'light-',
  55. path: 'https://overleaf.com/overalltheme-2.css',
  56. },
  57. ]
  58. const editorThemes = [
  59. { name: 'editortheme-1', dark: false },
  60. { name: 'editortheme-2', dark: false },
  61. { name: 'editortheme-3', dark: false },
  62. ]
  63. const legacyEditorThemes = [
  64. { name: 'legacytheme-1', dark: false },
  65. { name: 'legacytheme-2', dark: false },
  66. { name: 'legacytheme-3', dark: false },
  67. ]
  68. const imageNames: ImageName[] = [
  69. {
  70. imageDesc: 'Image 1',
  71. imageName: 'img-1',
  72. allowed: true,
  73. },
  74. {
  75. imageDesc: 'Image 2',
  76. imageName: 'img-2',
  77. allowed: true,
  78. },
  79. ]
  80. const rootFolder: Folder = {
  81. _id: 'root-folder-id',
  82. name: 'rootFolder',
  83. docs: [
  84. {
  85. _id: '123abc',
  86. name: 'main.tex',
  87. },
  88. ],
  89. fileRefs: [],
  90. folders: [],
  91. }
  92. let originalSettings: typeof window.metaAttributesCache
  93. beforeEach(function () {
  94. originalSettings = window.metaAttributesCache.get('ol-ExposedSettings')
  95. window.metaAttributesCache.set('ol-ExposedSettings', {
  96. validRootDocExtensions: ['tex'],
  97. ieeeBrandId: 1234,
  98. })
  99. window.metaAttributesCache.set('ol-imageNames', imageNames)
  100. window.metaAttributesCache.set('ol-overallThemes', overallThemes)
  101. window.metaAttributesCache.set('ol-editorThemes', editorThemes)
  102. window.metaAttributesCache.set('ol-legacyEditorThemes', legacyEditorThemes)
  103. })
  104. afterEach(function () {
  105. fetchMock.removeRoutes().clearHistory()
  106. window.metaAttributesCache.set('ol-ExposedSettings', originalSettings)
  107. })
  108. it('Shows all settings options', async function () {
  109. render(
  110. <EditorProviders
  111. rootFolder={[rootFolder as any]}
  112. layoutContext={{ leftMenuShown: true }}
  113. >
  114. <SettingsModal />
  115. </EditorProviders>
  116. )
  117. Object.entries(TAB_SETTINGS).forEach(([tabName, settings]) => {
  118. selectTab(tabName)
  119. settings.forEach(setting => assertSettingIsVisible(setting))
  120. })
  121. })
  122. })