diff --git a/pkg/service/soundtouchweb/handler_stereopair.go b/pkg/service/soundtouchweb/handler_stereopair.go index a048f841..39397635 100644 --- a/pkg/service/soundtouchweb/handler_stereopair.go +++ b/pkg/service/soundtouchweb/handler_stereopair.go @@ -65,6 +65,15 @@ func (app *WebApp) HandleGetStereoPair(w http.ResponseWriter, r *http.Request) { return } + if !stereoPairCapable(conn.DeviceInfo) { + app.writeStereoPairResult(w, conn.DeviceInfo, stereopair.Result{ + Operation: stereopair.OperationInspect, + Status: stereopair.StatusSucceeded, + }, nil) + + return + } + result, err := app.StereoPairs.Inspect(host) app.writeStereoPairResult(w, conn.DeviceInfo, result, err) } diff --git a/pkg/service/soundtouchweb/handler_stereopair_test.go b/pkg/service/soundtouchweb/handler_stereopair_test.go index a773df07..844ad466 100644 --- a/pkg/service/soundtouchweb/handler_stereopair_test.go +++ b/pkg/service/soundtouchweb/handler_stereopair_test.go @@ -17,6 +17,7 @@ import ( ) type fakeStereoPairLifecycle struct { + inspectCalls int inspectResult stereopair.Result inspectErr error createResult stereopair.Result @@ -32,6 +33,7 @@ type fakeStereoPairLifecycle struct { } func (f *fakeStereoPairLifecycle) Inspect(string) (stereopair.Result, error) { + f.inspectCalls++ return f.inspectResult, f.inspectErr } @@ -109,6 +111,31 @@ func TestHandleGetStereoPairReportsStandaloneCapableSpeaker(t *testing.T) { } } +func TestHandleGetStereoPairSkipsUnsupportedModel(t *testing.T) { + fake := &fakeStereoPairLifecycle{} + app := NewWebApp() + app.StereoPairs = fake + app.AddDevice("192.0.2.30", webtypes.NewDeviceConnection(nil, &models.DeviceInfo{ + DeviceID: "st30-id", + Name: "Living Room", + Type: "SoundTouch 30", + IPAddress: "192.0.2.30", + })) + + request := withChiParams(httptest.NewRequest(http.MethodGet, + "/api/control/devices/192.0.2.30/stereo-pair", nil), map[string]string{"id": "192.0.2.30"}) + response := httptest.NewRecorder() + app.HandleGetStereoPair(response, request) + + payload := decodeStereoPairAPIResponse(t, response) + if response.Code != http.StatusOK || !payload.Success || payload.Data.Capable || payload.Data.Paired { + t.Fatalf("unexpected unsupported-model response: status=%d payload=%+v", response.Code, payload) + } + if fake.inspectCalls != 0 { + t.Fatalf("stereo lifecycle Inspect calls = %d, want 0", fake.inspectCalls) + } +} + func TestHandleGetStereoPairMapsUnavailableSpeakerToBadGateway(t *testing.T) { fake := &fakeStereoPairLifecycle{ inspectResult: stereopair.Result{