This commit is contained in:
2026-07-21 15:53:29 +08:00
parent 024b6614ba
commit c943f575d5
40 changed files with 5362 additions and 275 deletions

View File

@@ -0,0 +1,69 @@
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")
}
}