Show persistent timestamps for operation and teacher messages

This commit is contained in:
鲨鱼辣椒
2026-09-29 18:02:54 +08:00
parent 3a175101c9
commit ead3407890
24 changed files with 355 additions and 9 deletions

View File

@@ -11,6 +11,28 @@ vi.mock('@/lib/coding-attachments', () => ({
}));
describe('CodingConversationTimeline', () => {
it('shows stable timestamps beneath both sides without changing message content', async () => {
const { codingConversationStore } = await import('@/stores/coding-conversations');
const { CodingConversationTimeline } = await import('@/pages/Chat/CodingConversationTimeline');
const snapshot = createProductSnapshot('message-times', 1);
snapshot.run = { status: 'idle' };
const sent = Date.parse('2026-09-28T08:01:02Z'), finished = sent + 40000;
snapshot.nodes = [
{ kind: 'message', id: 'u', role: 'user', status: 'complete', timestamp: sent, blocks: [{ kind: 'text', id: 'ut', status: 'complete', text: '时间问题' }] },
{ kind: 'message', id: 'a', role: 'assistant', status: 'complete', timestamp: finished, blocks: [{ kind: 'text', id: 'at', status: 'complete', text: '时间回答' }] },
];
codingConversationStore.getState().primeConversation(snapshot);
const view = render(<CodingConversationTimeline conversationId="message-times" />);
const userTime = view.container.querySelector('[data-node-id="u"] time');
const agentTime = view.container.querySelector('[data-node-id="a"] time');
expect(userTime).toHaveAttribute('datetime', new Date(sent).toISOString());
expect(userTime).toHaveClass('text-right');
expect(agentTime).toHaveAttribute('datetime', new Date(finished).toISOString());
act(() => codingConversationStore.getState().primeConversation(structuredClone(snapshot)));
expect(view.container.querySelector('[data-node-id="a"] time')).toHaveAttribute('datetime', new Date(finished).toISOString());
expect(screen.getByText('时间回答')).toBeVisible();
});
it('gives the failed hidden work action one login recovery and removes it when work is ready', async () => {
const { codingConversationStore } = await import('@/stores/coding-conversations');
const { CodingConversationTimeline } = await import('@/pages/Chat/CodingConversationTimeline');