Files
Tobias GesellchenandClaude Opus 4.8 603765b644 test(http-client): broaden speaker-contract coverage from recordings (refs #451)
Build the regression net the API route layout note calls for, before any
route refactoring: mine real recorded speaker traffic (Bose_Lisa UA) into a
coverage checklist and fill the high-priority, dependency-free gaps.

- COVERAGE.md: inventory of frozen speaker routes (method + status) mapped to
  covering .http files, with the remaining gaps classified by priority.
- New flows, all asserting status/content-type/structure with the firmware UA:
  - GET  /v1/auth                              (app-key probe)
  - POST /v1/scmudc/{deviceId}                 (telemetry upload)
  - GET  /core02/.../orion/station             (Orion custom-stream adapter)
  - GET  /custom/v1/playback/{encodedURL}      (LOCAL_INTERNET_RADIO / ding)
  - POST /bmx/tunein/v1/report                 (STOP -> {}, START -> nextReportIn)
  - GET  /media/aftertouch-ding.wav            (binary: status + content-type)
  - GET  /media/bmx-icons/{provider}/{file}    (binary: status + content-type)

All request/response values use placeholder / RFC-5737 data; no recorded
bodies are committed. make test-http-client: 57 requests, 0 failed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 19:11:24 +02:00

18 lines
767 B
HTTP

### GET /media/bmx-icons/{provider}/{file} (BMX source icon)
###
### Frozen route. The BMX registry advertises {MEDIA_SERVER}/bmx-icons; the
### speaker fetches source/provider icons from this static base (served by
### HandleMedia from the embedded asset tree). Binary body, so assert status +
### content type only (never commit the bytes).
GET {{host}}/media/bmx-icons/tunein/monochromePng.png
User-Agent: Bose_Lisa/27.0.6
Accept: */*
> {%
client.test("Icon served as image/png 200", function() {
client.assert(response.status === 200, "Response status is not 200, got " + response.status);
client.assert(response.contentType.mimeType === "image/png",
"Expected image/png, got '" + response.contentType.mimeType + "'");
});
%}