from __future__ import annotations from garmin_coach_clone.redact import redact def test_redact_preserves_workout_schema_ids() -> None: data = { "stepType": {"stepTypeId": 1, "stepTypeKey": "warmup"}, "targetType": {"workoutTargetTypeId": 1, "workoutTargetTypeKey": "no.target"}, "endCondition": {"conditionTypeId": 2, "conditionTypeKey": "time"}, } assert redact(data) == data def test_redact_private_account_and_device_fields() -> None: data = { "email": "rider@example.com", "displayName": "Rider", "unitId": 123456, "ownerId": 999, "deviceId": 888, } redacted = redact(data) assert redacted["email"] == "" assert redacted["displayName"] == "" assert redacted["unitId"] == "" assert redacted["ownerId"] == "" assert redacted["deviceId"] == "" def test_redact_sensitive_values_inside_strings() -> None: data = { "message": "Contact rider@example.com with Authorization: Bearer abc.def.ghi", } redacted = redact(data) assert "rider@example.com" not in redacted["message"] assert "abc.def.ghi" not in redacted["message"] assert "" in redacted["message"] assert "Bearer " in redacted["message"]