57 lines
1.6 KiB
TypeScript
57 lines
1.6 KiB
TypeScript
import { act, cleanup, render, screen } from '@testing-library/react'
|
|
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
|
|
|
import { __resetElapsedTimerRegistryForTests } from '@/components/chat/activity-timer'
|
|
import { I18nProvider } from '@/i18n'
|
|
import { $activeSessionId, $turnStartedAt } from '@/store/session'
|
|
|
|
import { ResponseLoadingIndicator } from './status'
|
|
|
|
function renderIndicator() {
|
|
return render(
|
|
<I18nProvider configClient={null} initialLocale="en">
|
|
<ResponseLoadingIndicator />
|
|
</I18nProvider>
|
|
)
|
|
}
|
|
|
|
describe('ResponseLoadingIndicator timer', () => {
|
|
beforeEach(() => {
|
|
vi.useFakeTimers()
|
|
vi.setSystemTime(new Date('2026-01-01T00:00:00.000Z'))
|
|
__resetElapsedTimerRegistryForTests()
|
|
})
|
|
|
|
afterEach(() => {
|
|
cleanup()
|
|
$activeSessionId.set(null)
|
|
$turnStartedAt.set(null)
|
|
__resetElapsedTimerRegistryForTests()
|
|
vi.useRealTimers()
|
|
})
|
|
|
|
it('preserves each running session timer while switching between sessions', () => {
|
|
$activeSessionId.set('session-a')
|
|
$turnStartedAt.set(Date.now())
|
|
const sessionA = renderIndicator()
|
|
|
|
act(() => vi.advanceTimersByTime(5_000))
|
|
expect(screen.getByText('5s')).toBeTruthy()
|
|
sessionA.unmount()
|
|
|
|
$activeSessionId.set('session-b')
|
|
$turnStartedAt.set(Date.now())
|
|
const sessionB = renderIndicator()
|
|
|
|
act(() => vi.advanceTimersByTime(3_000))
|
|
expect(screen.getByText('3s')).toBeTruthy()
|
|
sessionB.unmount()
|
|
|
|
$activeSessionId.set('session-a')
|
|
$turnStartedAt.set(new Date('2026-01-01T00:00:00.000Z').getTime())
|
|
renderIndicator()
|
|
|
|
expect(screen.getByText('8s')).toBeTruthy()
|
|
})
|
|
})
|