146 lines
3.3 KiB
Go
146 lines
3.3 KiB
Go
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"])
|
|
}
|
|
}
|