package starnet import ( "bytes" "encoding/json" "io" "net/http" "net/http/httptest" "strings" "testing" ) func TestRequestBodyBytes(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { body, _ := io.ReadAll(r.Body) w.Write(body) })) defer server.Close() testData := []byte("test data") req := NewSimpleRequest(server.URL, "POST").SetBody(testData) resp, err := req.Do() if err != nil { t.Fatalf("Do() error: %v", err) } defer resp.Close() body, _ := resp.Body().Bytes() if !bytes.Equal(body, testData) { t.Errorf("Body = %v; want %v", body, testData) } } func TestRequestBodyString(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { body, _ := io.ReadAll(r.Body) w.Write(body) })) defer server.Close() testData := "test string data" req := NewSimpleRequest(server.URL, "POST").SetBodyString(testData) resp, err := req.Do() if err != nil { t.Fatalf("Do() error: %v", err) } defer resp.Close() body, _ := resp.Body().String() if body != testData { t.Errorf("Body = %v; want %v", body, testData) } } func TestRequestBodyReader(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { body, _ := io.ReadAll(r.Body) w.Write(body) })) defer server.Close() testData := "test reader data" reader := strings.NewReader(testData) req := NewSimpleRequest(server.URL, "POST").SetBodyReader(reader) resp, err := req.Do() if err != nil { t.Fatalf("Do() error: %v", err) } defer resp.Close() body, _ := resp.Body().String() if body != testData { t.Errorf("Body = %v; want %v", body, testData) } } func TestRequestJSON(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.Header.Get("Content-Type") != ContentTypeJSON { t.Errorf("Content-Type = %v; want %v", r.Header.Get("Content-Type"), ContentTypeJSON) } var data map[string]string json.NewDecoder(r.Body).Decode(&data) json.NewEncoder(w).Encode(data) })) defer server.Close() testData := map[string]string{ "name": "John", "email": "john@example.com", } req := NewSimpleRequest(server.URL, "POST").SetJSON(testData) 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 result["name"] != testData["name"] { t.Errorf("name = %v; want %v", result["name"], testData["name"]) } } func TestRequestFormData(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { r.ParseForm() data := make(map[string]string) for k, v := range r.Form { if len(v) > 0 { data[k] = v[0] } } json.NewEncoder(w).Encode(data) })) defer server.Close() req := NewSimpleRequest(server.URL, "POST"). AddFormData("name", "John"). AddFormData("email", "john@example.com") 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 result["name"] != "John" { t.Errorf("name = %v; want John", result["name"]) } if result["email"] != "john@example.com" { t.Errorf("email = %v; want john@example.com", result["email"]) } }