forensic-trails/tests/TEST_SUMMARY.md
overcuriousity 86359ec850 updates
2025-10-08 21:49:39 +02:00

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

  1. Isolation: Each test uses temporary directories and cleans up after itself
  2. Independence: Tests don't depend on each other and can run in any order
  3. Mocking: External dependencies (config, logging) are mocked where appropriate
  4. Real Database: Tests use actual SQLite databases to ensure realistic behavior
  5. Comprehensive: Tests cover success paths, error paths, and edge cases
  6. Fast: All 54 tests run in ~0.17 seconds

Adding New Tests

When adding new functionality:

  1. Add unit tests for individual functions
  2. Add integration tests for complex workflows
  3. Ensure cleanup in tearDown() methods
  4. Use descriptive test names that explain what is being tested
  5. Mock external dependencies appropriately
  6. Run coverage to ensure new code is tested
  7. Aim for >90% coverage on new modules

Dependencies

Tests require:

  • pytest - Test framework
  • pytest-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: Uses datetime.utcnow() which is deprecated. Should be updated to use datetime.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