use-active-overall-theme.spec.tsx 2.5 KB

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