Files
baiyue-firstleg/scripts/agents-index-registry-contract.test.mjs
T

36 lines
2.6 KiB
JavaScript

import assert from 'node:assert/strict'
import { readFileSync } from 'node:fs'
import { execFileSync } from 'node:child_process'
import test from 'node:test'
const source = readFileSync(new URL('./agents-index-contract.ps1', import.meta.url), 'utf8').replaceAll('\r\n', '\n')
const registry = readFileSync(new URL('../../docs/独立任务协作登记.md', import.meta.url), 'utf8')
const contract = source.split('# BEGIN CURRENT TEST REGISTRY CONTRACT\n')[1]?.split('# END CURRENT TEST REGISTRY CONTRACT')[0]
assert.ok(contract, 'test exercises the production PowerShell registry validator')
function failures(text) {
const encoded = Buffer.from(text).toString('base64')
const command = `$ErrorActionPreference='Stop'
$script:failures=[System.Collections.Generic.List[string]]::new();$script:checked=0
function Add-Failure([string]$message){$script:failures.Add($message)}
function Assert-Contains([string]$text,[string]$needle,[string]$scope){if(-not $text.Contains($needle)){Add-Failure $scope}}
function Assert-NotContains([string]$text,[string]$needle,[string]$scope){if($text.Contains($needle)){Add-Failure $scope}}
${contract}
Assert-TestTaskRegistry ([Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('${encoded}')))
ConvertTo-Json -InputObject @($script:failures) -Compress`
return JSON.parse(execFileSync('pwsh', ['-NoProfile', '-NonInteractive', '-Command', command], { encoding: 'utf8' }))
}
test('actual explicitly authorized TEST registry passes the production validator', () => {
assert.deepEqual(failures(registry), [])
})
for (const [name, mutate] of [
['missing creation authorization', s => s.replace('确认创建三个任务,我们当前目标调整一下,加上自己,一共4个任务', '安排任务')],
['wrong controller', s => s.replace('车辆总控:当前对话 `01a0f19d-3f0b-7ae0-a860-c0d1d2e84475`', 'task_id=unknown')],
['wrong project', s => s.replace('`c64729ff-6710-43c6-8ef2-d84e9666cc1e`', 'projectId=wrong')],
['wrong workspace', s => s.replace('`C:/Users/BY-OY/Desktop/code/chongchong-global`', '`C:/Users/BY-OY/Desktop/code/chongchong-global-dev`')],
['duplicate task', s => s.replace('01a0ffcf-eea3-7111-b30b-4be63547ac33', '01a0ffcf-7150-7db3-9d8c-108e568c12b1')],
['unregistered replacement', s => s.replace('01a0ffcf-eea3-7111-b30b-4be63547ac33', '00000000-0000-0000-0000-000000000000')],
['obsolete empty status', s => s + '\n当前无登记任务'],
['foreign project identity', s => s + '\n6f874ec3-d3b2-49bd-8625-327f4d685f98'],
['retired controller', s => s + '\n01a0194a-259c-7171-8967-074731a27618'],
]) test(`production validator rejects ${name}`, () => assert.ok(failures(mutate(registry)).length > 0))