cc-haha/scripts/quality-gate/quarantine.test.ts
程序员阿江(Relakkes) 435e4ccc9f ci: harden deterministic PR quality gates
Route required checks by changed surface, add offline provider and chat contracts, and keep fork PRs independent of live credentials. Layer agent guidance by subtree and enforce a compact instruction budget.

Tested: bun run check:policy
Confidence: high
Scope-risk: broad
2026-07-10 20:29:01 +08:00

112 lines
3.4 KiB
TypeScript

import { describe, expect, test } from 'bun:test'
import { expiredQuarantineEntries, loadQuarantineManifest, quarantinedPathSet, renderQuarantineSummary, validateQuarantineManifest } from './quarantine'
describe('quarantine manifest', () => {
test('loads the default manifest', () => {
const manifest = loadQuarantineManifest()
expect(Array.isArray(manifest.quarantined)).toBe(true)
})
test('default manifest review dates are still active', () => {
validateQuarantineManifest(loadQuarantineManifest(), { enforceReviewDate: true })
})
test('does not quarantine deterministic provider contract tests', () => {
const paths = quarantinedPathSet()
expect(paths.has('src/server/__tests__/provider-settings-isolation.test.ts')).toBe(false)
expect(paths.has('src/server/__tests__/providers-real.test.ts')).toBe(false)
})
test('rejects duplicate ids', () => {
expect(() => validateQuarantineManifest({
quarantined: [
{
id: 'duplicate',
path: 'a.test.ts',
reason: 'test',
owner: 'maintainers',
reviewAfter: '2026-06-01',
exitCriteria: 'make deterministic',
},
{
id: 'duplicate',
path: 'b.test.ts',
reason: 'test',
owner: 'maintainers',
reviewAfter: '2026-06-01',
exitCriteria: 'make deterministic',
},
],
})).toThrow('duplicate quarantine id')
})
test('requires exit criteria and valid review dates', () => {
expect(() => validateQuarantineManifest({
quarantined: [
{
id: 'missing-exit',
path: 'a.test.ts',
reason: 'test',
owner: 'maintainers',
reviewAfter: '2026-06-01',
exitCriteria: '',
},
],
})).toThrow('invalid quarantine entry')
expect(() => validateQuarantineManifest({
quarantined: [
{
id: 'bad-date',
path: 'a.test.ts',
reason: 'test',
owner: 'maintainers',
reviewAfter: 'soon',
exitCriteria: 'make deterministic',
},
],
})).toThrow('invalid quarantine reviewAfter date')
})
test('detects expired review dates when enforcement is requested', () => {
const manifest = {
quarantined: [
{
id: 'expired',
path: 'a.test.ts',
reason: 'test',
owner: 'maintainers',
reviewAfter: '2026-01-01',
exitCriteria: 'make deterministic',
},
],
}
expect(expiredQuarantineEntries(manifest, new Date('2026-05-06T00:00:00.000Z')).map((entry) => entry.id)).toEqual(['expired'])
expect(() => validateQuarantineManifest(manifest, {
enforceReviewDate: true,
asOf: new Date('2026-05-06T00:00:00.000Z'),
})).toThrow('expired quarantine entries require review')
})
test('renders a compact review summary', () => {
const manifest = {
quarantined: [
{
id: 'expired',
path: 'a.test.ts',
reason: 'test',
owner: 'maintainers',
reviewAfter: '2026-01-01',
exitCriteria: 'make deterministic',
},
],
}
const summary = renderQuarantineSummary(manifest, new Date('2026-05-06T00:00:00.000Z'))
expect(summary).toContain('Entries: 1')
expect(summary).toContain('Expired: 1')
expect(summary).toContain('expired (a.test.ts, reviewAfter=2026-01-01)')
})
})