diff --git a/plugins/promptfoo/src/generator/config-filename.test.ts b/plugins/promptfoo/src/generator/config-filename.test.ts new file mode 100644 index 0000000..436322b --- /dev/null +++ b/plugins/promptfoo/src/generator/config-filename.test.ts @@ -0,0 +1,36 @@ +import * as fs from 'node:fs'; +import * as os from 'node:os'; +import * as path from 'node:path'; + +import { afterEach, describe, expect, it } from 'vitest'; + +import { generateConfig } from './config.js'; + +const tempDirs: string[] = []; + +afterEach(() => { + for (const dir of tempDirs.splice(0)) { + fs.rmSync(dir, { recursive: true, force: true }); + } +}); + +describe('generateConfig filename handling', () => { + it('keeps the requested filename while writing a stable verify config alias', () => { + const outputDir = fs.mkdtempSync(path.join(os.tmpdir(), 'crabcode-config-')); + tempDirs.push(outputDir); + + const generated = generateConfig({ + description: 'Custom filename config', + providerType: 'http', + providerConfig: { url: 'https://example.com', method: 'GET' }, + outputDir, + filename: 'custom-config.yaml', + }); + + expect(generated.filePath).toBe(path.join(outputDir, 'custom-config.yaml')); + expect(generated.verifyPath).toBe('promptfooconfig.yaml'); + expect(fs.readFileSync(generated.filePath, 'utf-8')).toBe( + fs.readFileSync(path.join(outputDir, generated.verifyPath), 'utf-8') + ); + }); +}); diff --git a/plugins/promptfoo/src/generator/config-outputdir.test.ts b/plugins/promptfoo/src/generator/config-outputdir.test.ts index 0fa55c2..fa5fe05 100644 --- a/plugins/promptfoo/src/generator/config-outputdir.test.ts +++ b/plugins/promptfoo/src/generator/config-outputdir.test.ts @@ -28,7 +28,7 @@ describe('generateConfig output paths', () => { }); expect(generated.filePath).toBe(path.join(outputDir, 'nested-config.yaml')); - expect(generated.verifyPath).toBe('nested-config.yaml'); + expect(generated.verifyPath).toBe('promptfooconfig.yaml'); expect(fs.existsSync(generated.filePath)).toBe(true); }); }); diff --git a/plugins/promptfoo/src/generator/config.ts b/plugins/promptfoo/src/generator/config.ts index 34b4e33..eb90677 100644 --- a/plugins/promptfoo/src/generator/config.ts +++ b/plugins/promptfoo/src/generator/config.ts @@ -25,6 +25,8 @@ export interface GeneratedConfig { envVars: Record; } +const DEFAULT_CONFIG_FILENAME = 'promptfooconfig.yaml'; + /** * Generate a promptfoo YAML config */ @@ -35,7 +37,7 @@ export function generateConfig(options: GenerateConfigOptions): GeneratedConfig providerConfig, envVars = {}, outputDir = '.', - filename = 'promptfooconfig.yaml', + filename = DEFAULT_CONFIG_FILENAME, } = options; // Validate providerConfig has required fields for http provider @@ -101,11 +103,16 @@ ${Object.entries(envVars).map(([k, v]) => `# ${k}: ${v}`).join('\n') || '# ( // Write the file const filePath = path.join(outputDir, filename); fs.writeFileSync(filePath, fullYaml, 'utf-8'); + const verifyPath = DEFAULT_CONFIG_FILENAME; + + if (verifyPath !== filename) { + fs.writeFileSync(path.join(outputDir, verifyPath), fullYaml, 'utf-8'); + } return { yaml: fullYaml, filePath, - verifyPath: filename, + verifyPath, envVars, }; }