pkg/rest/client_test.go

117 lines
2.4 KiB
Go

package rest
import (
"encoding/json"
"fmt"
"io"
"net/http"
"testing"
"git.ifooth.com/common/pkg/rest/transport"
"github.com/stretchr/testify/assert"
"golang.org/x/net/html"
)
type Resp1 struct {
UUID string `json:"uuid"`
}
type BkResult[T any] struct {
Code int
Data *T
}
func getTitle(n *html.Node) string {
if n.Type == html.ElementNode && n.Data == "title" {
if n.FirstChild != nil {
return n.FirstChild.Data
}
}
for c := n.FirstChild; c != nil; c = c.NextSibling {
if title := getTitle(c); title != "" {
return title
}
}
return ""
}
func TestGet(t *testing.T) {
resp, err := http.Get("http://127.0.0.1:38033/uuid")
assert.NoError(t, err)
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
assert.NoError(t, err)
fmt.Println(string(body))
r := new(Resp1)
err = json.Unmarshal(body, r)
assert.NoError(t, err)
assert.True(t, len(r.UUID) == 36)
}
func CustomC[T any]() *Client[T] {
c := NewClient[T]()
c.SetHeader("abc", "abc")
c.SetQueryParam("name", "ko")
return c
}
func TestGetRest(t *testing.T) {
r, err := NewClient[Resp1]().R().Get("http://127.0.0.1:38033/uuid")
assert.NoError(t, err)
fmt.Println(r)
assert.True(t, len(r.UUID) == 36)
rb, err := NewClient[[]byte]().R().Get("http://127.0.0.1:38033/uuid")
assert.NoError(t, err)
fmt.Println("abc", string(*rb))
r3, err := NewClient[io.Reader]().R().Get("http://127.0.0.1:38033/uuid")
assert.NoError(t, err)
r31, err := io.ReadAll(*r3)
assert.NoError(t, err)
fmt.Println("r31", string(r31))
r4, err := NewClient[io.ReadCloser]().R().Get("http://127.0.0.1:38033/uuid")
assert.NoError(t, err)
r41, err := io.ReadAll(*r4)
assert.NoError(t, err)
(*r4).Close()
fmt.Println("r41", string(r41))
ts := transport.Chain(http.DefaultTransport,
transport.RequestID,
transport.CurlLogTransport(map[string]string{}),
)
r5, err := CustomC[http.Response]().SetTransport(ts).R().SetHeader("ko", "abc").
SetQueryParam("age", "12").
Get("http://127.0.0.1:38033/uuid?dd=abc")
assert.NoError(t, err)
r51, err := io.ReadAll(r5.Body)
assert.NoError(t, err)
r5.Body.Close()
fmt.Println("r51", string(r51))
r6, err := NewClient[html.Node]().R().Get("http://127.0.0.1:38033")
assert.NoError(t, err)
title := getTitle(r6)
assert.Equal(t, "httpbin.org", title)
}
func TestGetRestError(t *testing.T) {
r, err := NewClient[int]().R().Get("http://127.0.0.1:38033/uuid")
assert.Error(t, err)
fmt.Println(err)
assert.Nil(t, r)
}