mirror of
https://github.com/maziggy/bambuddy.git
synced 2026-10-01 03:31:25 +02:00
New Features: - HMS error notifications with human-readable messages (853 error codes) - Plate not empty notification category (separate toggle in settings) - Module-friendly names: Print/Task, AMS/Filament, Nozzle/Extruder, etc. - Backup/restore now includes plate calibration reference images Fixes: - Plate calibration images now persist after restart in Docker - Telegram notifications no longer fail on error codes with underscores - Plate detection combo button: main toggles detection, chevron opens modal Tests: - Added HMS error code tests (10 tests) - Implemented Dashboard, FileManagerModal, UploadModal tests (previously skipped) - Added notification service tests for HMS errors and plate detection - Fixed AuthContext unmount memory leak in tests
77 lines
3.0 KiB
Python
77 lines
3.0 KiB
Python
"""Tests for HMS error code translations."""
|
|
|
|
import pytest
|
|
|
|
from backend.app.services.hms_errors import HMS_ERROR_DESCRIPTIONS, get_error_description
|
|
|
|
|
|
class TestHMSErrorDescriptions:
|
|
"""Tests for the HMS error descriptions dictionary."""
|
|
|
|
def test_dictionary_is_not_empty(self):
|
|
"""Verify the error descriptions dictionary has entries."""
|
|
assert len(HMS_ERROR_DESCRIPTIONS) > 0
|
|
|
|
def test_dictionary_has_expected_count(self):
|
|
"""Verify we have the expected number of error codes."""
|
|
# Should have 853 error codes from the frontend
|
|
assert len(HMS_ERROR_DESCRIPTIONS) == 853
|
|
|
|
def test_all_keys_are_valid_format(self):
|
|
"""Verify all keys follow the XXXX_YYYY format."""
|
|
import re
|
|
|
|
pattern = re.compile(r"^[0-9A-F]{4}_[0-9A-F]{4}$")
|
|
for code in HMS_ERROR_DESCRIPTIONS:
|
|
assert pattern.match(code), f"Invalid error code format: {code}"
|
|
|
|
def test_all_values_are_non_empty_strings(self):
|
|
"""Verify all descriptions are non-empty strings."""
|
|
for code, description in HMS_ERROR_DESCRIPTIONS.items():
|
|
assert isinstance(description, str), f"Description for {code} is not a string"
|
|
assert len(description) > 0, f"Description for {code} is empty"
|
|
|
|
|
|
class TestGetErrorDescription:
|
|
"""Tests for the get_error_description function."""
|
|
|
|
def test_returns_description_for_known_code(self):
|
|
"""Verify known error codes return their descriptions."""
|
|
# 0300_400C = "The task was canceled."
|
|
result = get_error_description("0300_400C")
|
|
assert result == "The task was canceled."
|
|
|
|
def test_returns_description_for_ams_error(self):
|
|
"""Verify AMS error codes return their descriptions."""
|
|
# 0700_8010 = AMS assist motor overloaded
|
|
result = get_error_description("0700_8010")
|
|
assert "AMS assist motor" in result
|
|
|
|
def test_returns_none_for_unknown_code(self):
|
|
"""Verify unknown error codes return None."""
|
|
result = get_error_description("XXXX_YYYY")
|
|
assert result is None
|
|
|
|
def test_handles_lowercase_input(self):
|
|
"""Verify function handles lowercase input."""
|
|
result = get_error_description("0300_400c")
|
|
assert result == "The task was canceled."
|
|
|
|
def test_handles_mixed_case_input(self):
|
|
"""Verify function handles mixed case input."""
|
|
result = get_error_description("0300_400C")
|
|
assert result == "The task was canceled."
|
|
|
|
def test_common_error_codes_have_descriptions(self):
|
|
"""Verify common error codes have descriptions."""
|
|
common_codes = [
|
|
"0300_4000", # Z axis homing failed
|
|
"0300_4006", # Nozzle clogged
|
|
"0300_8004", # Filament ran out
|
|
"0500_4001", # Failed to connect to Bambu Cloud
|
|
"0700_8010", # AMS assist motor overloaded
|
|
]
|
|
for code in common_codes:
|
|
result = get_error_description(code)
|
|
assert result is not None, f"Missing description for common code: {code}"
|