Files
chore/backend/tests/test_deletion_config.py
Ryan Kegel 060b2953fa
All checks were successful
Gitea Actions Demo / build-and-push (push) Successful in 49s
Add account deletion scheduler and comprehensive tests
- Implemented account deletion scheduler in `account_deletion_scheduler.py` to manage user deletions based on a defined threshold.
- Added logging for deletion processes, including success and error messages.
- Created tests for deletion logic, including edge cases, retry logic, and integration tests to ensure complete deletion workflows.
- Ensured that deletion attempts are tracked and that users are marked for manual intervention after exceeding maximum attempts.
- Implemented functionality to check for interrupted deletions on application startup and retry them.
2026-02-08 22:42:36 -05:00

101 lines
4.5 KiB
Python

import os
import pytest
from unittest.mock import patch
import sys
# Set up path and environment before imports
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
os.environ['DB_ENV'] = 'test'
# Now import the module to test
from config import deletion_config
class TestDeletionConfig:
"""Tests for deletion configuration module."""
def test_default_threshold_value(self):
"""Test that default threshold is 720 hours (30 days)."""
# Reset to default by reloading module
import importlib
with patch.dict(os.environ, {}, clear=True):
os.environ['DB_ENV'] = 'test'
importlib.reload(deletion_config)
assert deletion_config.ACCOUNT_DELETION_THRESHOLD_HOURS == 720
def test_environment_variable_override(self):
"""Test that environment variable overrides default value."""
import importlib
with patch.dict(os.environ, {'ACCOUNT_DELETION_THRESHOLD_HOURS': '168', 'DB_ENV': 'test'}):
importlib.reload(deletion_config)
assert deletion_config.ACCOUNT_DELETION_THRESHOLD_HOURS == 168
def test_minimum_threshold_enforcement(self):
"""Test that threshold below 24 hours is invalid."""
with pytest.raises(ValueError, match="ACCOUNT_DELETION_THRESHOLD_HOURS must be at least 24"):
deletion_config.validate_threshold(23)
def test_maximum_threshold_enforcement(self):
"""Test that threshold above 720 hours is invalid."""
with pytest.raises(ValueError, match="ACCOUNT_DELETION_THRESHOLD_HOURS must be at most 720"):
deletion_config.validate_threshold(721)
def test_invalid_threshold_negative(self):
"""Test that negative threshold values are invalid."""
with pytest.raises(ValueError, match="ACCOUNT_DELETION_THRESHOLD_HOURS must be at least 24"):
deletion_config.validate_threshold(-1)
def test_invalid_threshold_zero(self):
"""Test that zero threshold is invalid."""
with pytest.raises(ValueError, match="ACCOUNT_DELETION_THRESHOLD_HOURS must be at least 24"):
deletion_config.validate_threshold(0)
def test_valid_threshold_24_hours(self):
"""Test that 24 hours (minimum) is valid."""
# Should not raise
deletion_config.validate_threshold(24)
def test_valid_threshold_720_hours(self):
"""Test that 720 hours (maximum) is valid."""
# Should not raise
deletion_config.validate_threshold(720)
def test_valid_threshold_168_hours(self):
"""Test that 168 hours (7 days) is valid."""
# Should not raise
deletion_config.validate_threshold(168)
def test_warning_for_threshold_below_168_hours(self, caplog):
"""Test that setting threshold below 168 hours logs a warning."""
import logging
caplog.set_level(logging.WARNING)
deletion_config.validate_threshold(100)
assert any("below the recommended minimum" in record.message for record in caplog.records)
def test_no_warning_for_threshold_above_168_hours(self, caplog):
"""Test that threshold above 168 hours doesn't log warning."""
import logging
caplog.set_level(logging.WARNING)
deletion_config.validate_threshold(200)
# Should not have the specific warning
assert not any("below the recommended minimum" in record.message for record in caplog.records)
def test_threshold_constants_defined(self):
"""Test that MIN and MAX threshold constants are defined."""
assert deletion_config.MIN_THRESHOLD_HOURS == 24
assert deletion_config.MAX_THRESHOLD_HOURS == 720
def test_invalid_environment_variable_non_numeric(self):
"""Test that non-numeric environment variable raises error."""
import importlib
with patch.dict(os.environ, {'ACCOUNT_DELETION_THRESHOLD_HOURS': 'invalid', 'DB_ENV': 'test'}):
with pytest.raises(ValueError, match="ACCOUNT_DELETION_THRESHOLD_HOURS must be a valid integer"):
importlib.reload(deletion_config)
def test_environment_variable_with_decimal(self):
"""Test that decimal environment variable raises error."""
import importlib
with patch.dict(os.environ, {'ACCOUNT_DELETION_THRESHOLD_HOURS': '24.5', 'DB_ENV': 'test'}):
with pytest.raises(ValueError, match="ACCOUNT_DELETION_THRESHOLD_HOURS must be a valid integer"):
importlib.reload(deletion_config)