68 lines
1.8 KiB
Go
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)
|
|
}
|