3
0
corteza/pkg/wfexec/gateways_test.go
2022-08-03 12:34:15 +02:00

115 lines
2.9 KiB
Go

package wfexec
import (
"context"
"github.com/cortezaproject/corteza-server/pkg/expr"
"github.com/spf13/cast"
"github.com/stretchr/testify/require"
"testing"
)
func gt(key string, val int64) pathTester {
return func(ctx context.Context, variables *expr.Vars) (bool, error) {
return cast.ToInt64(expr.Must(expr.Select(variables, key)).Get()) > val, nil
}
}
func makeIntVars(k string, num int) *expr.Vars {
o := &expr.Vars{}
_ = o.Set(k, num)
return o
}
func TestJoinGateway(t *testing.T) {
var (
req = require.New(t)
p1, p2, p3 = &wfTestStep{name: "p1"}, &wfTestStep{name: "p2"}, &wfTestStep{name: "p3"}
gw = JoinGateway(p1, p2, p3)
r ExecResponse
err error
)
r, err = gw.Exec(context.TODO(), &ExecRequest{Parent: p1, SessionID: 1})
req.NoError(err)
req.Equal(&partial{}, r)
r, err = gw.Exec(context.TODO(), &ExecRequest{Parent: p2, SessionID: 1})
req.NoError(err)
req.Equal(&partial{}, r)
r, err = gw.Exec(context.TODO(), &ExecRequest{Parent: p3, SessionID: 1})
req.NoError(err)
req.IsType(&expr.Vars{}, r)
r, err = gw.Exec(context.TODO(), &ExecRequest{Parent: p1, SessionID: 2})
req.NoError(err)
req.Equal(&partial{}, r)
}
func TestForkGateway(t *testing.T) {
var (
req = require.New(t)
gw = ForkGateway()
)
r, err := gw.Exec(context.TODO(), nil)
req.NoError(err)
req.Equal(Steps{}, r)
req.Empty(r)
}
func TestInclGateway(t *testing.T) {
var (
req = require.New(t)
s1, s2, s3 = &wfTestStep{name: "s1"}, &wfTestStep{name: "s2"}, &wfTestStep{name: "s3"}
gwp1, _ = NewGatewayPath(s1, gt("a", 10))
gwp2, _ = NewGatewayPath(s2, gt("a", 5))
gwp3, _ = NewGatewayPath(s3, gt("a", 0))
gw, err = InclGateway(gwp1, gwp2, gwp3)
)
r, err := gw.Exec(context.Background(), &ExecRequest{Scope: makeIntVars("a", 11)})
req.NoError(err)
req.Equal(Steps{s1, s2, s3}, r)
r, err = gw.Exec(context.Background(), &ExecRequest{Scope: makeIntVars("a", 6)})
req.NoError(err)
req.Equal(Steps{s2, s3}, r)
r, err = gw.Exec(context.Background(), &ExecRequest{Scope: makeIntVars("a", 1)})
req.NoError(err)
req.Equal(Steps{s3}, r)
r, err = gw.Exec(context.Background(), &ExecRequest{Scope: makeIntVars("a", 0)})
req.Error(err)
req.Nil(r)
}
func TestExclGateway(t *testing.T) {
var (
req = require.New(t)
s1, s2, s3 = &wfTestStep{name: "s1"}, &wfTestStep{name: "s2"}, &wfTestStep{name: "s3"}
gwp1, _ = NewGatewayPath(s1, gt("a", 10))
gwp2, _ = NewGatewayPath(s2, gt("a", 5))
gwp3, _ = NewGatewayPath(s3, nil)
gw, err = ExclGateway(gwp1, gwp2, gwp3)
)
r, err := gw.Exec(context.Background(), &ExecRequest{Scope: makeIntVars("a", 11)})
req.NoError(err)
req.Equal(s1, r)
r, err = gw.Exec(context.Background(), &ExecRequest{Scope: makeIntVars("a", 6)})
req.NoError(err)
req.Equal(s2, r)
r, err = gw.Exec(context.Background(), &ExecRequest{Scope: makeIntVars("a", 1)})
req.NoError(err)
req.Equal(s3, r)
}