document-title.client.spec.tsx 1.5 KB

123456789101112131415161718192021222324252627282930313233343536
  1. // @vitest-environment jsdom
  2. import { afterEach, describe, expect, it, vi } from 'vitest'
  3. import { cleanup, render } from '@testing-library/react'
  4. import { DocumentTitle } from '../src/client/DocumentTitle.tsx'
  5. afterEach(() => {
  6. cleanup()
  7. document.title = ''
  8. vi.unstubAllEnvs()
  9. })
  10. describe('DocumentTitle', () => {
  11. it('projects a durable title and restores the product title', () => {
  12. vi.stubEnv('DSH_CLIENT_TITLE', 'DeepSeek Harness')
  13. document.title = 'stale title'
  14. const mounted = render(<DocumentTitle productTitle="DeepSeek Harness" />)
  15. expect(document.title).toBe('DeepSeek Harness')
  16. mounted.rerender(<DocumentTitle title="First title" productTitle="DeepSeek Harness" />)
  17. expect(document.title).toBe('First title — DeepSeek Harness')
  18. mounted.rerender(<DocumentTitle title="Revised title" productTitle="DeepSeek Harness" />)
  19. expect(document.title).toBe('Revised title — DeepSeek Harness')
  20. mounted.rerender(<DocumentTitle productTitle="DeepSeek Harness" />)
  21. expect(document.title).toBe('DeepSeek Harness')
  22. mounted.unmount()
  23. expect(document.title).toBe('DeepSeek Harness')
  24. })
  25. it('uses the generic title when the build provides no title', () => {
  26. vi.stubEnv('DSH_CLIENT_TITLE', '')
  27. delete process.env.DSH_CLIENT_TITLE
  28. const mounted = render(<DocumentTitle title="First title" productTitle="DSH Local Build" />)
  29. expect(document.title).toBe('First title — DSH Local Build')
  30. mounted.unmount()
  31. expect(document.title).toBe('DSH Local Build')
  32. })
  33. })