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