Files
bambuddy/backend/tests/unit/test_slot_preset_key.py
maziggy 87a5aa36e9 fix(ams): HT slot shows "Generic" after configuring custom preset (#1053)
After configuring an AMS-HT slot with a custom cloud preset, the slot
  card and Configure modal kept showing "Generic PLA" even though the
  printer and slicer had the correct preset. The `/slot-presets` response
  keyed HT entries at `ams_id * 4 + tray_id = 512`, but frontend lookups
  used `ams_id` directly (128 on PrintersPage via getGlobalTrayId, 64 on
  SpoolBuddy via a one-off formula). All three agreed for regular AMS, so
  the mismatch only surfaced on HT — the saved preset never reached the
  UI and the render fell through to `tray.tray_type`.

  Backend now keys via a helper that mirrors frontend `getGlobalTrayId`.
  SpoolBuddy's AMS page switches to the shared helper. Regression test
  covers regular, HT, and external slot keys.
2026-04-20 17:32:34 +02:00

31 lines
1.1 KiB
Python

"""Unit tests for slot-preset key derivation.
Regression coverage for #1053: the backend's get_slot_presets response
must use the same keying scheme as the frontend's getGlobalTrayId
(amsHelpers.ts) so that AMS-HT mappings round-trip correctly.
"""
from backend.app.api.routes.printers import _slot_preset_key
def test_regular_ams_uses_global_tray_id():
assert _slot_preset_key(0, 0) == 0
assert _slot_preset_key(0, 3) == 3
assert _slot_preset_key(1, 1) == 5
assert _slot_preset_key(2, 2) == 10
assert _slot_preset_key(3, 3) == 15
def test_ams_ht_keyed_by_ams_id():
# AMS-HT is single-slot and shares its global tray id with the unit id;
# frontend getGlobalTrayId(amsId, 0, false) returns amsId for 128-135.
assert _slot_preset_key(128, 0) == 128
assert _slot_preset_key(129, 0) == 129
assert _slot_preset_key(135, 0) == 135
def test_external_spool_uses_multiplied_id():
# External (ams_id=255) matches PrintersPage lookup: 255 * 4 + tray_id.
assert _slot_preset_key(255, 0) == 1020
assert _slot_preset_key(255, 1) == 1021