From 4b8a5349206e97e9040ad2ff4af8d62ca992d719 Mon Sep 17 00:00:00 2001 From: Snider Date: Fri, 17 Apr 2026 18:44:19 +0100 Subject: [PATCH] Harden screen query failure handling --- pkg/display/api.go | 5 ++++- pkg/display/api_test.go | 22 ++++++++++++++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/pkg/display/api.go b/pkg/display/api.go index ce01a907..5f91ad77 100644 --- a/pkg/display/api.go +++ b/pkg/display/api.go @@ -90,10 +90,13 @@ func failedQuery(method, query string) error { func (s *Service) GetScreens() []*Screen { r := s.Core().QUERY(screen.QueryAll{}) if !r.OK { - return nil + return []*Screen{} } screens, ok := r.Value.([]screen.Screen) if !ok { + return []*Screen{} + } + if len(screens) == 0 { return nil } result := make([]*Screen, 0, len(screens)) diff --git a/pkg/display/api_test.go b/pkg/display/api_test.go index 37ad023e..dca0c5c0 100644 --- a/pkg/display/api_test.go +++ b/pkg/display/api_test.go @@ -153,6 +153,20 @@ func TestDisplayAPI_GetScreens_Good(t *testing.T) { assert.Equal(t, 1920, screens[0].Width) } +func TestDisplayAPI_GetScreens_Empty(t *testing.T) { + svc, c := newTestDisplayAPIService(t) + c.RegisterQuery(func(_ *core.Core, q core.Query) core.Result { + switch q.(type) { + case screen.QueryAll: + return core.Result{Value: []screen.Screen{}, OK: true} + default: + return core.Result{} + } + }) + + assert.Nil(t, svc.GetScreens()) +} + func TestDisplayAPI_GetScreens_Bad(t *testing.T) { svc, c := newTestDisplayAPIService(t) c.RegisterQuery(func(_ *core.Core, q core.Query) core.Result { @@ -164,7 +178,9 @@ func TestDisplayAPI_GetScreens_Bad(t *testing.T) { } }) - assert.Nil(t, svc.GetScreens()) + screens := svc.GetScreens() + require.NotNil(t, screens) + assert.Empty(t, screens) } func TestDisplayAPI_GetScreens_Ugly(t *testing.T) { @@ -178,7 +194,9 @@ func TestDisplayAPI_GetScreens_Ugly(t *testing.T) { } }) - assert.Nil(t, svc.GetScreens()) + screens := svc.GetScreens() + require.NotNil(t, screens) + assert.Empty(t, screens) } func TestDisplayAPI_GetScreen_BadType(t *testing.T) {