starnet/query_test.go

99 lines
2.2 KiB
Go
Raw Permalink Normal View History

2026-03-08 20:19:40 +08:00
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"])
}
}