"""Legacy recovery jobs must drain without database, queue, or email access."""
import builtins
from uuid import uuid4

import pytest
from src.workers.tasks.pre_registration import (
    scan_abandoned_pre_registrations,
    send_pre_registration_recovery_email,
)


@pytest.mark.asyncio
@pytest.mark.parametrize("task", ["scanner", "sender"])
async def test_legacy_recovery_jobs_have_no_side_effects(monkeypatch, task):
    original_import = builtins.__import__

    def guarded_import(name, *args, **kwargs):
        if name in {
            "src.core.database",
            "src.workers.enqueue",
            "src.integrations.email_provider",
        }:
            pytest.fail(f"Disabled recovery job accessed {name}")
        return original_import(name, *args, **kwargs)

    def forbidden_db_factory():
        pytest.fail("Disabled recovery job accessed the database")

    monkeypatch.setattr(builtins, "__import__", guarded_import)
    ctx = {"db_factory": forbidden_db_factory}
    for _ in range(2):  # Replayed jobs must also remain harmless.
        if task == "scanner":
            result = await scan_abandoned_pre_registrations(ctx)
            assert result == {"status": "disabled", "queued": 0}
        else:
            result = await send_pre_registration_recovery_email(
                ctx, pending_registration_id=str(uuid4())
            )
            assert result == {"status": "disabled"}
