Files
2026-07-13 23:02:39 +08:00

96 lines
2.5 KiB
TypeScript

import assert from 'node:assert/strict'
import React from 'react'
import { renderToStaticMarkup } from 'react-dom/server'
import { WorkItemProgressCard } from './WorkItemProgressCard'
import type { RoleWorkItemSummary } from '../types/kanban'
const currentOwnerRoleWorkItems: Record<string, RoleWorkItemSummary> = {
cto: {
roleKey: 'cto',
roleId: 'cto',
roleName: 'CTO',
runtimeStatus: 'idle',
aggregatedStatus: 'waiting',
workItems: [
{
workItemId: 'wi-review',
phase: 'awaiting_manager_review',
kanbanColumn: 'in-review',
title: 'Implement summary',
kind: 'execute',
isReviewTarget: true,
executorRoleId: 'engineer',
reviewerRoleId: 'cto',
createdAt: 10,
updatedAt: 20,
executionTurnId: 'runtime-task-1',
progressLog: [],
},
],
},
}
const executorRoleWorkItems: Record<string, RoleWorkItemSummary> = {
engineer: {
roleKey: 'engineer',
roleId: 'engineer',
roleName: 'Engineer',
runtimeStatus: 'idle',
aggregatedStatus: 'waiting',
workItems: [
{
workItemId: 'wi-review',
phase: 'awaiting_manager_review',
kanbanColumn: 'in-review',
title: 'Implement summary',
kind: 'execute',
isReviewTarget: true,
executorRoleId: 'engineer',
reviewerRoleId: 'cto',
createdAt: 10,
updatedAt: 20,
executionTurnId: 'runtime-task-1',
progressLog: [],
},
],
},
}
const executorMarkup = renderToStaticMarkup(
React.createElement(WorkItemProgressCard, {
workItemLog: [],
roleWorkItems: currentOwnerRoleWorkItems,
executorRoleWorkItems,
isCompanyRuntime: true,
}),
)
assert.match(executorMarkup, /Execution Progress/)
assert.match(executorMarkup, /Engineer/)
assert.doesNotMatch(executorMarkup, /CTO/)
const fallbackMarkup = renderToStaticMarkup(
React.createElement(WorkItemProgressCard, {
workItemLog: [],
roleWorkItems: currentOwnerRoleWorkItems,
isCompanyRuntime: true,
}),
)
assert.match(fallbackMarkup, /CTO/)
assert.doesNotMatch(fallbackMarkup, /Engineer/)
const preparingMarkup = renderToStaticMarkup(
React.createElement(WorkItemProgressCard, {
workItemLog: [],
isCompanyRuntime: true,
}),
)
assert.match(preparingMarkup, /Execution Progress/)
assert.match(preparingMarkup, /Preparing company roles/)
assert.match(preparingMarkup, /role="status"/)
console.log('WorkItemProgressCard.test.tsx: OK (executor rollup preferred with current-owner fallback)')