Files
OpenOPC/opc/plugins/office_ui/frontend_src/chat/TaskHeaderBar.test.tsx
T
2026-07-01 17:56:31 +08:00

81 lines
2.4 KiB
TypeScript

import assert from 'node:assert/strict'
import React from 'react'
import { renderToStaticMarkup } from 'react-dom/server'
import { TaskHeaderBar } from './TaskHeaderBar'
import type { Session } from '../types/kanban'
import type { AgentInfo } from '../types/visual'
const now = Date.now()
const nexusAgent: AgentInfo = {
agent_id: 'nexus',
name: 'NEXUS Executive Brief',
description: 'Executive briefing agent',
specialties: [],
status: 'idle',
appearance: { palette: 0, hue_shift: 0, seat_zone: 'north' },
}
function makeSession(overrides: Partial<Session>): Session {
return {
projectId: 'project-a',
taskId: 'task-a',
channelId: 'channel-a',
execMode: 'task',
title: 'NEXUS Executive Brief',
status: 'running',
columnId: 'in-progress',
assigneeIds: ['nexus'],
priority: null,
tags: [],
progressLog: [],
createdAt: now - 60_000,
updatedAt: now,
messageCount: 1,
...overrides,
}
}
const companyMarkup = renderToStaticMarkup(
React.createElement(TaskHeaderBar, {
session: makeSession({
execMode: 'org',
isCompanyRuntime: true,
workItemRoleName: 'Chief Analyst',
employeeAssignment: { name: 'NEXUS Executive Brief', employeeId: 'employee-nexus' },
selectedExecutionAgent: 'codex',
displayTool: 'opc-collab delegate_work',
currentTool: undefined,
}),
agents: [nexusAgent],
onTitleChange: () => undefined,
}),
)
assert.match(companyMarkup, /Chief Analyst/, 'company header should keep the role pill')
assert.match(companyMarkup, /NEXUS Executive Brief/, 'company header should keep the employee label')
assert.match(companyMarkup, /Codex/, 'company header should keep the execution agent label')
assert.match(companyMarkup, /opc-collab delegate_work/, 'company header should show stable displayTool while still running')
assert.doesNotMatch(
companyMarkup,
/task-header-avatar/,
'company header must not render a duplicate assignee initial avatar',
)
const taskMarkup = renderToStaticMarkup(
React.createElement(TaskHeaderBar, {
session: makeSession({ execMode: 'task' }),
agents: [nexusAgent],
onTitleChange: () => undefined,
}),
)
assert.match(
taskMarkup,
/task-header-avatar/,
'plain task headers should keep assignee initial avatars',
)
console.log('TaskHeaderBar.test.tsx: OK (company header hides duplicate avatar and keeps stable tool label)')