247 lines
7.7 KiB
Go
247 lines
7.7 KiB
Go
package workflow
|
|
|
|
import (
|
|
"os"
|
|
"path"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/yaoapp/gou"
|
|
"github.com/yaoapp/kun/any"
|
|
"github.com/yaoapp/xiang/config"
|
|
"github.com/yaoapp/xiang/flow"
|
|
"github.com/yaoapp/xiang/model"
|
|
"github.com/yaoapp/xiang/query"
|
|
"github.com/yaoapp/xiang/share"
|
|
"github.com/yaoapp/xun/capsule"
|
|
)
|
|
|
|
func init() {
|
|
share.DBConnect(config.Conf.DB)
|
|
share.Load(config.Conf)
|
|
model.Load(config.Conf)
|
|
engineModels := path.Join(os.Getenv("YAO_DEV"), "xiang", "models")
|
|
model.LoadFrom(engineModels, "xiang.")
|
|
query.Load(config.Conf)
|
|
flow.Load(config.Conf)
|
|
Load(config.Conf)
|
|
}
|
|
|
|
func TestProcessFind(t *testing.T) {
|
|
assignFlow := Select("assign")
|
|
wflow := assignFlow.Save(1, "选择商务负责人", 1, Input{
|
|
Data: map[string]interface{}{"id": 1, "name": "云主机"},
|
|
Form: map[string]interface{}{"biz_id": 1, "name": "张良明"},
|
|
})
|
|
|
|
args := []interface{}{"assign", wflow["id"]}
|
|
res := gou.NewProcess("xiang.workflow.Find", args...).Run()
|
|
|
|
data := any.Of(res).Map().MapStrAny.Dot()
|
|
assert.Equal(t, wflow["id"], data.Get("id"))
|
|
|
|
// 清理数据
|
|
capsule.Query().From("xiang_workflow").Truncate()
|
|
}
|
|
|
|
func TestProcessSetting(t *testing.T) {
|
|
assignFlow := Select("assign")
|
|
wflow := assignFlow.Save(1, "选择商务负责人", 1, Input{
|
|
Data: map[string]interface{}{"id": 1, "name": "云主机"},
|
|
Form: map[string]interface{}{"biz_id": 1, "name": "张良明"},
|
|
})
|
|
id := any.Of(wflow["id"]).CInt()
|
|
assignFlow.Next(1, id, map[string]interface{}{
|
|
"项目名称": "测试项目",
|
|
"商务负责人名称": "林明波",
|
|
})
|
|
|
|
args := []interface{}{"assign", 1, 1}
|
|
res := gou.NewProcess("xiang.workflow.Setting", args...).Run()
|
|
data := any.Of(res).Map().MapStrAny.Dot()
|
|
assert.Equal(t, 2, data.Get("nodes.2.source"))
|
|
assert.Equal(t, 2, data.Get("nodes.3.source"))
|
|
assert.Equal(t, "assign", data.Get("name"))
|
|
assert.Equal(t, "指派商务负责人", data.Get("label"))
|
|
|
|
// 清理数据
|
|
capsule.Query().From("xiang_workflow").Truncate()
|
|
}
|
|
|
|
func TestProcessOpen(t *testing.T) {
|
|
assignFlow := Select("assign")
|
|
wflow := assignFlow.Save(1, "选择商务负责人", 1, Input{
|
|
Data: map[string]interface{}{"id": 1, "name": "云主机"},
|
|
Form: map[string]interface{}{"biz_id": 1, "name": "张良明"},
|
|
})
|
|
|
|
args := []interface{}{"assign", 1, 1}
|
|
res := gou.NewProcess("xiang.workflow.Open", args...).Run()
|
|
|
|
data := any.Of(res).Map().MapStrAny.Dot()
|
|
assert.Equal(t, wflow["id"], data.Get("id"))
|
|
|
|
// 清理数据
|
|
capsule.Query().From("xiang_workflow").Truncate()
|
|
}
|
|
|
|
func TestProcessSave(t *testing.T) {
|
|
args := []interface{}{"assign",
|
|
1, "选择商务负责人", 1,
|
|
map[string]interface{}{
|
|
"data": map[string]interface{}{"id": 1, "name": "云主机"},
|
|
"form": map[string]interface{}{"biz_id": 1, "name": "张良明"},
|
|
},
|
|
map[string]interface{}{"foo": "bar"},
|
|
}
|
|
res := gou.NewProcess("xiang.workflow.Save", args...).Run()
|
|
data := any.Of(res).Map().MapStrAny.Dot()
|
|
assert.Equal(t, int64(1), data.Get("id"))
|
|
|
|
// 清理数据
|
|
capsule.Query().From("xiang_workflow").Truncate()
|
|
}
|
|
|
|
func TestProcessNext(t *testing.T) {
|
|
assignFlow := Select("assign")
|
|
wflow := assignFlow.Save(1, "选择商务负责人", 1, Input{
|
|
Data: map[string]interface{}{"id": 1, "name": "云主机"},
|
|
Form: map[string]interface{}{"biz_id": 1, "name": "张良明"},
|
|
})
|
|
|
|
args := []interface{}{"assign",
|
|
1, wflow["id"], map[string]interface{}{
|
|
"项目名称": "测试项目",
|
|
"商务负责人名称": "林明波",
|
|
},
|
|
}
|
|
res := gou.NewProcess("xiang.workflow.Next", args...).Run()
|
|
data := any.Of(res).Map().MapStrAny.Dot()
|
|
assert.Equal(t, wflow["id"], data.Get("id"))
|
|
assert.Equal(t, "项目负责人审批", data.Get("node_name"))
|
|
|
|
// 清理数据
|
|
capsule.Query().From("xiang_workflow").Truncate()
|
|
}
|
|
|
|
func TestProcessGoto(t *testing.T) {
|
|
assignFlow := Select("assign")
|
|
wflow := assignFlow.Save(1, "选择商务负责人", 1, Input{
|
|
Data: map[string]interface{}{"id": 1, "name": "云主机"},
|
|
Form: map[string]interface{}{"biz_id": 1, "name": "张良明"},
|
|
})
|
|
id := any.Of(wflow["id"]).CInt()
|
|
assignFlow.Next(1, id, map[string]interface{}{
|
|
"项目名称": "测试项目",
|
|
"商务负责人名称": "林明波",
|
|
})
|
|
|
|
args := []interface{}{"assign",
|
|
2, id, "选择商务负责人",
|
|
map[string]interface{}{"审批结果": "驳回"},
|
|
}
|
|
res := gou.NewProcess("xiang.workflow.Goto", args...).Run()
|
|
data := any.Of(res).Map().MapStrAny.Dot()
|
|
assert.Equal(t, wflow["id"], data.Get("id"))
|
|
assert.Equal(t, "选择商务负责人", data.Get("node_name"))
|
|
|
|
// 清理数据
|
|
capsule.Query().From("xiang_workflow").Truncate()
|
|
}
|
|
|
|
func TestProcessStatus(t *testing.T) {
|
|
assignFlow := Select("assign")
|
|
wflow := assignFlow.Save(1, "选择商务负责人", 1, Input{
|
|
Data: map[string]interface{}{"id": 1, "name": "云主机"},
|
|
Form: map[string]interface{}{"biz_id": 1, "name": "张良明"},
|
|
})
|
|
id := any.Of(wflow["id"]).CInt()
|
|
assignFlow.Next(1, id, map[string]interface{}{
|
|
"项目名称": "测试项目",
|
|
"商务负责人名称": "林明波",
|
|
})
|
|
|
|
args := []interface{}{"assign",
|
|
2, id, "已完成", map[string]interface{}{"关闭原因": "测试完成"},
|
|
}
|
|
res := gou.NewProcess("xiang.workflow.Status", args...).Run()
|
|
data := any.Of(res).Map().MapStrAny.Dot()
|
|
assert.Equal(t, wflow["id"], data.Get("id"))
|
|
assert.Equal(t, "已完成", data.Get("status"))
|
|
|
|
// 清理数据
|
|
capsule.Query().From("xiang_workflow").Truncate()
|
|
}
|
|
|
|
func TestProcessDone(t *testing.T) {
|
|
assignFlow := Select("assign")
|
|
wflow := assignFlow.Save(1, "选择商务负责人", 1, Input{
|
|
Data: map[string]interface{}{"id": 1, "name": "云主机"},
|
|
Form: map[string]interface{}{"biz_id": 1, "name": "张良明"},
|
|
})
|
|
id := any.Of(wflow["id"]).CInt()
|
|
assignFlow.Next(1, id, map[string]interface{}{
|
|
"项目名称": "测试项目",
|
|
"商务负责人名称": "林明波",
|
|
})
|
|
|
|
args := []interface{}{"assign",
|
|
2, id, map[string]interface{}{"关闭原因": "测试完成"},
|
|
}
|
|
res := gou.NewProcess("xiang.workflow.Done", args...).Run()
|
|
data := any.Of(res).Map().MapStrAny.Dot()
|
|
assert.Equal(t, wflow["id"], data.Get("id"))
|
|
assert.Equal(t, "已完成", data.Get("status"))
|
|
|
|
// 清理数据
|
|
capsule.Query().From("xiang_workflow").Truncate()
|
|
}
|
|
|
|
func TestProcessClose(t *testing.T) {
|
|
assignFlow := Select("assign")
|
|
wflow := assignFlow.Save(1, "选择商务负责人", 1, Input{
|
|
Data: map[string]interface{}{"id": 1, "name": "云主机"},
|
|
Form: map[string]interface{}{"biz_id": 1, "name": "张良明"},
|
|
})
|
|
id := any.Of(wflow["id"]).CInt()
|
|
assignFlow.Next(1, id, map[string]interface{}{
|
|
"项目名称": "测试项目",
|
|
"商务负责人名称": "林明波",
|
|
})
|
|
|
|
args := []interface{}{"assign",
|
|
2, id, map[string]interface{}{"关闭原因": "测试关闭"},
|
|
}
|
|
res := gou.NewProcess("xiang.workflow.Close", args...).Run()
|
|
data := any.Of(res).Map().MapStrAny.Dot()
|
|
assert.Equal(t, wflow["id"], data.Get("id"))
|
|
assert.Equal(t, "已关闭", data.Get("status"))
|
|
|
|
// 清理数据
|
|
capsule.Query().From("xiang_workflow").Truncate()
|
|
}
|
|
|
|
func TestProcessReset(t *testing.T) {
|
|
assignFlow := Select("assign")
|
|
wflow := assignFlow.Save(1, "选择商务负责人", 1, Input{
|
|
Data: map[string]interface{}{"id": 1, "name": "云主机"},
|
|
Form: map[string]interface{}{"biz_id": 1, "name": "张良明"},
|
|
})
|
|
id := any.Of(wflow["id"]).CInt()
|
|
assignFlow.Next(1, id, map[string]interface{}{
|
|
"项目名称": "测试项目",
|
|
"商务负责人名称": "林明波",
|
|
})
|
|
|
|
args := []interface{}{"assign",
|
|
2, id, map[string]interface{}{"驳回原因": "字段填写错误"},
|
|
}
|
|
res := gou.NewProcess("xiang.workflow.Reset", args...).Run()
|
|
data := any.Of(res).Map().MapStrAny.Dot()
|
|
assert.Equal(t, wflow["id"], data.Get("id"))
|
|
assert.Equal(t, "进行中", data.Get("status"))
|
|
assert.Equal(t, "选择商务负责人", data.Get("node_name"))
|
|
|
|
// 清理数据
|
|
capsule.Query().From("xiang_workflow").Truncate()
|
|
}
|