Moved 25 files from root to organized subdirectories while keeping essential scripts (install.sh, setup.sh, start*.sh, stop*.sh) in root. ## Changes: ### New Directory Structure: - Created `/scripts/` for utility scripts - Created `/docs/guides/` for user guides - Created `/docs/development/` for dev documentation - Created `/docs/archive/` for historical/legacy docs ### Moved Files: **To `/scripts/` (7 files):** - backup_claude_os.sh - restore_claude_os.sh - run_tests.sh - setup_native.sh - start_mcp_server.sh - start_redis_workers.sh - entrypoint.sh **To `/docs/guides/` (7 files):** - AUTH_SETUP.md - BACKUP_RESTORE_GUIDE.md - HOOK_SETUP_QUICK_START.md - SHARING_GUIDE.md - START_SCRIPTS_GUIDE.md - PORTS_GUIDE.md - WHAT_IS_CLAUDE_OS.md **To `/docs/development/` (4 files):** - COMPREHENSIVE_REVIEW.md - SECURITY_FIXES.md - CLAUDE_OS_DEVELOPER_GUIDE.md - PROJECT_SETUP_AND_COMMANDS.md **To `/docs/archive/` (10 files):** - HYBRID_INDEXING_COMPLETE.md - INITIALIZE_PROJECT_HOOKS_FIX.md - INSTALL_ENHANCEMENTS.md - INSTALL_FIXES.md - PISTN_TEST_RESULTS.md - SESSION_SUMMARY.md - TEST_COVERAGE.md - TEST_RESULTS.md - TESTING_STATUS.md - README_TESTING.md ### Updated References: **Fixed broken documentation links in:** - docs/QUICK_REFERENCE.md - docs/PRODUCTION_DEPLOYMENT.md - docs/SCRIPTS_GUIDE.md - docs/development/SECURITY_FIXES.md - docs/guides/BACKUP_RESTORE_GUIDE.md - docs/development/CLAUDE_OS_DEVELOPER_GUIDE.md - tests/TESTING_GUIDE.md - tests/TEST_COVERAGE.md **Script references updated to:** - `./scripts/backup_claude_os.sh` - `./scripts/restore_claude_os.sh` - `./scripts/run_tests.sh` - `./scripts/setup_native.sh` - `./scripts/start_mcp_server.sh` - `./scripts/start_redis_workers.sh` ### Remaining in Root (9 essential files): - install.sh - setup.sh - start.sh - start_all_services.sh - stop_all_services.sh - restart_services.sh - README.md - CLAUDE.md - requirements.txt (+ GEMINI_DIAGRAM_PROMPT.md) ## Benefits: ✅ Cleaner root directory (9 files vs 34 files) ✅ Organized documentation by purpose ✅ Scripts grouped in dedicated directory ✅ Essential startup commands still in root ✅ All references updated and verified ✅ No broken links Version: 2.0.2
6.4 KiB
6.4 KiB
Claude OS Testing Guide
🎯 Overview
This guide provides comprehensive information about testing Claude OS, a production-grade RAG system.
📋 Table of Contents
🚀 Quick Start
Prerequisites
- Python 3.11+ with pytest
- Ollama running locally (for integration tests)
Run All Tests
./scripts/run_tests.sh
That's it! The script will:
- ✅ Check dependencies
- ✅ Create test database if needed
- ✅ Run all tests
- ✅ Show coverage report
📁 Test Structure
tests/
├── __init__.py # Test package
├── conftest.py # Shared fixtures
├── pytest.ini # Pytest configuration
├── README.md # Quick reference
├── TEST_COVERAGE.md # Coverage details
├── TESTING_GUIDE.md # This file
│
├── test_pg_vector.py # Vector operations
├── test_rag_engine.py # RAG engine
├── test_embeddings.py # Embedding generation
├── test_document_processing.py # Document ingestion
├── test_api.py # API endpoints
└── test_pg_manager.py # Database operations
Test Categories
| Category | Marker | Description |
|---|---|---|
| Unit | @pytest.mark.unit |
Fast, isolated tests |
| Integration | @pytest.mark.integration |
Tests with external services |
| Vector | @pytest.mark.vector |
Vector operations |
| RAG | @pytest.mark.rag |
RAG engine tests |
| API | @pytest.mark.api |
API endpoint tests |
| Embeddings | @pytest.mark.embeddings |
Embedding generation |
| Slow | @pytest.mark.slow |
Tests >5 seconds |
🏃 Running Tests
Basic Commands
# All tests
./scripts/run_tests.sh
# With coverage report
./scripts/run_tests.sh --coverage
# Verbose output
./scripts/run_tests.sh --verbose
By Category
# Unit tests only (fast)
./scripts/run_tests.sh --unit
# Integration tests
./scripts/run_tests.sh --integration
# Vector operations
./scripts/run_tests.sh --vector
# RAG engine
./scripts/run_tests.sh --rag
# API endpoints
./scripts/run_tests.sh --api
Advanced Usage
# Specific test file
pytest tests/test_pg_vector.py
# Specific test function
pytest tests/test_pg_vector.py::TestPGVectorOperations::test_vector_storage
# Stop on first failure
pytest -x
# Run last failed tests
pytest --lf
# Run tests matching pattern
pytest -k "vector"
✍️ Writing Tests
Test Template
"""
Tests for [component name].
"""
import pytest
@pytest.mark.unit # or integration, vector, etc.
class TestMyComponent:
"""Test [component] functionality."""
def test_basic_functionality(self, sample_kb, clean_db):
"""Test that [feature] works correctly."""
# Arrange
input_data = "test input"
# Act
result = my_function(input_data)
# Assert
assert result == expected_output
assert result.status == "success"
Using Fixtures
def test_with_fixtures(self, sample_kb, sample_documents, clean_db):
"""Test using multiple fixtures."""
# sample_kb: Pre-created knowledge base
# sample_documents: 5 documents with embeddings
# clean_db: Clean database connection
result = query_kb(sample_kb["name"], "test query")
assert len(result["sources"]) > 0
Mocking External Services
from unittest.mock import patch, MagicMock
@patch('app.core.rag_engine.Ollama')
def test_with_mock_llm(self, mock_llm):
"""Test with mocked LLM."""
# Setup mock
mock_instance = MagicMock()
mock_instance.chat.return_value.message.content = "Test response"
mock_llm.return_value = mock_instance
# Test
result = my_function()
assert result == "Test response"
Best Practices
- One assertion per test (when possible)
- Descriptive test names (
test_vector_similarity_with_empty_kb) - Use fixtures for common setup
- Mock external services in unit tests
- Test edge cases (empty input, invalid data, etc.)
- Clean up after tests (use fixtures with cleanup)
🔄 CI/CD Integration
GitHub Actions
Tests run automatically on:
- ✅ Push to
mainordevelop - ✅ Pull requests
- ✅ Manual workflow dispatch
See .github/workflows/tests.yml for configuration.
Local Pre-commit Hook
# .git/hooks/pre-commit
#!/bin/bash
./scripts/run_tests.sh --unit
if [ $? -ne 0 ]; then
echo "Tests failed! Commit aborted."
exit 1
fi
Make it executable:
chmod +x .git/hooks/pre-commit
🐛 Troubleshooting
Ollama Connection Errors
# Check Ollama is running
curl http://localhost:11434/api/tags
# Start Ollama
ollama serve
Import Errors
# Ensure you're in project root
cd /path/to/claude-os
# Install dependencies
pip install -r requirements.txt
Fixture Not Found
Make sure conftest.py is in the tests/ directory and contains the fixture definition.
Test Database Pollution
# Drop and recreate test database
dropdb codeforge_test
createdb codeforge_test
psql -d codeforge_test -c "CREATE EXTENSION vector"
psql -d codeforge_test -f app/core/schema.sql
📊 Coverage Reports
Generate HTML Report
./scripts/run_tests.sh --coverage
open htmlcov/index.html # macOS
xdg-open htmlcov/index.html # Linux
Coverage Goals
- Overall: 85%
- Critical paths: 90%+
- New code: 80%+
🎓 Learning Resources
📝 Checklist for New Features
- Write tests first (TDD)
- Use appropriate markers
- Add fixtures if reusable
- Test happy path
- Test edge cases
- Test error handling
- Run
./scripts/run_tests.sh - Verify >80% coverage
- Update documentation
Remember: Good tests are the foundation of reliable software! 🚀