Update docs and screenshots
CI / backend (pull_request) Canceled after 0s
CI / shell (pull_request) Canceled after 0s
CI / frontend (pull_request) Canceled after 0s
CI / arm64-smoke (pull_request) Canceled after 0s
CI / backend (push) Canceled after 0s
CI / shell (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
CI / arm64-smoke (push) Canceled after 0s

This commit is contained in:
2026-07-25 10:26:29 +02:00
parent d6cda77aaf
commit 1f110866f5
170 changed files with 24657 additions and 3 deletions
@@ -0,0 +1,25 @@
from __future__ import annotations
from pathlib import Path
from tuxdmx_midi_bridge.config import load_config
def test_load_config_prefers_env_token(monkeypatch, tmp_path: Path) -> None:
config_path = tmp_path / "config.yaml"
config_path.write_text(
"""
bridge_id: bridge-a
server:
url: "http://127.0.0.1:8000/api/v1/integrations/midi/bridge"
api_token: "yaml-token"
midi:
device_name: "USB MIDI"
""".strip(),
encoding="utf-8",
)
monkeypatch.setenv("TUXDMX_API_TOKEN", "env-token")
config = load_config(config_path)
assert config.server.api_token == "env-token"
assert config.bridge_id == "bridge-a"
@@ -0,0 +1,38 @@
from __future__ import annotations
from dataclasses import dataclass
from tuxdmx_midi_bridge.midi import MidiEventFilter, normalize_message
@dataclass
class FakeMessage:
type: str
channel: int
note: int | None = None
control: int | None = None
program: int | None = None
velocity: int | None = None
value: int | None = None
def test_normalize_note_on() -> None:
payload = normalize_message(
FakeMessage(type="note_on", channel=0, note=36, velocity=127),
"bridge-a",
"USB MIDI",
)
assert payload is not None
assert payload["message"]["type"] == "note_on"
assert payload["message"]["number"] == 36
assert payload["message"]["value"] == 127
def test_filter_suppresses_duplicates_and_rate_limits_control_change() -> None:
event_filter = MidiEventFilter(channel_filter=None, control_change_interval_ms=25, suppress_duplicate_values=True)
payload = {
"message": {"type": "control_change", "channel": 0, "number": 14, "value": 64}
}
assert event_filter.should_forward(payload) is True
assert event_filter.should_forward(payload) is False
@@ -0,0 +1,7 @@
from tuxdmx_midi_bridge.client import reconnect_delay
def test_reconnect_delay_is_bounded() -> None:
assert reconnect_delay(1, 3) == 3
assert reconnect_delay(20, 3) == 30