CaiWuXiTong/tests/scripts/kaifa-progress-sync.test.mjs

50 lines
2.6 KiB
JavaScript

import assert from 'node:assert/strict'
import test from 'node:test'
import {
classifyCommit,
makeIdempotencyKey,
normalizeRepoName,
selectUniqueProject,
validateStatusEvidence,
} from '../../scripts/kaifa-progress-sync.mjs'
test('normalizes repository names and builds a stable idempotency key', () => {
assert.equal(normalizeRepoName('http://git.example.com/team/CaiWuXiTong.git'), 'CaiWuXiTong')
assert.equal(makeIdempotencyKey('CaiWuXiTong', 'abc123', 'testing'), 'CaiWuXiTong:abc123:testing')
})
test('matches exactly one project and rejects ambiguous matches', () => {
const project = {
projectId: 'p1', projectName: '财务系统', department: '财务中心', repoName: 'CaiWuXiTong',
productionUrl: 'https://218.93.190.75:8442', deploymentName: 'caiwuxitong',
}
const identity = {
projectName: '财务系统', repoName: 'CaiWuXiTong', productionUrl: 'https://218.93.190.75:8442',
deploymentName: 'caiwuxitong',
}
assert.equal(selectUniqueProject([project], identity).projectId, 'p1')
assert.throws(() => selectUniqueProject([project, { ...project, projectId: 'p2' }], identity), /AMBIGUOUS/)
})
test('assigns one primary feature and stops on ambiguous feature matches', () => {
assert.equal(classifyCommit('财务经营报表增加安装明细', ['app/Models/Business/InstallationDetail.php']).rule.key, 'installation-details')
assert.equal(classifyCommit('修复云数据库管理不支持 PostgreSQL 连接', ['app/Http/Controllers/SystemSettings/Databases.php']).rule.key, 'upstream-connections')
const esign = classifyCommit('feat: add callback-free eSign status polling', ['app/Console/Commands/PollEsignSignatures.php']).rule
assert.equal(esign.key, 'courier-esign')
assert.equal(esign.featureName, 'E 签宝无回调状态轮询与归档')
assert.equal(
classifyCommit('feat: align taobao reconciliation headers', ['resources/views/store_receivables/zhongcai_reconciliations/partials/embedded-table.blade.php']).rule.key,
'zhongcai-reconciliation',
)
assert.throws(
() => classifyCommit('chore: shared update', ['app/Utilities/SystemDatabaseConfiguration.php', 'modules/EcommerceFinance/Services/UpstreamOdbcConnection.php']),
/FEATURE_MATCH_AMBIGUOUS/,
)
})
test('done requires passed tests and explicit acceptance evidence', () => {
assert.throws(() => validateStatusEvidence('done', { testStatus: 'passed', acceptanceEvidence: '' }), /DONE_REQUIRES/)
assert.doesNotThrow(() => validateStatusEvidence('done', { testStatus: 'passed', acceptanceEvidence: 'production SHA verified' }))
})