dashboard/pkg/fsm/fsm_test.go
2025-05-21 16:46:17 +08:00

68 lines
1.8 KiB
Go

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)
}