/**
* Feature: agentcore-mcp-migration, Property 4: Gitignore Contains All Required Exclusion Patterns
*
* Validates: Requirements 10.1, 10.2
*
* For any pattern in the required set, the .gitignore file SHALL contain
* a line matching that pattern.
*/
import { describe, it, expect } from 'vitest';
import fc from 'fast-check';
import { readFileSync } from 'fs';
import { resolve } from 'path';
const GITIGNORE_PATH = resolve(import.meta.dirname, '..', '.gitignore');
const REQUIRED_PATTERNS = [
'*.tfstate',
'*.tfstate.*',
'*.tfplan',
'*.auto.tfvars',
'secrets.auto.tfvars',
'.terraform/',
'.env',
'.DS_Store',
'.vscode/',
'.idea/',
];
describe('Feature: agentcore-mcp-migration, Property 4: Gitignore Contains All Required Exclusion Patterns', () => {
const gitignoreContent = readFileSync(GITIGNORE_PATH, 'utf-8');
const gitignoreLines = gitignoreContent
.split('\n')
.map(l => l.trim())
.filter(l => l && !l.startsWith('#'));
it('property: every required pattern is present in .gitignore', () => {
/**
* **Validates: Requirements 10.1, 10.2**
*
* Draw from the set of required exclusion patterns and verify each
* one appears as a line in the .gitignore file.
*/
const requiredPatternArb = fc.constantFrom(...REQUIRED_PATTERNS);
fc.assert(
fc.property(requiredPatternArb, (pattern) => {
return gitignoreLines.includes(pattern);
}),
{ numRuns: 100 }
);
});
it('should contain all required patterns (exhaustive check)', () => {
for (const pattern of REQUIRED_PATTERNS) {
expect(gitignoreLines).toContain(pattern);
}
});
});