use-active-editor-theme.spec.tsx 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import { useActiveEditorTheme } from '@/shared/hooks/use-active-editor-theme'
  2. import { EditorProviders } from '../../helpers/editor-providers'
  3. import { SplitTestProvider } from '@/shared/context/split-test-context'
  4. const MOCK_IEEE_BRAND_ID = 123
  5. const TestComponent = ({ overallTheme }: { overallTheme: string }) => {
  6. return (
  7. <SplitTestProvider>
  8. <EditorProviders
  9. userSettings={{
  10. overallTheme,
  11. editorTheme: 'default-theme',
  12. editorLightTheme: 'light-theme',
  13. editorDarkTheme: 'dark-theme',
  14. }}
  15. >
  16. <TestComponentInner />
  17. </EditorProviders>
  18. </SplitTestProvider>
  19. )
  20. }
  21. const TestComponentInner = () => {
  22. const editorTheme = useActiveEditorTheme()
  23. return <div data-testid="editor-theme">{editorTheme}</div>
  24. }
  25. describe('useActiveEditorTheme', function () {
  26. describe('when overall theme is specific mode', function () {
  27. it('Uses editorTheme when in dark mode', function () {
  28. cy.mount(<TestComponent overallTheme="" />)
  29. cy.findByTestId('editor-theme').should('have.text', 'default-theme')
  30. })
  31. it('Uses editorTheme when in light mode', function () {
  32. cy.mount(<TestComponent overallTheme="light-" />)
  33. cy.findByTestId('editor-theme').should('have.text', 'default-theme')
  34. })
  35. })
  36. describe('when overall theme is system', function () {
  37. function stubMediaQuery(prefersDark: boolean, isIEEE = false) {
  38. cy.window().then(win => {
  39. win.metaAttributesCache.set('ol-brandVariation', {
  40. brand_id: isIEEE ? MOCK_IEEE_BRAND_ID : undefined,
  41. })
  42. win.metaAttributesCache.get('ol-ExposedSettings').ieeeBrandId =
  43. MOCK_IEEE_BRAND_ID
  44. cy.stub(win, 'matchMedia')
  45. .withArgs('(prefers-color-scheme: dark)')
  46. .returns({
  47. matches: prefersDark,
  48. addEventListener: () => {},
  49. removeEventListener: () => {},
  50. } as any)
  51. })
  52. }
  53. it('uses editorDarkTheme when in dark mode', function () {
  54. stubMediaQuery(true)
  55. cy.mount(<TestComponent overallTheme="system" />)
  56. cy.findByTestId('editor-theme').should('have.text', 'dark-theme')
  57. })
  58. it('uses editorLightTheme when in light mode', function () {
  59. stubMediaQuery(false)
  60. cy.mount(<TestComponent overallTheme="system" />)
  61. cy.findByTestId('editor-theme').should('have.text', 'light-theme')
  62. })
  63. it('uses editorTheme when in IEEE document', function () {
  64. stubMediaQuery(false, true)
  65. cy.mount(<TestComponent overallTheme="system" />)
  66. cy.findByTestId('editor-theme').should('have.text', 'default-theme')
  67. })
  68. })
  69. })