Files
iofficeai--aionui/tests/unit/renderer/messageThinking.dom.test.tsx
2026-07-13 13:20:22 +08:00

59 lines
1.6 KiB
TypeScript

/**
* @license
* Copyright 2025 AionUi (aionui.com)
* SPDX-License-Identifier: Apache-2.0
*/
import React from 'react';
import { render, screen } from '@testing-library/react';
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
import type { IMessageThinking } from '@/common/chat/chatLib';
import MessageThinking from '@/renderer/pages/conversation/Messages/components/MessageThinking';
vi.mock('react-i18next', () => ({
useTranslation: () => ({
t: (_key: string, options?: { defaultValue?: string }) => options?.defaultValue ?? _key,
}),
}));
function createThinkingMessage(createdAt: number): IMessageThinking {
return {
id: 'thinking-1',
type: 'thinking',
msg_id: 'msg-1',
conversation_id: 'conversation-1',
position: 'left',
created_at: createdAt,
content: {
content: 'analyzing',
status: 'thinking',
},
};
}
describe('MessageThinking', () => {
beforeEach(() => {
vi.useFakeTimers();
});
afterEach(() => {
vi.useRealTimers();
});
it('preserves elapsed time when the component remounts for an active thinking message', () => {
vi.setSystemTime(new Date('2026-05-26T09:00:10.000Z'));
const createdAt = Date.now() - 5_000;
const { unmount } = render(<MessageThinking message={createThinkingMessage(createdAt)} />);
expect(screen.getByText('Thinking... · 5s')).toBeInTheDocument();
unmount();
vi.setSystemTime(new Date('2026-05-26T09:00:12.000Z'));
render(<MessageThinking message={createThinkingMessage(createdAt)} />);
expect(screen.getByText('Thinking... · 7s')).toBeInTheDocument();
});
});