package arcgis import ( "context" "net/http" "net/http/httptest" "testing" "time" ) const envelope = `{ "features": [ {"value": "Станционная улица 1/1", "attributes": { "address": "Станционная улица 1/1", "type_id": 1, "system_id": 5, "time_category": 2, "start_date": "2026-10-01T00:00:00", "end_date": "2026-10-31T00:00:00" }} ], "fields": [ {"name": "type_id", "domain": {"codedValues": [{"code": 1, "name": "Плановое"}]}}, {"name": "system_id", "domain": {"codedValues": [{"code": 5, "name": "Теплоснабжение"}]}}, {"name": "time_category", "domain": {"codedValues": [{"code": 2, "name": "Текущие"}]}} ] }` func TestQueryParsesEnvelope(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if got := r.URL.Query().Get("f"); got != "json" { t.Errorf("missing f=json, got %q", got) } w.Header().Set("Content-Type", "application/json") _, _ = w.Write([]byte(envelope)) })) defer ts.Close() c := New(ts.URL, time.Second, 0) rows, err := c.Query(context.Background(), "Станционная улица 1/1") if err != nil { t.Fatalf("Query: %v", err) } if len(rows) != 1 { t.Fatalf("rows = %d, want 1", len(rows)) } got := rows[0] if got.Type != "Плановое" || got.System != "Теплоснабжение" || got.Time != "Текущие" { t.Errorf("coded values not resolved: %+v", got) } if got.Action != "heating" { t.Errorf("Action = %q, want heating", got.Action) } } func TestQueryRetriesThenFails(t *testing.T) { var calls int ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { calls++ http.Error(w, "boom", http.StatusInternalServerError) })) defer ts.Close() c := New(ts.URL, time.Second, 2) if _, err := c.Query(context.Background(), "Станционная улица 1/1"); err == nil { t.Fatal("expected error") } if calls != 3 { t.Errorf("calls = %d, want 3 (1 + 2 retries)", calls) } }