package starnet import ( "encoding/json" "net/http" "net/http/httptest" "testing" ) func TestRequestQuery(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { query := r.URL.Query() result := make(map[string][]string) for k, v := range query { result[k] = v } json.NewEncoder(w).Encode(result) })) defer server.Close() req := NewSimpleRequest(server.URL, "GET"). AddQuery("name", "John"). AddQuery("age", "30"). AddQuery("tags", "go"). AddQuery("tags", "http") resp, err := req.Do() if err != nil { t.Fatalf("Do() error: %v", err) } defer resp.Close() var result map[string][]string resp.Body().JSON(&result) if len(result["name"]) != 1 || result["name"][0] != "John" { t.Errorf("name = %v; want [John]", result["name"]) } if len(result["tags"]) != 2 { t.Errorf("tags length = %v; want 2", len(result["tags"])) } } func TestRequestSetQuery(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { query := r.URL.Query() w.Write([]byte(query.Get("key"))) })) defer server.Close() req := NewSimpleRequest(server.URL, "GET"). SetQuery("key", "value1"). SetQuery("key", "value2") // Should overwrite resp, err := req.Do() if err != nil { t.Fatalf("Do() error: %v", err) } defer resp.Close() body, _ := resp.Body().String() if body != "value2" { t.Errorf("query value = %v; want value2", body) } } func TestRequestDeleteQuery(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { query := r.URL.Query() result := make(map[string]string) for k := range query { result[k] = query.Get(k) } json.NewEncoder(w).Encode(result) })) defer server.Close() req := NewSimpleRequest(server.URL, "GET"). AddQuery("keep", "yes"). AddQuery("delete", "no"). DeleteQuery("delete") resp, err := req.Do() if err != nil { t.Fatalf("Do() error: %v", err) } defer resp.Close() var result map[string]string resp.Body().JSON(&result) if _, exists := result["delete"]; exists { t.Error("delete query should not exist") } if result["keep"] != "yes" { t.Errorf("keep = %v; want yes", result["keep"]) } }