mirror of
https://github.com/karust/openserp.git
synced 2026-08-05 16:53:54 +08:00
188 lines
4.3 KiB
Go
188 lines
4.3 KiB
Go
package baidu
|
|
|
|
import (
|
|
"net/url"
|
|
"testing"
|
|
|
|
"github.com/karust/openserp/core"
|
|
)
|
|
|
|
func TestBuildURL(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
query core.Query
|
|
wantErr bool
|
|
check func(*testing.T, url.Values, string)
|
|
}{
|
|
{
|
|
name: "combined params with unicode and start zero",
|
|
query: core.Query{
|
|
Text: "go 搜索",
|
|
Site: "tutorialspoint.com",
|
|
Filetype: "pdf",
|
|
DateInterval: "20140101..20230101",
|
|
Limit: 10,
|
|
Start: 0,
|
|
},
|
|
check: func(t *testing.T, params url.Values, host string) {
|
|
t.Helper()
|
|
if host != "www.baidu.com" {
|
|
t.Fatalf("unexpected host: %s", host)
|
|
}
|
|
if got := params.Get("wd"); got != "go 搜索 site:tutorialspoint.com filetype:pdf" {
|
|
t.Fatalf("unexpected wd value: %q", got)
|
|
}
|
|
if got := params.Get("gpc"); got != "stf=1388534400,1672531200|stftype=2" {
|
|
t.Fatalf("unexpected gpc value: %q", got)
|
|
}
|
|
if got := params.Get("rn"); got != "" {
|
|
t.Fatalf("unexpected rn value: %q", got)
|
|
}
|
|
if got := params.Get("pn"); got != "" {
|
|
t.Fatalf("pn should be omitted when Start=0, got %q", got)
|
|
}
|
|
if got := params.Get("f"); got != "8" {
|
|
t.Fatalf("unexpected f value: %q", got)
|
|
}
|
|
if got := params.Get("ie"); got != "utf-8" {
|
|
t.Fatalf("unexpected ie value: %q", got)
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "very large start",
|
|
query: core.Query{
|
|
Text: "golang",
|
|
Start: 2147483647,
|
|
},
|
|
check: func(t *testing.T, params url.Values, _ string) {
|
|
t.Helper()
|
|
if got := params.Get("pn"); got != "2147483647" {
|
|
t.Fatalf("unexpected pn value: %q", got)
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "negative start returns error",
|
|
query: core.Query{
|
|
Text: "golang",
|
|
Start: -1,
|
|
},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "empty fields return error",
|
|
query: core.Query{},
|
|
wantErr: true,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got, err := BuildURL(tt.query)
|
|
if (err != nil) != tt.wantErr {
|
|
t.Fatalf("BuildURL() error = %v, wantErr %v", err, tt.wantErr)
|
|
}
|
|
if tt.wantErr {
|
|
return
|
|
}
|
|
|
|
parsed, err := url.Parse(got)
|
|
if err != nil {
|
|
t.Fatalf("invalid URL returned: %v", err)
|
|
}
|
|
if tt.check != nil {
|
|
tt.check(t, parsed.Query(), parsed.Host)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestBuildImageURL(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
query core.Query
|
|
pageNum int
|
|
wantErr bool
|
|
check func(*testing.T, url.Values, string)
|
|
}{
|
|
{
|
|
name: "unicode query",
|
|
query: core.Query{Text: "金毛猎犬"},
|
|
pageNum: 0,
|
|
check: func(t *testing.T, params url.Values, host string) {
|
|
t.Helper()
|
|
if host != "image.baidu.com" {
|
|
t.Fatalf("unexpected host: %s", host)
|
|
}
|
|
if got := params.Get("word"); got != "金毛猎犬" {
|
|
t.Fatalf("expected unicode query, got %q", got)
|
|
}
|
|
if got := params.Get("tn"); got != "resultjson_com" {
|
|
t.Fatalf("unexpected tn value: %q", got)
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "combined params with pagination",
|
|
query: core.Query{
|
|
Text: "golang",
|
|
Limit: 25,
|
|
},
|
|
pageNum: 3,
|
|
check: func(t *testing.T, params url.Values, _ string) {
|
|
t.Helper()
|
|
if got := params.Get("rn"); got != "30" {
|
|
t.Fatalf("unexpected rn value: %q", got)
|
|
}
|
|
if got := params.Get("pn"); got != "90" {
|
|
t.Fatalf("unexpected pn value: %q", got)
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "small limit omits result count param",
|
|
query: core.Query{
|
|
Text: "golang",
|
|
Limit: 10,
|
|
},
|
|
pageNum: 2,
|
|
check: func(t *testing.T, params url.Values, _ string) {
|
|
t.Helper()
|
|
if got := params.Get("rn"); got != "" {
|
|
t.Fatalf("rn should be omitted when Limit<=10, got %q", got)
|
|
}
|
|
if got := params.Get("pn"); got != "60" {
|
|
t.Fatalf("unexpected pn value: %q", got)
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "empty fields return error",
|
|
query: core.Query{},
|
|
pageNum: 0,
|
|
wantErr: true,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got, err := BuildImageURL(tt.query, tt.pageNum)
|
|
if (err != nil) != tt.wantErr {
|
|
t.Fatalf("BuildImageURL() error = %v, wantErr %v", err, tt.wantErr)
|
|
}
|
|
if tt.wantErr {
|
|
return
|
|
}
|
|
|
|
parsed, err := url.Parse(got)
|
|
if err != nil {
|
|
t.Fatalf("invalid URL returned: %v", err)
|
|
}
|
|
if tt.check != nil {
|
|
tt.check(t, parsed.Query(), parsed.Host)
|
|
}
|
|
})
|
|
}
|
|
}
|