6.2 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	ForensicTrails Test Suite
Overview
This directory contains comprehensive unit and integration tests for the ForensicTrails application.
Test Summary
- Total Tests: 54
 - Test Files: 4
 - Overall Coverage: 87%
 - Execution Time: ~0.17s
 - Status: ✅ All tests passing
 
Running Tests
Run all tests
python -m pytest tests/
Run specific test file
python -m pytest tests/test_database.py
python -m pytest tests/test_config.py
python -m pytest tests/test_logging.py
python -m pytest tests/test_case_manager.py
Run with verbose output
python -m pytest tests/ -v
Run with coverage report
python -m pytest tests/ --cov=forensictrails --cov-report=term-missing
Generate HTML coverage report
python -m pytest tests/ --cov=forensictrails --cov-report=html
# Open htmlcov/index.html in your browser
Run specific test class or method
python -m pytest tests/test_database.py::TestGetDbConnection
python -m pytest tests/test_case_manager.py::TestCaseManager::test_create_case
Test Files
1. test_config.py (8 tests)
Tests for the configuration module (forensictrails.utils.config).
Coverage: 100% ✓
Test Classes
- 
TestConfig (7 tests)
- Loading from valid JSON file
 - Handling non-existent files
 - Partial configuration with defaults
 - Empty configuration files
 - Extra keys in configuration
 - Default constructor behavior
 
 - 
TestConfigDataTypes (1 test)
- String and integer value handling
 
 
2. test_logging.py (9 tests)
Tests for the logging setup module (forensictrails.utils.logging).
Coverage: 100% ✓
Test Classes
- 
TestSetupLogging (8 tests)
- Log file creation
 - Nested directory creation
 - Handler addition (FileHandler, StreamHandler)
 - Log level configuration
 - Message logging
 - Formatter verification
 - Config fallback behavior
 - Multiple log level testing
 
 - 
TestLoggingIntegration (1 test)
- Multiple message logging integration
 
 
3. test_database.py (16 tests)
Comprehensive tests for the database module (forensictrails.db.database).
Coverage: 94% ✓
Test Classes
- 
TestGetDbConnection (2 tests)
- Connection creation and file creation
 
 - 
TestValidateDatabaseSchema (4 tests)
- Empty database validation
 - Incomplete database validation
 - Complete database validation
 - Non-existent database validation
 
 - 
TestCreateFreshDatabase (4 tests)
- Database file creation
 - All required tables creation
 - Return value verification
 - Clean path behavior
 
 - 
TestInitializeDatabase (3 tests)
- New database creation
 - Valid database preservation
 - Invalid database recreation
 
 - 
TestShowDbSchema (2 tests)
- Logging behavior
 - Exception handling
 
 - 
TestDatabaseIntegration (1 test)
- Complete workflow: create → use → corrupt → recreate
 
 
4. test_case_manager.py (21 tests)
Comprehensive tests for the case manager module (forensictrails.core.case_manager).
Coverage: 97% ✓
Test Classes
- 
TestCaseManager (19 tests)
- Initialization
 - Case creation (full and minimal)
 - Getting cases (existent and non-existent)
 - Listing cases (empty, multiple, filtered)
 - Search functionality
 - Combined filters
 - Case updates (valid, invalid, non-existent)
 - Status changes (close, archive)
 - Case deletion
 - Modified timestamp tracking
 
 - 
TestCaseManagerIntegration (2 tests)
- Full case lifecycle integration
 - Multiple cases workflow
 
 
Test Coverage Summary
| Module | Statements | Missing | Coverage | 
|---|---|---|---|
forensictrails.utils.config | 
16 | 0 | 100% ✓ | 
forensictrails.utils.logging | 
20 | 0 | 100% ✓ | 
forensictrails.core.case_manager | 
65 | 2 | 97% ✓ | 
forensictrails.db.database | 
65 | 4 | 94% ✓ | 
forensictrails.__main__ | 
17 | 17 | 0% (GUI entry) | 
| TOTAL | 183 | 23 | 87% | 
Uncovered Lines
database.py (4 lines)
- Line 10: Config fallback in 
get_db_connection()(uses mocked config) - Line 48: Config fallback in 
create_fresh_database()(uses explicit paths) - Line 69: Config fallback in 
initialize_database()(uses explicit paths) - Line 91: Debug logging (covered but mocked)
 
case_manager.py (2 lines)
- Lines 88, 93: Export/import functions (TODO - not implemented yet)
 
main.py (17 lines)
- Entry point for GUI application (requires PyQt6 GUI testing)
 
Test Design Principles
- Isolation: Each test uses temporary directories and cleans up after itself
 - Independence: Tests don't depend on each other and can run in any order
 - Mocking: External dependencies (config, logging) are mocked where appropriate
 - Real Database: Tests use actual SQLite databases to ensure realistic behavior
 - Comprehensive: Tests cover success paths, error paths, and edge cases
 - Fast: All 54 tests run in ~0.17 seconds
 
Adding New Tests
When adding new functionality:
- Add unit tests for individual functions
 - Add integration tests for complex workflows
 - Ensure cleanup in 
tearDown()methods - Use descriptive test names that explain what is being tested
 - Mock external dependencies appropriately
 - Run coverage to ensure new code is tested
 - Aim for >90% coverage on new modules
 
Dependencies
Tests require:
pytest- Test frameworkpytest-cov- Coverage reporting- Standard library: 
unittest,tempfile,sqlite3,json,logging 
Install test dependencies:
pip install pytest pytest-cov
Continuous Integration
These tests are designed to run in CI/CD pipelines. Example usage:
# Run tests with JUnit XML output for CI
python -m pytest tests/ --junitxml=test-results.xml
# Run with coverage and fail if below threshold
python -m pytest tests/ --cov=forensictrails --cov-fail-under=85
Known Issues
- DeprecationWarning in 
case_manager.py:60: Usesdatetime.utcnow()which is deprecated. Should be updated to usedatetime.now(datetime.UTC)in the future. 
Test Maintenance
- Tests are automatically run on code changes
 - Coverage reports are generated in 
htmlcov/directory - Keep test coverage above 85% for the project
 - Review and update tests when refactoring code