package fadada import "testing" func TestIsSignTaskCompletedStatus(t *testing.T) { cases := map[string]bool{ SignTaskStatusFinished: true, SignTaskStatusSignCompleted: true, SignTaskStatusSignProgress: false, SignTaskStatusTerminated: false, "": false, } for status, want := range cases { if got := IsSignTaskCompletedStatus(status); got != want { t.Fatalf("status %q: got %v want %v", status, got, want) } } } func TestBuildSignActors(t *testing.T) { c := NewClient(&Config{ AppID: "app", AppSecret: "secret", ServerURL: "https://uat-api.fadada.com/api/v5/", OpenCorpID: "haiyu-open-corp", TemplateID: "tpl", }) actors := c.buildSignActors(&CreateSignFlowRequest{ PartyAOpenCorpID: "client-open-corp", PartyAName: "测试企业", PartyAUSCC: "91110000MA01234567", TransactorMobile: "13800138000", TransactorID: "110101199001011234", }) if len(actors) != 2 { t.Fatalf("actors len=%d", len(actors)) } // 甲方先签 orderNo=1(需手动验证),乙方后签 orderNo=2(模板免验证签自动盖章) if actors[0].Actor.ActorID != ActorIDPartyA || actors[0].SignConfigInfo.RequestVerifyFree || actors[0].SignConfigInfo.OrderNo != 1 { t.Fatalf("party A (first/manual-sign)6 unexpected: %+v", actors[0]) } if actors[1].Actor.ActorID != ActorIDPartyB || !actors[1].SignConfigInfo.RequestVerifyFree || actors[1].SignConfigInfo.OrderNo != 2 { t.Fatalf("party B (second/free-sign) unexpected: %+v", actors[1]) } if actors[1].SignConfigInfo.FreeSignType != freeSignTypeTemplate { t.Fatalf("party B freeSignType=%q, want %s", actors[1].SignConfigInfo.FreeSignType, freeSignTypeTemplate) } if actors[0].Actor.ActorID == "party_a" || actors[1].Actor.ActorID == "party_b" { t.Fatal("actorId must match sign-template role names, not party_a/party_b") } if actors[1].Actor.ActorOpenID != "haiyu-open-corp" { t.Fatalf("party B openCorpId=%s", actors[1].Actor.ActorOpenID) } } func TestParseCallback(t *testing.T) { c := NewClient(&Config{AppID: "app", AppSecret: "secret", ServerURL: "https://x/"}) biz := `{"signTaskId":"st-1","signTaskStatus":"task_finished","eventTime":"2026-07-14T10:00:00+08:00"}` ev, err := c.ParseCallback(map[string]string{"X-FASC-Event": "sign-task-finished"}, biz) if err != nil { t.Fatal(err) } if ev.SignTaskID != "st-1" || ev.SignTaskStatus != SignTaskStatusFinished { t.Fatalf("unexpected event: %+v", ev) } if !ev.IsSignCompletedCallback() { t.Fatal("expected completed callback") } }