import sys import types from aare.gui.threads.daq_worker import DAQWorker jfjoch_client_module = types.ModuleType("jfjoch_client") jfjoch_client_module.ScanResult = object jfjoch_client_module.ScanResultImagesInner = object jfjoch_client_models_module = types.ModuleType("jfjoch_client.models") jfjoch_client_scan_result_module = types.ModuleType("jfjoch_client.models.scan_result") jfjoch_client_scan_result_module.ScanResult = object sys.modules.setdefault("jfjoch_client", jfjoch_client_module) sys.modules.setdefault("jfjoch_client.models", jfjoch_client_models_module) sys.modules.setdefault("jfjoch_client.models.scan_result", jfjoch_client_scan_result_module) def test_is_critical_uses_body_flag_when_present(): assert DAQWorker._is_critical({"critical": False}) is False assert DAQWorker._is_critical({"critical": True}) is True def test_is_critical_fails_safe_when_missing_or_unparseable(): assert DAQWorker._is_critical({}) is True assert DAQWorker._is_critical(None) is True def test_classify_reply_error_builds_structured_error_info(): info = DAQWorker._classify_reply_error( status=422, err_msg="mount failed", body_json={ "critical": False, "code": "MOUNTING_FAILED", "exception_class": "MountingFailed", "message": "mount failed", "context": {"sample_id": 7}, }, ) assert info.critical is False assert info.code == "MOUNTING_FAILED" assert info.exception_class == "MountingFailed" assert info.message == "mount failed" assert info.context == {"sample_id": 7} def test_classify_reply_error_fails_safe_defaults(): info = DAQWorker._classify_reply_error(status=500, err_msg="broken", body_json=None) assert info.critical is True assert info.code is None assert info.exception_class is None assert info.message == "broken" assert info.context == {} def test_is_auth_error_code_detects_auth_codes_only(): assert DAQWorker._is_auth_error_code("INVALID_TOKEN") is True assert DAQWorker._is_auth_error_code("SESSION_ALREADY_ACTIVE") is True assert DAQWorker._is_auth_error_code("MOUNTING_FAILED") is False assert DAQWorker._is_auth_error_code(None) is False