All checks were successful
Gitea Actions Demo / build-and-push (push) Successful in 49s
- 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.
101 lines
4.5 KiB
Python
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)
|