package osi import ( "context" "encoding/json" "net/http" "net/http/httptest" "testing" ) func TestQueryElderlySelfCareUsesDocumentedContract(t *testing.T) { var seenPath string var seenBody map[string]any server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { seenPath = r.URL.Path if err := json.NewDecoder(r.Body).Decode(&seenBody); err != nil { t.Fatalf("decode request: %v", err) } _, _ = w.Write([]byte(`{"code":"01","message":"操作成功","data":[{"phrId":"PHR-1","checkId":"LNR-1","jc":"1","jcdj":"1","jcpf":"10","zp":"1","zpdj":"1","zpfs":"100","createDate":"2026-01-01"}]}`)) })) defer server.Close() client := newTestJKDAClient(t, server.URL) rows, result, err := client.QueryElderlySelfCare(context.Background(), ElderlySelfCareQuery{ IDCard: "TEST-ID", PHRID: "PHR-1", CheckID: "LNR-1", }) if err != nil { t.Fatalf("QueryElderlySelfCare: %v", err) } if seenPath != "/osi/api/auto/lnr/query" { t.Fatalf("path = %q", seenPath) } if seenBody["serviceId"] != ServiceIDLNRSelfCareQuery { t.Fatalf("serviceId = %v", seenBody["serviceId"]) } baseInfo := seenBody["uploadinfo"].(map[string]any)["baseInfo"].(map[string]any) if baseInfo["idCard"] != "TEST-ID" || baseInfo["phrId"] != "PHR-1" || baseInfo["checkId"] != "LNR-1" { t.Fatalf("baseInfo = %#v", baseInfo) } if !result.Success || len(rows) != 1 { t.Fatalf("rows=%d result=%#v", len(rows), result) } if rows[0].Meal != "1" || rows[0].TotalScore != "100" || rows[0].CheckID != "LNR-1" { t.Fatalf("row = %#v", rows[0]) } } func TestElderlySelfCareQueryRequiresIDCard(t *testing.T) { if _, err := (ElderlySelfCareQuery{PHRID: "PHR-1"}).baseInfo(); err == nil { t.Fatal("missing idCard should error") } }