diff --git a/tests/test_scanner.py b/tests/test_scanner.py new file mode 100644 index 0000000..3b5625b --- /dev/null +++ b/tests/test_scanner.py @@ -0,0 +1,65 @@ +"""Tests for code scanner.""" + +import pytest +from pathlib import Path + +from src.core.scanner import CodeScanner +from src.core.models import IssueCategory, SeverityLevel + + +class TestCodeScanner: + """Tests for CodeScanner class.""" + + def test_scanner_initialization(self): + """Test scanner creates empty issue list.""" + scanner = CodeScanner() + assert scanner.issues == [] + + def test_supported_extensions(self): + """Test supported file extensions.""" + scanner = CodeScanner() + assert ".py" in scanner.SUPPORTED_EXTENSIONS + assert ".js" in scanner.SUPPORTED_EXTENSIONS + assert ".ts" in scanner.SUPPORTED_EXTENSIONS + + def test_scan_single_file(self, tmp_path): + """Test scanning a single file.""" + test_file = tmp_path / "test.py" + test_file.write_text(""" +def hello(): + # TODO: implement + print("Hello") +""") + + scanner = CodeScanner() + result = scanner.scan(test_file) + + assert result.files_scanned == 1 + assert len(result.issues) == 1 + assert result.issues[0].category == IssueCategory.MAINTAINABILITY + assert result.issues[0].severity == SeverityLevel.LOW + + def test_scan_directory(self, tmp_path): + """Test scanning a directory.""" + test_dir = tmp_path / "project" + test_dir.mkdir() + + (test_dir / "test.py").write_text("# TODO: test") + (test_dir / "test.js").write_text("// FIXME: fix") + + scanner = CodeScanner() + result = scanner.scan(test_dir) + + assert result.files_scanned == 2 + assert len(result.issues) == 2 + + def test_unsupported_file(self, tmp_path): + """Test skipping unsupported files.""" + test_file = tmp_path / "test.txt" + test_file.write_text("TODO: something") + + scanner = CodeScanner() + result = scanner.scan(test_file) + + assert result.files_scanned == 0 + assert len(result.issues) == 0