package tui import ( "net/http" "net/http/httptest" "os" "strings" "testing" "time" "billboard/internal/server" "billboard/internal/state" ) func TestFetchDecodesPixels(t *testing.T) { st := state.New(8, 4) if err := st.SetPixel(3, 2, 9); err != nil { t.Fatal(err) } st.AddMessage("test msg") srv := httptest.NewServer(server.New(st, server.Config{}).Handler()) defer srv.Close() d := &Display{server: srv.URL, client: &http.Client{Timeout: 5 * time.Second}} if err := d.fetch(); err != nil { t.Fatal(err) } if got := d.state.Pixels[2][3]; got != 9 { t.Fatalf("pixel = %d, want 9; state=%+v", got, d.state) } if len(d.state.Messages) != 1 || d.state.Messages[0].Text != "test msg" { t.Fatalf("messages = %+v", d.state.Messages) } f, err := os.CreateTemp(t.TempDir(), "render") if err != nil { t.Fatal(err) } defer f.Close() d.out = f d.render() data, err := os.ReadFile(f.Name()) if err != nil { t.Fatal(err) } if !strings.Contains(string(data), "91") && !strings.Contains(string(data), "101") { t.Fatalf("render output lacks color-9 SGR code; block count: %d", strings.Count(string(data), "▀")) } }