78 lines
2.7 KiB
Go
78 lines
2.7 KiB
Go
package questiontable
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestReadFieldsUsesOperatorAndMapsQuestionSchema(t *testing.T) {
|
|
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/base/sheets/sheet/fields", func(w http.ResponseWriter, r *http.Request) {
|
|
if r.URL.Query().Get("operatorId") != "union" {
|
|
t.Fatalf("operator=%q", r.URL.Query().Get("operatorId"))
|
|
}
|
|
_, _ = w.Write([]byte(`{"value":[
|
|
{"id":"q","name":"中文问题","type":"text"},{"id":"time","name":"提问时间","type":"date"},
|
|
{"id":"asker","name":"提问人","type":"user"},{"id":"orig","name":"原始问题","type":"text"},
|
|
{"id":"answer","name":"AI答案","type":"text"},{"id":"trigger","name":"流程触发人员信息","type":"text"},
|
|
{"id":"lang","name":"语言","type":"text"},{"id":"dept","name":"部门","type":"text"},{"id":"region","name":"区域","type":"text"}]}`))
|
|
})
|
|
server := httptest.NewServer(mux)
|
|
defer server.Close()
|
|
client, err := NewClient(Config{ClientID: "id", Secret: "secret", BaseID: "base", SheetID: "sheet", OperatorID: "union", TokenURL: server.URL + "/token", BaseURL: server.URL}, server.Client())
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
fields, err := client.ReadFields(context.Background())
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
mapping, err := MapRequiredFields(fields, QuestionSchema())
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if mapping["answer"] != "answer" || len(mapping) != 9 {
|
|
t.Fatalf("mapping=%v", mapping)
|
|
}
|
|
}
|
|
|
|
func TestMapRequiredFieldsRejectsMissingDuplicateAndWrongType(t *testing.T) {
|
|
required := []RequiredField{{Logical: "question", Name: "问题", Type: "text"}}
|
|
cases := []struct {
|
|
name string
|
|
fields []Field
|
|
code string
|
|
}{
|
|
{"missing", nil, "missing_field"},
|
|
{"duplicate", []Field{{ID: "1", Name: "问题", Type: "text"}, {ID: "2", Name: "问题", Type: "text"}}, "duplicate_field"},
|
|
{"wrong type", []Field{{ID: "1", Name: "问题", Type: "user"}}, "field_type_mismatch"},
|
|
}
|
|
for _, tc := range cases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
_, err := MapRequiredFields(tc.fields, required)
|
|
if err == nil || !strings.Contains(err.Error(), tc.code) {
|
|
t.Fatalf("err=%v", err)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestFAQSchemaUsesFourCurrentInsertFields(t *testing.T) {
|
|
required := FAQSchema()
|
|
if len(required) != 4 {
|
|
t.Fatalf("len=%d", len(required))
|
|
}
|
|
want := map[string]string{"standard_question": "text", "original_question": "text", "language": "text", "asker": "user"}
|
|
for _, field := range required {
|
|
if want[field.Logical] != field.Type {
|
|
t.Fatalf("field=%+v", field)
|
|
}
|
|
}
|
|
}
|