@@ -88,6 +88,76 @@ func TestSubscribeEventsContextCancelClosesEvents(t *testing.T) {
91+func TestSendMessageAcceptsStatusAccepted(t *testing.T) {
94+ srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
95+ w.WriteHeader(http.StatusAccepted)
99+ c := captureClient(t, srv)
100+ require.NoError(t, c.SendMessage(context.Background(), "ws1", "sess1", "", "hello"))
103+func TestSendMessageAcceptsStatusOK(t *testing.T) {
106+ srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
107+ w.WriteHeader(http.StatusOK)
111+ c := captureClient(t, srv)
112+ require.NoError(t, c.SendMessage(context.Background(), "ws1", "sess1", "", "hello"))
115+func TestSendMessageDecodesErrorBody(t *testing.T) {
118+ srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
119+ w.WriteHeader(http.StatusBadRequest)
120+ _ = json.NewEncoder(w).Encode(proto.Error{Message: "session id is required"})
124+ c := captureClient(t, srv)
125+ err := c.SendMessage(context.Background(), "ws1", "", "", "hello")
126+ require.Error(t, err)
127+ require.Contains(t, err.Error(), "status code 400")
128+ require.Contains(t, err.Error(), "session id is required")
131+func TestSendMessageFallsBackOnMalformedErrorBody(t *testing.T) {
134+ srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
135+ w.WriteHeader(http.StatusInternalServerError)
136+ _, _ = w.Write([]byte("not json"))
140+ c := captureClient(t, srv)
141+ err := c.SendMessage(context.Background(), "ws1", "sess1", "", "hello")
142+ require.Error(t, err)
143+ require.Contains(t, err.Error(), "status code 500")
144+ require.NotContains(t, err.Error(), "not json")
147+func TestSendMessageFallsBackOnEmptyErrorBody(t *testing.T) {
150+ srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
151+ w.WriteHeader(http.StatusInternalServerError)
155+ c := captureClient(t, srv)
156+ err := c.SendMessage(context.Background(), "ws1", "sess1", "", "hello")
157+ require.Error(t, err)
158+ require.Contains(t, err.Error(), "status code 500")
91func marshalSSEPayload(t *testing.T) []byte {
161func marshalSSEPayload(t *testing.T) []byte {
92 t.Helper()
162 t.Helper()