Add PipelineWarning(PronoteSyncError) to the canonical error hierarchy. This non-blocking warning type is used by the XMPP channel (and future channels) to signal recoverable failures without breaking the pipeline. - PipelineWarning inherits from PronoteSyncError, not Warning builtin - Constructor: (message, step=None) with recoverable=True - 8 unit tests covering inheritance, raising, catching, attributes Co-authored-by: opencode/test-engineer <test-engineer@agents.invalid> Co-authored-by: opencode/coder <coder@agents.invalid>
89 lines
2.2 KiB
Python
89 lines
2.2 KiB
Python
"""Tests unitaires pour la hiérarchie des erreurs du pipeline.
|
|
|
|
Ce module valide les classes d'erreur définies dans pronote_sync.errors.
|
|
"""
|
|
|
|
import pytest
|
|
|
|
from pronote_sync.errors import PipelineWarning, PronoteSyncError
|
|
|
|
|
|
def test_pipeline_warning_inherits_pronote_sync_error() -> None:
|
|
"""Vérifie que PipelineWarning hérite de PronoteSyncError.
|
|
|
|
:return: None
|
|
:rtype: None
|
|
"""
|
|
assert isinstance(PipelineWarning("msg"), PronoteSyncError)
|
|
|
|
|
|
def test_pipeline_warning_not_warning_builtin() -> None:
|
|
"""Vérifie que PipelineWarning n'hérite pas de la classe Warning intégrée.
|
|
|
|
:return: None
|
|
:rtype: None
|
|
"""
|
|
assert not isinstance(PipelineWarning("msg"), Warning)
|
|
|
|
|
|
def test_pipeline_warning_message_stored() -> None:
|
|
"""Vérifie que le message est stocké et accessible via str(exc).
|
|
|
|
:return: None
|
|
:rtype: None
|
|
"""
|
|
exc = PipelineWarning("msg")
|
|
assert str(exc) == "msg"
|
|
assert exc.args[0] == "msg"
|
|
|
|
|
|
def test_pipeline_warning_step_default_none() -> None:
|
|
"""Vérifie que step est None par défaut.
|
|
|
|
:return: None
|
|
:rtype: None
|
|
"""
|
|
assert PipelineWarning("msg").step is None
|
|
|
|
|
|
def test_pipeline_warning_step_set() -> None:
|
|
"""Vérifie que step peut être défini via le constructeur.
|
|
|
|
:return: None
|
|
:rtype: None
|
|
"""
|
|
assert PipelineWarning("msg", step="xmpp").step == "xmpp"
|
|
|
|
|
|
def test_pipeline_warning_recoverable_true() -> None:
|
|
"""Vérifie que recoverable est toujours True pour PipelineWarning.
|
|
|
|
:return: None
|
|
:rtype: None
|
|
"""
|
|
assert PipelineWarning("msg").recoverable is True
|
|
|
|
|
|
def test_pipeline_warning_is_raisable() -> None:
|
|
"""Vérifie que PipelineWarning peut être levée.
|
|
|
|
:return: None
|
|
:rtype: None
|
|
"""
|
|
with pytest.raises(PipelineWarning, match="msg"):
|
|
raise PipelineWarning("msg")
|
|
|
|
|
|
def test_pipeline_warning_caught_by_pronote_sync_error() -> None:
|
|
"""Vérifie qu'une PipelineWarning est attrapée par un except PronoteSyncError.
|
|
|
|
:return: None
|
|
:rtype: None
|
|
"""
|
|
try:
|
|
raise PipelineWarning("msg")
|
|
except PronoteSyncError:
|
|
assert True
|
|
else:
|
|
raise AssertionError("PipelineWarning should have been caught by PronoteSyncError")
|