Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/pymax/types/domain/error.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ class MaxApiError(CamelModel):

:ivar error: Код ошибки.
:vartype error: str
:ivar message: Сообщение ошибки.
:vartype message: str
:ivar message: Сообщение ошибки, если сервер его прислал.
:vartype message: str | None
:ivar title: Заголовок ошибки.
:vartype title: str | None
:ivar localized_message: Локализованное сообщение ошибки.
:vartype localized_message: str | None
"""

error: str
message: str
message: str | None = None
title: str | None = None
localized_message: str | None = None
42 changes: 42 additions & 0 deletions tests/domain/test_error_models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
from __future__ import annotations

from pymax.types.domain import MaxApiError


def test_max_api_error_without_message_keeps_error_code() -> None:
"""Сервер иногда возвращает ошибочный кадр без поля ``message``
(например ``service.unavailable`` при временном сбое). Такой кадр
обязан разобраться — иначе реальный код ошибки подменяется
``unknown_error`` в ``App._build_api_error``."""
error = MaxApiError.model_validate({"error": "service.unavailable"})

assert error.error == "service.unavailable"
assert error.message is None
assert error.title is None
assert error.localized_message is None


def test_max_api_error_partial_message_fields() -> None:
error = MaxApiError.model_validate(
{"error": "user.not.found", "title": "Не найдено"}
)

assert error.error == "user.not.found"
assert error.title == "Не найдено"
assert error.message is None


def test_max_api_error_full_payload_unchanged() -> None:
error = MaxApiError.model_validate(
{
"error": "user.not.found",
"message": "user missing",
"title": "Not found",
"localizedMessage": "Пользователь не найден",
}
)

assert error.error == "user.not.found"
assert error.message == "user missing"
assert error.title == "Not found"
assert error.localized_message == "Пользователь не найден"
Loading