53 lines
1.5 KiB
Go
53 lines
1.5 KiB
Go
package questiontable
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestInsertFieldsUsesExactProvidedFAQFieldMap(t *testing.T) {
|
|
want := map[string]interface{}{
|
|
"01ZM8y7": "标准问题",
|
|
"fj3JQ1C": "原始问题",
|
|
"07YYagS": "Chinese",
|
|
}
|
|
var got map[string]interface{}
|
|
mux := http.NewServeMux()
|
|
mux.HandleFunc("/token", func(w http.ResponseWriter, _ *http.Request) {
|
|
_, _ = w.Write([]byte(`{"accessToken":"token","expireIn":7200}`))
|
|
})
|
|
mux.HandleFunc("/v1.0/notable/bases/faq-base/sheets/faq-sheet/records", func(w http.ResponseWriter, r *http.Request) {
|
|
var body struct {
|
|
Records []struct {
|
|
Fields map[string]interface{} `json:"fields"`
|
|
} `json:"records"`
|
|
}
|
|
if err := json.NewDecoder(r.Body).Decode(&body); err != nil || len(body.Records) != 1 {
|
|
t.Fatalf("invalid request body: err=%v body=%#v", err, body)
|
|
}
|
|
got = body.Records[0].Fields
|
|
_, _ = w.Write([]byte(`{"value":[{"id":"faq-record-1"}]}`))
|
|
})
|
|
server := httptest.NewServer(mux)
|
|
defer server.Close()
|
|
|
|
client, err := NewClient(Config{
|
|
ClientID: "client", Secret: "secret", BaseID: "faq-base", SheetID: "faq-sheet", OperatorID: "operator",
|
|
TokenURL: server.URL + "/token", BaseURL: server.URL,
|
|
}, server.Client())
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
recordID, err := client.InsertFields(context.Background(), want)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if recordID != "faq-record-1" || !reflect.DeepEqual(got, want) {
|
|
t.Fatalf("recordID=%q fields=%#v", recordID, got)
|
|
}
|
|
}
|