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) }