mirror of
https://bitbucket.org/siakitem/my-pi.git
synced 2026-08-28 16:45:22 +00:00
98 lines
2.7 KiB
TypeScript
98 lines
2.7 KiB
TypeScript
import { readFileSync } from 'node:fs'
|
|
import { describe, expect, it } from 'vitest'
|
|
import { DEFAULT_MODEL, DEFAULT_PROVIDER, buildAutoReviewJsonSchema, loadAutoReviewConfig } from '../src/config.js'
|
|
|
|
describe('loadAutoReviewConfig', () => {
|
|
it('uses safe defaults when no config exists', () => {
|
|
const result = loadAutoReviewConfig({
|
|
agentDir: '/agent',
|
|
cwd: '/project',
|
|
readFile: () => undefined,
|
|
})
|
|
|
|
expect(result.issues).toEqual([])
|
|
expect(result.config).toMatchObject({
|
|
provider: DEFAULT_PROVIDER,
|
|
model: DEFAULT_MODEL,
|
|
reasoning: 'low',
|
|
timeoutMs: 90_000,
|
|
includeBaselinePolicy: true,
|
|
})
|
|
})
|
|
|
|
it('merges project fields over global fields', () => {
|
|
const files = new Map([
|
|
[
|
|
'/agent/extensions/pi-permission-auto-review/config.json',
|
|
JSON.stringify({
|
|
provider: 'global-provider',
|
|
model: 'global-model',
|
|
timeoutMs: 10_000,
|
|
additionalPolicy: 'Global policy',
|
|
}),
|
|
],
|
|
[
|
|
'/project/.pi/extensions/pi-permission-auto-review/config.json',
|
|
JSON.stringify({
|
|
model: 'project-model',
|
|
timeoutMs: 20_000,
|
|
}),
|
|
],
|
|
])
|
|
|
|
const result = loadAutoReviewConfig({
|
|
agentDir: '/agent',
|
|
cwd: '/project',
|
|
readFile: path => files.get(path),
|
|
})
|
|
|
|
expect(result.config).toMatchObject({
|
|
provider: 'global-provider',
|
|
model: 'project-model',
|
|
timeoutMs: 20_000,
|
|
additionalPolicy: 'Global policy',
|
|
})
|
|
})
|
|
|
|
it('disables automatic decisions for invalid config', () => {
|
|
const files = new Map([
|
|
[
|
|
'/project/.pi/extensions/pi-permission-auto-review/config.json',
|
|
JSON.stringify({
|
|
includeBaselinePolicy: false,
|
|
}),
|
|
],
|
|
])
|
|
|
|
const result = loadAutoReviewConfig({
|
|
agentDir: '/agent',
|
|
cwd: '/project',
|
|
readFile: path => files.get(path),
|
|
})
|
|
|
|
expect(result.config).toBeUndefined()
|
|
expect(result.issues[0]?.message).toContain('additionalPolicy is required')
|
|
})
|
|
|
|
it('rejects unknown fields rather than silently ignoring them', () => {
|
|
const result = loadAutoReviewConfig({
|
|
agentDir: '/agent',
|
|
cwd: '/project',
|
|
readFile: path => (path.startsWith('/project') ? JSON.stringify({ apiKey: 'must-not-live-here' }) : undefined),
|
|
})
|
|
|
|
expect(result.config).toBeUndefined()
|
|
expect(result.issues[0]?.message).toContain('Unrecognized key')
|
|
})
|
|
})
|
|
|
|
describe('published JSON Schema', () => {
|
|
it('matches the Zod source of truth', () => {
|
|
const published: unknown = JSON.parse(
|
|
readFileSync(new URL('../schemas/config.schema.json', import.meta.url), 'utf8'),
|
|
)
|
|
|
|
expect(published).toEqual(buildAutoReviewJsonSchema())
|
|
})
|
|
})
|