mirror of
https://github.com/langgenius/dify.git
synced 2026-05-13 08:57:28 +08:00
Follow-up to SSR prefetch migration. Eliminates the Zustand middleman that was syncing TanStack Query data into a separate store. - Remove useGlobalPublicStore Zustand store entirely - Create hooks/use-global-public.ts with useSystemFeatures, useSystemFeaturesQuery, useIsSystemFeaturesPending, useSetupStatusQuery - Migrate all consumers to import from @/hooks/use-global-public - Simplify global-public-context.tsx to a thin provider component - Update test files to mock the new hook interface - Fix SetupStatusResponse.setup_at type from Date to string (JSON) - Fix setup-status.spec.ts mock target to match consoleClient - Regenerate eslint-suppressions.json for main branch BREAKING CHANGE: useGlobalPublicStore is removed. Use useSystemFeatures() from @/hooks/use-global-public instead.
103 lines
3.5 KiB
TypeScript
103 lines
3.5 KiB
TypeScript
import { renderHook } from '@testing-library/react'
|
|
import { useIsSystemFeaturesPending, useSystemFeatures } from '@/hooks/use-global-public'
|
|
/**
|
|
* Test suite for useDocumentTitle hook
|
|
*
|
|
* This hook manages the browser document title with support for:
|
|
* - Custom branding (when enabled in system features)
|
|
* - Default "Dify" branding
|
|
* - Pending state handling (prevents title flicker during loading)
|
|
* - Page-specific titles with automatic suffix
|
|
*
|
|
* Title format: "[Page Title] - [Brand Name]"
|
|
* If no page title: "[Brand Name]"
|
|
*/
|
|
import { defaultSystemFeatures } from '@/types/feature'
|
|
import useDocumentTitle from './use-document-title'
|
|
|
|
vi.mock('@/context/global-public-context', () => ({
|
|
useSystemFeatures: vi.fn(() => ({ ...defaultSystemFeatures })),
|
|
useIsSystemFeaturesPending: vi.fn(() => false),
|
|
}))
|
|
|
|
/**
|
|
* Test behavior when system features are still loading
|
|
* Title should remain empty to prevent flicker
|
|
*/
|
|
describe('title should be empty if systemFeatures is pending', () => {
|
|
beforeEach(() => {
|
|
vi.mocked(useIsSystemFeaturesPending).mockReturnValue(true)
|
|
vi.mocked(useSystemFeatures).mockReturnValue({ ...defaultSystemFeatures, branding: { ...defaultSystemFeatures.branding, enabled: false } })
|
|
})
|
|
/**
|
|
* Test that title stays empty during loading even when a title is provided
|
|
*/
|
|
it('document title should be empty if set title', () => {
|
|
renderHook(() => useDocumentTitle('test'))
|
|
expect(document.title).toBe('')
|
|
})
|
|
/**
|
|
* Test that title stays empty during loading when no title is provided
|
|
*/
|
|
it('document title should be empty if not set title', () => {
|
|
renderHook(() => useDocumentTitle(''))
|
|
expect(document.title).toBe('')
|
|
})
|
|
})
|
|
|
|
/**
|
|
* Test default Dify branding behavior
|
|
* When custom branding is disabled, should use "Dify" as the brand name
|
|
*/
|
|
describe('use default branding', () => {
|
|
beforeEach(() => {
|
|
vi.mocked(useIsSystemFeaturesPending).mockReturnValue(false)
|
|
vi.mocked(useSystemFeatures).mockReturnValue({ ...defaultSystemFeatures, branding: { ...defaultSystemFeatures.branding, enabled: false } })
|
|
})
|
|
/**
|
|
* Test title format with page title and default branding
|
|
* Format: "[page] - Dify"
|
|
*/
|
|
it('document title should be test-Dify if set title', () => {
|
|
renderHook(() => useDocumentTitle('test'))
|
|
expect(document.title).toBe('test - Dify')
|
|
})
|
|
|
|
/**
|
|
* Test title with only default branding (no page title)
|
|
* Format: "Dify"
|
|
*/
|
|
it('document title should be Dify if not set title', () => {
|
|
renderHook(() => useDocumentTitle(''))
|
|
expect(document.title).toBe('Dify')
|
|
})
|
|
})
|
|
|
|
/**
|
|
* Test custom branding behavior
|
|
* When custom branding is enabled, should use the configured application_title
|
|
*/
|
|
describe('use specific branding', () => {
|
|
beforeEach(() => {
|
|
vi.mocked(useIsSystemFeaturesPending).mockReturnValue(false)
|
|
vi.mocked(useSystemFeatures).mockReturnValue({ ...defaultSystemFeatures, branding: { ...defaultSystemFeatures.branding, enabled: true, application_title: 'Test' } })
|
|
})
|
|
/**
|
|
* Test title format with page title and custom branding
|
|
* Format: "[page] - [Custom Brand]"
|
|
*/
|
|
it('document title should be test-Test if set title', () => {
|
|
renderHook(() => useDocumentTitle('test'))
|
|
expect(document.title).toBe('test - Test')
|
|
})
|
|
|
|
/**
|
|
* Test title with only custom branding (no page title)
|
|
* Format: "[Custom Brand]"
|
|
*/
|
|
it('document title should be Test if not set title', () => {
|
|
renderHook(() => useDocumentTitle(''))
|
|
expect(document.title).toBe('Test')
|
|
})
|
|
})
|