starnet/body_test.go

146 lines
3.3 KiB
Go
Raw Permalink Normal View History

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