mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-02-28 09:23:08 +08:00
Migrated ccw-skill-hub to D:/ccw-skill-hub as independent git project. Removed nested git repos (ccw/frontend/ccw-skill-hub, skill-hub-repo, skill-hub-temp).
279 lines
6.5 KiB
Python
279 lines
6.5 KiB
Python
"""Pytest configuration and shared fixtures for codex-lens tests.
|
|
|
|
This module provides common fixtures and test utilities to reduce code duplication
|
|
across the test suite. Using fixtures ensures consistent test setup and makes tests
|
|
more maintainable.
|
|
|
|
Common Fixtures:
|
|
- temp_dir: Temporary directory for test files
|
|
- sample_index_db: Sample index database with test data
|
|
- mock_config: Mock configuration object
|
|
- sample_code_files: Factory for creating sample code files
|
|
"""
|
|
|
|
import pytest
|
|
import tempfile
|
|
import shutil
|
|
from pathlib import Path
|
|
from typing import Dict, Any
|
|
import sqlite3
|
|
|
|
|
|
@pytest.fixture
|
|
def temp_dir():
|
|
"""Create a temporary directory for test files.
|
|
|
|
The directory is automatically cleaned up after the test.
|
|
|
|
Yields:
|
|
Path: Path to the temporary directory.
|
|
"""
|
|
temp_path = Path(tempfile.mkdtemp())
|
|
yield temp_path
|
|
# Cleanup
|
|
if temp_path.exists():
|
|
shutil.rmtree(temp_path)
|
|
|
|
|
|
@pytest.fixture
|
|
def sample_index_db(temp_dir):
|
|
"""Create a sample index database with test data.
|
|
|
|
The database has a basic schema with files and chunks tables
|
|
populated with sample data.
|
|
|
|
Args:
|
|
temp_dir: Temporary directory fixture.
|
|
|
|
Yields:
|
|
Path: Path to the sample index database.
|
|
"""
|
|
db_path = temp_dir / "_index.db"
|
|
|
|
# Create database with basic schema
|
|
conn = sqlite3.connect(db_path)
|
|
cursor = conn.cursor()
|
|
|
|
# Files table
|
|
cursor.execute("""
|
|
CREATE TABLE files (
|
|
id INTEGER PRIMARY KEY,
|
|
path TEXT NOT NULL UNIQUE,
|
|
content TEXT,
|
|
language TEXT,
|
|
hash TEXT,
|
|
indexed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
)
|
|
""")
|
|
|
|
# Insert sample files
|
|
sample_files = [
|
|
("test.py", "def hello():\n print('world')", "python", "hash1"),
|
|
("test.js", "function hello() { console.log('world'); }", "javascript", "hash2"),
|
|
("README.md", "# Test Project", "markdown", "hash3"),
|
|
]
|
|
cursor.executemany(
|
|
"INSERT INTO files (path, content, language, hash) VALUES (?, ?, ?, ?)",
|
|
sample_files
|
|
)
|
|
|
|
conn.commit()
|
|
conn.close()
|
|
|
|
yield db_path
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_config():
|
|
"""Create a mock configuration object with default values.
|
|
|
|
Returns:
|
|
Mock: Mock object with common config attributes.
|
|
"""
|
|
from unittest.mock import Mock
|
|
|
|
config = Mock()
|
|
config.index_path = Path("/tmp/test_index")
|
|
config.chunk_size = 2000
|
|
config.overlap = 200
|
|
config.embedding_backend = "fastembed"
|
|
config.embedding_model = "code"
|
|
config.max_results = 10
|
|
|
|
return config
|
|
|
|
|
|
@pytest.fixture
|
|
def sample_code_factory(temp_dir):
|
|
"""Factory for creating sample code files.
|
|
|
|
Args:
|
|
temp_dir: Temporary directory fixture.
|
|
|
|
Returns:
|
|
callable: Function that creates sample code files.
|
|
"""
|
|
def _create_file(filename: str, content: str, language: str = "python") -> Path:
|
|
"""Create a sample code file.
|
|
|
|
Args:
|
|
filename: Name of the file to create.
|
|
content: Content of the file.
|
|
language: Programming language (default: python).
|
|
|
|
Returns:
|
|
Path: Path to the created file.
|
|
"""
|
|
file_path = temp_dir / filename
|
|
file_path.parent.mkdir(parents=True, exist_ok=True)
|
|
file_path.write_text(content)
|
|
return file_path
|
|
|
|
return _create_file
|
|
|
|
|
|
@pytest.fixture
|
|
def sample_python_code():
|
|
"""Sample Python code for testing.
|
|
|
|
Returns:
|
|
str: Sample Python code snippet.
|
|
"""
|
|
return '''
|
|
def calculate_sum(a: int, b: int) -> int:
|
|
"""Calculate the sum of two integers."""
|
|
return a + b
|
|
|
|
class Calculator:
|
|
"""A simple calculator class."""
|
|
|
|
def __init__(self):
|
|
self.value = 0
|
|
|
|
def add(self, x: int) -> None:
|
|
"""Add a value to the calculator."""
|
|
self.value += x
|
|
|
|
if __name__ == "__main__":
|
|
calc = Calculator()
|
|
calc.add(5)
|
|
print(f"Result: {calc.value}")
|
|
'''
|
|
|
|
|
|
@pytest.fixture
|
|
def sample_javascript_code():
|
|
"""Sample JavaScript code for testing.
|
|
|
|
Returns:
|
|
str: Sample JavaScript code snippet.
|
|
"""
|
|
return '''
|
|
// Simple utility functions
|
|
function add(a, b) {
|
|
return a + b;
|
|
}
|
|
|
|
const Calculator = class {
|
|
constructor() {
|
|
this.value = 0;
|
|
}
|
|
|
|
add(x) {
|
|
this.value += x;
|
|
}
|
|
};
|
|
|
|
// Example usage
|
|
const calc = new Calculator();
|
|
calc.add(5);
|
|
console.log(`Result: ${calc.value}`);
|
|
'''
|
|
|
|
|
|
class CodeSampleFactory:
|
|
"""Factory class for generating various code samples.
|
|
|
|
This class provides methods to generate code samples in different
|
|
languages with various patterns (classes, functions, imports, etc.).
|
|
"""
|
|
|
|
@staticmethod
|
|
def python_function(name: str = "example", docstring: bool = True) -> str:
|
|
"""Generate a Python function sample.
|
|
|
|
Args:
|
|
name: Function name.
|
|
docstring: Whether to include docstring.
|
|
|
|
Returns:
|
|
str: Python function code.
|
|
"""
|
|
doc = f' """Example function."""\n' if docstring else ''
|
|
return f'''
|
|
def {name}(param1: str, param2: int = 10) -> str:
|
|
{doc} return param1 * param2
|
|
'''.strip()
|
|
|
|
@staticmethod
|
|
def python_class(name: str = "Example") -> str:
|
|
"""Generate a Python class sample.
|
|
|
|
Args:
|
|
name: Class name.
|
|
|
|
Returns:
|
|
str: Python class code.
|
|
"""
|
|
return f'''
|
|
class {name}:
|
|
"""Example class."""
|
|
|
|
def __init__(self, value: int = 0):
|
|
self.value = value
|
|
|
|
def increment(self) -> None:
|
|
"""Increment the value."""
|
|
self.value += 1
|
|
'''.strip()
|
|
|
|
@staticmethod
|
|
def javascript_function(name: str = "example") -> str:
|
|
"""Generate a JavaScript function sample.
|
|
|
|
Args:
|
|
name: Function name.
|
|
|
|
Returns:
|
|
str: JavaScript function code.
|
|
"""
|
|
return f'''function {name}(param1, param2 = 10) {{
|
|
return param1 * param2;
|
|
}}'''.strip()
|
|
|
|
@staticmethod
|
|
def typescript_interface(name: str = "Example") -> str:
|
|
"""Generate a TypeScript interface sample.
|
|
|
|
Args:
|
|
name: Interface name.
|
|
|
|
Returns:
|
|
str: TypeScript interface code.
|
|
"""
|
|
return f'''interface {name} {{
|
|
id: number;
|
|
name: string;
|
|
getValue(): number;
|
|
}}'''.strip()
|
|
|
|
|
|
@pytest.fixture
|
|
def code_sample_factory():
|
|
"""Create a code sample factory instance.
|
|
|
|
Returns:
|
|
CodeSampleFactory: Factory for generating code samples.
|
|
"""
|
|
return CodeSampleFactory()
|