package mila import ( "encoding/json" "net/http" "net/http/httptest" "net/url" "testing" ) func TestHandlerSetAndGetContent(t *testing.T) { handler := NewHandler(DefaultConfig(), NewMemoryStore()) params := url.Values{} params.Set("route", "3") params.Set("str", "Гостиный двор - Gostiny dvor") params.Set("tpl_name", "Гостиный двор") req := httptest.NewRequest(http.MethodGet, "/set-content?"+params.Encode(), nil) rec := httptest.NewRecorder() handler.ServeHTTP(rec, req) if rec.Code != http.StatusOK { t.Fatalf("set-content status=%d body=%s", rec.Code, rec.Body.String()) } req = httptest.NewRequest(http.MethodGet, "/get-content", nil) rec = httptest.NewRecorder() handler.ServeHTTP(rec, req) if rec.Code != http.StatusOK { t.Fatalf("get-content status=%d body=%s", rec.Code, rec.Body.String()) } var state ContentState if err := json.NewDecoder(rec.Body).Decode(&state); err != nil { t.Fatalf("decode response: %v", err) } if state.Route != "3" || state.Text != "Гостиный двор - Gostiny dvor" || state.Template != "Гостиный двор" { t.Fatalf("unexpected state: %+v", state) } } func TestHandlerGetBeforeSetReturns503(t *testing.T) { handler := NewHandler(DefaultConfig(), NewMemoryStore()) req := httptest.NewRequest(http.MethodGet, "/get-content", nil) rec := httptest.NewRecorder() handler.ServeHTTP(rec, req) if rec.Code != http.StatusServiceUnavailable { t.Fatalf("status=%d body=%s", rec.Code, rec.Body.String()) } } func TestHandlerRejectsInvalidSetContent(t *testing.T) { handler := NewHandler(DefaultConfig(), NewMemoryStore()) req := httptest.NewRequest(http.MethodGet, "/set-content?route=1234&str=ok&tpl_name=tpl", nil) rec := httptest.NewRecorder() handler.ServeHTTP(rec, req) if rec.Code != http.StatusBadRequest { t.Fatalf("status=%d body=%s", rec.Code, rec.Body.String()) } }