Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Ben Vargas <ben@example.com>
56 lines
1.7 KiB
JavaScript
56 lines
1.7 KiB
JavaScript
import fs from 'fs';
|
|
import path from 'path';
|
|
import { fileURLToPath } from 'url';
|
|
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
const promptsDir = path.join(__dirname, '../../../src/prompts');
|
|
|
|
describe('Prompt Migration Validation', () => {
|
|
const bannedPhrases = [
|
|
'Respond ONLY with',
|
|
'Return only the',
|
|
'valid JSON',
|
|
'Do not include any explanatory text',
|
|
'Do not include any explanation',
|
|
'code block markers'
|
|
];
|
|
|
|
// Map banned phrases to contexts where they're allowed
|
|
const allowedContexts = {
|
|
'respond only with': ['Use markdown formatting for better readability'],
|
|
'return only the': ['Use markdown formatting for better readability']
|
|
};
|
|
|
|
test('prompts should not contain JSON formatting instructions', () => {
|
|
const promptFiles = fs
|
|
.readdirSync(promptsDir)
|
|
.filter((file) => file.endsWith('.json') && !file.includes('schema'))
|
|
// Exclude update-subtask.json as it returns plain strings, not JSON
|
|
.filter((file) => file !== 'update-subtask.json');
|
|
|
|
promptFiles.forEach((file) => {
|
|
const content = fs.readFileSync(path.join(promptsDir, file), 'utf8');
|
|
|
|
bannedPhrases.forEach((phrase) => {
|
|
const lowerContent = content.toLowerCase();
|
|
const lowerPhrase = phrase.toLowerCase();
|
|
|
|
if (lowerContent.includes(lowerPhrase)) {
|
|
// Check if this phrase is allowed in its context
|
|
const allowedInContext = allowedContexts[lowerPhrase];
|
|
const isAllowed =
|
|
allowedInContext &&
|
|
allowedInContext.some((context) =>
|
|
lowerContent.includes(context.toLowerCase())
|
|
);
|
|
|
|
expect(isAllowed).toBe(
|
|
true,
|
|
`File ${file} contains banned phrase "${phrase}" without allowed context`
|
|
);
|
|
}
|
|
});
|
|
});
|
|
});
|
|
});
|