117 lines
2.4 KiB
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)
|
|
}
|