package fsm import ( "context" "fmt" "testing" "github.com/looplab/fsm" ) func Test_fsm(t *testing.T) { ctx := context.Background() // 创建新任务 fmt.Println("----------------task1----------------") fmt.Println("-------------验证状态流转--------------") task := NewTask("task-001") // 任务状态流转 fmt.Println("Current state:", task.FSM.Current()) // pending _ = task.Assign(ctx, "user-001") fmt.Println("Current state:", task.FSM.Current()) // assigned _ = task.Accept(ctx) fmt.Println("Current state:", task.FSM.Current()) // accepted _ = task.Submit(ctx) fmt.Println("Current state:", task.FSM.Current()) // submitted _ = task.Approve(ctx) fmt.Println("Current state:", task.FSM.Current()) // approved _ = task.Settle(ctx) fmt.Println("Current state:", task.FSM.Current()) // settled // 回调报错情况 fmt.Println("----------------task2----------------") fmt.Println("-------------验证回调报错情况-------------") task2 := NewTask("task-002") fmt.Println("Current state:", task2.FSM.Current()) // pending _ = task2.Assign(ctx, "user-002") fmt.Println("Current state:", task2.FSM.Current()) // assigned e := task2.Cancel(ctx) fmt.Println("Error:", e) fmt.Println("Current state:", task2.FSM.Current()) // assigned(cancel failed) } func TestMermaidOutput(t *testing.T) { task := NewTask("task-001") gotDiagram, err := fsm.VisualizeForMermaidWithGraphType(task.FSM, fsm.StateDiagram) if err != nil { t.Errorf("got error for visualizing with type MERMAID: %s", err) } gotFlowchart, err := fsm.VisualizeForMermaidWithGraphType(task.FSM, fsm.FlowChart) if err != nil { t.Errorf("got error for visualizing with type MERMAID: %s", err) } fmt.Println(gotDiagram) fmt.Println("--------------------------------") fmt.Println(gotFlowchart) }