64 lines
2.4 KiB
TypeScript
64 lines
2.4 KiB
TypeScript
import assert from 'node:assert/strict'
|
|
import { readFileSync } from 'node:fs'
|
|
import { dirname, join } from 'node:path'
|
|
import { fileURLToPath } from 'node:url'
|
|
import React from 'react'
|
|
import { renderToStaticMarkup } from 'react-dom/server'
|
|
|
|
import { StaffingSelectionPanel } from './StaffingSelectionPanel'
|
|
|
|
const markup = renderToStaticMarkup(
|
|
React.createElement(StaffingSelectionPanel, {
|
|
meta: {
|
|
checkpoint_type: 'company_staffing_selection',
|
|
checkpoint_id: 'cp-staffing',
|
|
company_profile: 'corporate',
|
|
summary: 'Select staff manually, or run automatic recruitment.',
|
|
staffing_roles: [
|
|
{
|
|
role_id: 'senior_engineer',
|
|
role_label: 'Senior Engineer',
|
|
default_selection: { kind: 'employee', id: 'senior-existing' },
|
|
default_agent: 'codex',
|
|
selected_agent: 'codex',
|
|
},
|
|
],
|
|
staffing_pool: {
|
|
employees: [
|
|
{
|
|
employee_id: 'senior-existing',
|
|
employee_name: 'Existing Engineer',
|
|
role_id: 'senior_engineer',
|
|
category: 'engineering',
|
|
},
|
|
],
|
|
templates: [
|
|
{
|
|
template_id: 'engineering-frontend-developer',
|
|
template_name: 'Frontend Developer',
|
|
category: 'engineering',
|
|
},
|
|
],
|
|
},
|
|
},
|
|
onReply: () => undefined,
|
|
responded: false,
|
|
}),
|
|
)
|
|
|
|
assert.match(markup, /Manual Staffing/)
|
|
assert.match(markup, /Existing Engineer/)
|
|
assert.match(markup, /Frontend Developer/)
|
|
assert.match(markup, /Approve/)
|
|
assert.match(markup, /Auto Recruit/)
|
|
|
|
const here = dirname(fileURLToPath(import.meta.url))
|
|
const src = readFileSync(join(here, 'StaffingSelectionPanel.tsx'), 'utf8')
|
|
assert.match(src, /staffing_action: action/, 'panel replies must send structured staffing_action metadata')
|
|
assert.match(src, /staffing_selections: selections/, 'panel replies must send structured staffing selections')
|
|
assert.match(src, /recruitment_agent: recruitmentAgent/, 'panel replies must send the selected recruiter agent')
|
|
assert.match(src, /hasSubmittedCheckpointMetadata/, 'responded staffing cards must detect persisted reply metadata')
|
|
assert.match(src, /setRoleAgents\(buildRoleAgentsFromMeta\(meta, roles\)\)/, 'responded staffing cards must sync displayed agent choices from reply metadata')
|
|
|
|
console.log('StaffingSelectionPanel.test.tsx: OK (manual staffing panel renders structured choices)')
|