settings-modal.test.tsx 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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 = ['editortheme-1', 'editortheme-2', 'editortheme-3']
  59. const legacyEditorThemes = ['legacytheme-1', 'legacytheme-2', 'legacytheme-3']
  60. const imageNames: ImageName[] = [
  61. {
  62. imageDesc: 'Image 1',
  63. imageName: 'img-1',
  64. allowed: true,
  65. },
  66. {
  67. imageDesc: 'Image 2',
  68. imageName: 'img-2',
  69. allowed: true,
  70. },
  71. ]
  72. const rootFolder: Folder = {
  73. _id: 'root-folder-id',
  74. name: 'rootFolder',
  75. docs: [
  76. {
  77. _id: '123abc',
  78. name: 'main.tex',
  79. },
  80. ],
  81. fileRefs: [],
  82. folders: [],
  83. }
  84. let originalSettings: typeof window.metaAttributesCache
  85. beforeEach(function () {
  86. originalSettings = window.metaAttributesCache.get('ol-ExposedSettings')
  87. window.metaAttributesCache.set('ol-ExposedSettings', {
  88. validRootDocExtensions: ['tex'],
  89. ieeeBrandId: 1234,
  90. })
  91. window.metaAttributesCache.set('ol-imageNames', imageNames)
  92. window.metaAttributesCache.set('ol-overallThemes', overallThemes)
  93. window.metaAttributesCache.set('ol-editorThemes', editorThemes)
  94. window.metaAttributesCache.set('ol-legacyEditorThemes', legacyEditorThemes)
  95. })
  96. afterEach(function () {
  97. fetchMock.removeRoutes().clearHistory()
  98. window.metaAttributesCache.set('ol-ExposedSettings', originalSettings)
  99. })
  100. it('Shows all settings options', async function () {
  101. render(
  102. <EditorProviders
  103. rootFolder={[rootFolder as any]}
  104. layoutContext={{ leftMenuShown: true }}
  105. >
  106. <SettingsModal />
  107. </EditorProviders>
  108. )
  109. Object.entries(TAB_SETTINGS).forEach(([tabName, settings]) => {
  110. selectTab(tabName)
  111. settings.forEach(setting => assertSettingIsVisible(setting))
  112. })
  113. })
  114. })