package starnet import ( "encoding/json" "net/http" "net/http/httptest" "testing" ) func TestRequestHeaders(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { headers := make(map[string]string) for k, v := range r.Header { if len(v) > 0 { headers[k] = v[0] } } json.NewEncoder(w).Encode(headers) })) defer server.Close() req := NewSimpleRequest(server.URL, "GET"). SetHeader("X-Custom-Header", "value1"). AddHeader("X-Multi-Header", "value1"). AddHeader("X-Multi-Header", "value2") resp, err := req.Do() if err != nil { t.Fatalf("Do() error: %v", err) } defer resp.Close() var headers map[string]string resp.Body().JSON(&headers) if headers["X-Custom-Header"] != "value1" { t.Errorf("X-Custom-Header = %v; want value1", headers["X-Custom-Header"]) } } func TestRequestCookies(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { cookies := make(map[string]string) for _, cookie := range r.Cookies() { cookies[cookie.Name] = cookie.Value } json.NewEncoder(w).Encode(cookies) })) defer server.Close() req := NewSimpleRequest(server.URL, "GET"). AddSimpleCookie("session", "abc123"). AddSimpleCookie("user", "john") resp, err := req.Do() if err != nil { t.Fatalf("Do() error: %v", err) } defer resp.Close() var cookies map[string]string resp.Body().JSON(&cookies) if cookies["session"] != "abc123" { t.Errorf("session cookie = %v; want abc123", cookies["session"]) } if cookies["user"] != "john" { t.Errorf("user cookie = %v; want john", cookies["user"]) } } func TestRequestUserAgent(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Write([]byte(r.UserAgent())) })) defer server.Close() req := NewSimpleRequest(server.URL, "GET"). SetUserAgent("CustomAgent/1.0") resp, err := req.Do() if err != nil { t.Fatalf("Do() error: %v", err) } defer resp.Close() body, _ := resp.Body().String() if body != "CustomAgent/1.0" { t.Errorf("User-Agent = %v; want CustomAgent/1.0", body) } } func TestRequestBearerToken(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { auth := r.Header.Get("Authorization") w.Write([]byte(auth)) })) defer server.Close() req := NewSimpleRequest(server.URL, "GET"). SetBearerToken("mytoken123") resp, err := req.Do() if err != nil { t.Fatalf("Do() error: %v", err) } defer resp.Close() body, _ := resp.Body().String() expected := "Bearer mytoken123" if body != expected { t.Errorf("Authorization = %v; want %v", body, expected) } } func TestRequestBasicAuth(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { username, password, ok := r.BasicAuth() if !ok { w.WriteHeader(http.StatusUnauthorized) return } w.Write([]byte(username + ":" + password)) })) defer server.Close() req := NewSimpleRequest(server.URL, "GET"). SetBasicAuth("user", "pass") resp, err := req.Do() if err != nil { t.Fatalf("Do() error: %v", err) } defer resp.Close() body, _ := resp.Body().String() if body != "user:pass" { t.Errorf("BasicAuth = %v; want user:pass", body) } }