Files
hapi/web/src/components/OfflineBanner.test.tsx
T
Aqi77suandGitHub d53e25700d fix(web): prefer live Hub connectivity over navigator status (#1051)
* fix(web): trust live hub connectivity over navigator status

* fix(web): align offline and reconnecting banner precedence

* test(web): provide i18n context to banner tests
2026-07-27 17:02:37 +08:00

41 lines
1.4 KiB
TypeScript

import { render, screen } from '@testing-library/react'
import { beforeEach, describe, expect, it, vi } from 'vitest'
import { I18nProvider } from '@/lib/i18n-context'
import { OfflineBanner } from './OfflineBanner'
const useOnlineStatusMock = vi.fn(() => true)
vi.mock('@/hooks/useOnlineStatus', () => ({
useOnlineStatus: () => useOnlineStatusMock()
}))
describe('OfflineBanner', () => {
beforeEach(() => {
useOnlineStatusMock.mockReturnValue(true)
})
it('shows when the browser and hub are offline', () => {
useOnlineStatusMock.mockReturnValue(false)
render(<I18nProvider><OfflineBanner isHubConnected={false} isReconnecting={false} /></I18nProvider>)
expect(screen.getByText(/currently offline/i)).toBeInTheDocument()
})
it('ignores navigator.onLine when the hub is connected', () => {
useOnlineStatusMock.mockReturnValue(false)
render(<I18nProvider><OfflineBanner isHubConnected={true} isReconnecting={false} /></I18nProvider>)
expect(screen.queryByText(/currently offline/i)).toBeNull()
})
it('defers to the reconnecting banner during an SSE outage', () => {
useOnlineStatusMock.mockReturnValue(false)
render(<I18nProvider><OfflineBanner isHubConnected={false} isReconnecting={true} /></I18nProvider>)
expect(screen.queryByText(/currently offline/i)).toBeNull()
})
})