mirror of
https://github.com/Second-Hand-Friends/kleinanzeigen-bot.git
synced 2026-03-12 10:31:50 +01:00
feat: capture publish failure diagnostics with screenshot and logs (#802)
This commit is contained in:
@@ -87,7 +87,7 @@ def test_timeout_config_resolve_falls_back_to_default() -> None:
|
||||
def test_diagnostics_pause_requires_capture_validation() -> None:
|
||||
"""
|
||||
Unit: DiagnosticsConfig validator ensures pause_on_login_detection_failure
|
||||
requires login_detection_capture to be enabled.
|
||||
requires capture_on.login_detection to be enabled.
|
||||
"""
|
||||
minimal_cfg = {
|
||||
"ad_defaults": {"contact": {"name": "dummy", "zipcode": "12345"}},
|
||||
@@ -95,12 +95,98 @@ def test_diagnostics_pause_requires_capture_validation() -> None:
|
||||
"publishing": {"delete_old_ads": "BEFORE_PUBLISH", "delete_old_ads_by_title": False},
|
||||
}
|
||||
|
||||
valid_cfg = {**minimal_cfg, "diagnostics": {"login_detection_capture": True, "pause_on_login_detection_failure": True}}
|
||||
valid_cfg = {**minimal_cfg, "diagnostics": {"capture_on": {"login_detection": True}, "pause_on_login_detection_failure": True}}
|
||||
config = Config.model_validate(valid_cfg)
|
||||
assert config.diagnostics is not None
|
||||
assert config.diagnostics.pause_on_login_detection_failure is True
|
||||
assert config.diagnostics.login_detection_capture is True
|
||||
assert config.diagnostics.capture_on.login_detection is True
|
||||
|
||||
invalid_cfg = {**minimal_cfg, "diagnostics": {"login_detection_capture": False, "pause_on_login_detection_failure": True}}
|
||||
with pytest.raises(ValueError, match = "pause_on_login_detection_failure requires login_detection_capture to be enabled"):
|
||||
invalid_cfg = {**minimal_cfg, "diagnostics": {"capture_on": {"login_detection": False}, "pause_on_login_detection_failure": True}}
|
||||
with pytest.raises(ValueError, match = "pause_on_login_detection_failure requires capture_on.login_detection to be enabled"):
|
||||
Config.model_validate(invalid_cfg)
|
||||
|
||||
|
||||
def test_diagnostics_legacy_login_detection_capture_migration_when_capture_on_exists() -> None:
|
||||
"""
|
||||
Unit: Test that legacy login_detection_capture is removed but doesn't overwrite explicit capture_on.login_detection.
|
||||
"""
|
||||
minimal_cfg = {
|
||||
"ad_defaults": {"contact": {"name": "dummy", "zipcode": "12345"}},
|
||||
"login": {"username": "dummy", "password": "dummy"}, # noqa: S105
|
||||
}
|
||||
|
||||
# When capture_on.login_detection is explicitly set to False, legacy True should be ignored
|
||||
cfg_with_explicit = {
|
||||
**minimal_cfg,
|
||||
"diagnostics": {
|
||||
"login_detection_capture": True, # legacy key
|
||||
"capture_on": {"login_detection": False}, # explicit new key set to False
|
||||
},
|
||||
}
|
||||
config = Config.model_validate(cfg_with_explicit)
|
||||
assert config.diagnostics is not None
|
||||
assert config.diagnostics.capture_on.login_detection is False # explicit value preserved
|
||||
|
||||
|
||||
def test_diagnostics_legacy_publish_error_capture_migration_when_capture_on_exists() -> None:
|
||||
"""
|
||||
Unit: Test that legacy publish_error_capture is removed but doesn't overwrite explicit capture_on.publish.
|
||||
"""
|
||||
minimal_cfg = {
|
||||
"ad_defaults": {"contact": {"name": "dummy", "zipcode": "12345"}},
|
||||
"login": {"username": "dummy", "password": "dummy"}, # noqa: S105
|
||||
}
|
||||
|
||||
# When capture_on.publish is explicitly set to False, legacy True should be ignored
|
||||
cfg_with_explicit = {
|
||||
**minimal_cfg,
|
||||
"diagnostics": {
|
||||
"publish_error_capture": True, # legacy key
|
||||
"capture_on": {"publish": False}, # explicit new key set to False
|
||||
},
|
||||
}
|
||||
config = Config.model_validate(cfg_with_explicit)
|
||||
assert config.diagnostics is not None
|
||||
assert config.diagnostics.capture_on.publish is False # explicit value preserved
|
||||
|
||||
|
||||
def test_diagnostics_legacy_login_detection_capture_migration_when_capture_on_is_none() -> None:
|
||||
"""
|
||||
Unit: Test that legacy login_detection_capture is migrated when capture_on is None.
|
||||
"""
|
||||
minimal_cfg = {
|
||||
"ad_defaults": {"contact": {"name": "dummy", "zipcode": "12345"}},
|
||||
"login": {"username": "dummy", "password": "dummy"}, # noqa: S105
|
||||
}
|
||||
|
||||
cfg_with_null_capture_on = {
|
||||
**minimal_cfg,
|
||||
"diagnostics": {
|
||||
"login_detection_capture": True, # legacy key
|
||||
"capture_on": None, # capture_on is explicitly None
|
||||
},
|
||||
}
|
||||
config = Config.model_validate(cfg_with_null_capture_on)
|
||||
assert config.diagnostics is not None
|
||||
assert config.diagnostics.capture_on.login_detection is True # legacy value migrated
|
||||
|
||||
|
||||
def test_diagnostics_legacy_publish_error_capture_migration_when_capture_on_is_none() -> None:
|
||||
"""
|
||||
Unit: Test that legacy publish_error_capture is migrated when capture_on is None.
|
||||
"""
|
||||
minimal_cfg = {
|
||||
"ad_defaults": {"contact": {"name": "dummy", "zipcode": "12345"}},
|
||||
"login": {"username": "dummy", "password": "dummy"}, # noqa: S105
|
||||
}
|
||||
|
||||
cfg_with_null_capture_on = {
|
||||
**minimal_cfg,
|
||||
"diagnostics": {
|
||||
"publish_error_capture": True, # legacy key
|
||||
"capture_on": None, # capture_on is explicitly None
|
||||
},
|
||||
}
|
||||
config = Config.model_validate(cfg_with_null_capture_on)
|
||||
assert config.diagnostics is not None
|
||||
assert config.diagnostics.capture_on.publish is True # legacy value migrated
|
||||
|
||||
Reference in New Issue
Block a user