diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..20c23c3 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,111 @@ +"""Pytest configuration and fixtures for AI Code Audit CLI tests.""" + +import pytest +import tempfile +from pathlib import Path + + +@pytest.fixture +def sample_python_code(): + """Sample Python code with various issues.""" + return ''' +import os +import unused_module + +def example_function(password="secret123"): + api_key = "AKIAIOSFODNN7EXAMPLE" + try: + result = os.system(f"echo {password}") + except: + pass + return result + +def bad_function(items=[]): + for i in range(100): + pass + return items +''' + + +@pytest.fixture +def clean_python_code(): + """Sample clean Python code without issues.""" + return ''' +def calculate_sum(numbers: list[int]) -> int: + """Calculate the sum of a list of numbers.""" + total = 0 + for num in numbers: + total += num + return total + +if __name__ == "__main__": + numbers = [1, 2, 3, 4, 5] + print(calculate_sum(numbers)) +''' + + +@pytest.fixture +def sample_javascript_code(): + """Sample JavaScript code with various issues.""" + return ''' +const apiKey = "sk-1234567890abcdef"; +const password = "secret123"; + +function processData(data) { + try { + const result = eval(data.userInput); + return result; + } catch (e) { + // Silent catch + } +} + +function badExample(items = []) { + for (let i = 0; i < 100; i++) { + console.log(i); + } +} +''' + + +@pytest.fixture +def temp_directory(): + """Create a temporary directory with test files.""" + with tempfile.TemporaryDirectory() as tmpdir: + yield Path(tmpdir) + + +@pytest.fixture +def test_files(temp_directory, sample_python_code, clean_python_code, sample_javascript_code): + """Create test files in temp directory.""" + (temp_directory / "bad_code.py").write_text(sample_python_code) + (temp_directory / "good_code.py").write_text(clean_python_code) + (temp_directory / "bad_code.js").write_text(sample_javascript_code) + return temp_directory + + +@pytest.fixture +def mock_scan_result(): + """Create a mock scan result for testing.""" + from src.core.models import ScanResult, Issue, IssueCategory, SeverityLevel + + result = ScanResult(files_scanned=3, target_path="/test") + result.add_issue(Issue( + severity=SeverityLevel.HIGH, + category=IssueCategory.SECURITY, + file_path="/test/file.py", + line_number=5, + message="Hardcoded credential detected", + suggestion="Use environment variables", + scanner_name="test", + )) + result.add_issue(Issue( + severity=SeverityLevel.MEDIUM, + category=IssueCategory.ANTI_PATTERN, + file_path="/test/file.py", + line_number=10, + message="Mutable default argument detected", + suggestion="Use None as default", + scanner_name="test", + )) + return result