"""Pytest configuration and fixtures for codebase-knowledge-graph-cli tests.""" import tempfile from collections.abc import Generator from pathlib import Path import pytest @pytest.fixture def temp_project_dir() -> Generator[Path, None, None]: """Create a temporary directory for testing.""" with tempfile.TemporaryDirectory() as tmp_dir: yield Path(tmp_dir) @pytest.fixture def sample_python_code(): return ''' """Sample module for testing.""" import os import json from typing import List, Dict class DataProcessor: """A class for processing data.""" def __init__(self, config: Dict[str, str]): self.config = config self.cache = {} def process(self, items: List[str]) -> List[Dict]: """Process a list of items. Args: items: List of strings to process Returns: List of processed dictionaries """ results = [] for item in items: if item in self.cache: results.append(self.cache[item]) else: processed = self._process_single(item) self.cache[item] = processed results.append(processed) return results def _process_single(self, item: str) -> Dict: """Process a single item.""" return {"item": item, "length": len(item)} def main(): """Main entry point.""" processor = DataProcessor({"debug": "true"}) result = processor.process(["hello", "world"]) print(json.dumps(result)) if __name__ == "__main__": main() ''' @pytest.fixture def sample_javascript_code(): return ''' import { useState, useEffect } from 'react'; import api from './api'; class DataManager { constructor(config) { this.config = config; this.cache = new Map(); } async fetchData(url) { if (this.cache.has(url)) { return this.cache.get(url); } const response = await fetch(url); const data = await response.json(); this.cache.set(url, data); return data; } clearCache() { this.cache.clear(); } } export function useCustomHook(initialValue) { const [value, setValue] = useState(initialValue); useEffect(() => { console.log('Value changed:', value); }, [value]); return [value, setValue]; } export default DataManager; ''' @pytest.fixture def sample_go_code(): return '''package main import ( "fmt" "os" ) type Config struct { Host string Port int } func (c *Config) Load() error { return nil } func NewProcessor(config Config) *Processor { return &Processor{config: config} } type Processor struct { config Config } func (p *Processor) Process(data string) error { fmt.Println("Processing:", data) return nil } func main() { config := Config{Host: "localhost", Port: 8080} processor := NewProcessor(config) err := processor.Process("test") if err != nil { os.Exit(1) } } ''' @pytest.fixture def sample_rust_code(): return '''use std::collections::HashMap; pub struct Config { host: String, port: u16, } impl Config { pub fn new(host: String, port: u16) -> Self { Config { host, port } } pub fn load(&self) -> Result<(), std::io::Error> { Ok(()) } } pub struct Processor { config: Config, cache: HashMap, } impl Processor { pub fn new(config: Config) -> Self { Processor { config, cache: HashMap::new(), } } pub fn process(&mut self, input: &str) -> Result { if let Some(cached) = self.cache.get(input) { return Ok(cached.clone()); } let result = format!("Processed: {}", input); self.cache.insert(input.to_string(), result.clone()); Ok(result) } } fn main() { let config = Config::new("localhost".to_string(), 8080); let mut processor = Processor::new(config); match processor.process("test") { Ok(result) => println!("{}", result), Err(e) => eprintln!("Error: {}", e), } } ''' @pytest.fixture def python_project(temp_project_dir: Path) -> Path: """Create a mock Python project structure.""" src_dir = temp_project_dir / "src" src_dir.mkdir(exist_ok=True) (src_dir / "__init__.py").write_text('"""Package init."""') (src_dir / "main.py").write_text(''' """Main module.""" def main(): print("Hello, World!") if __name__ == "__main__": main() ''') (src_dir / "utils.py").write_text(''' """Utility functions.""" def helper_function(): """A helper function.""" return "helper" class HelperClass: """Helper class.""" pass ''') return temp_project_dir @pytest.fixture def nodejs_project(temp_project_dir: Path) -> Path: """Create a mock Node.js project structure.""" (temp_project_dir / "package.json").write_text(''' { "name": "test-nodejs-project", "version": "1.0.0", "description": "Test Node.js project", "main": "index.js", "scripts": { "start": "node index.js", "test": "jest" }, "dependencies": { "express": "^4.18.0", "lodash": "^4.17.21" }, "devDependencies": { "jest": "^29.0.0" } } ''') (temp_project_dir / "index.js").write_text(''' const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(3000, () => { console.log('Server running on port 3000'); }); module.exports = app; ''') return temp_project_dir