Files
upstream-corteza/server/pkg/dal/runner_gval_test.go
upstream-mirror 7e385fc126
Some checks failed
SonarQube / SonarQube (push) Failing after 5m28s
E2e test on main branch push / server and client test (map[name:admin port:8080]) (push) Failing after 3m33s
Server and lib tests / Library test (js) (push) Failing after 1m36s
Server and lib tests / Library test (vue) (push) Successful in 2m24s
Server and lib tests / Web client test (admin) (push) Successful in 2m52s
Server and lib tests / Web client test (compose) (push) Successful in 3m23s
Server and lib tests / Web client test (discovery) (push) Successful in 2m49s
Server and lib tests / Web client test (one) (push) Successful in 2m52s
Server and lib tests / Web client test (privacy) (push) Successful in 2m44s
Server and lib tests / Web client test (reporter) (push) Successful in 2m56s
Server and lib tests / Web client test (workflow) (push) Successful in 3m0s
Server and lib tests / Server tests (push) Failing after 4m55s
E2e test on main branch push / notify-failure (push) Failing after 9s
Server and lib tests / Send matrix testing notification (push) Successful in 2s
Mark stale issues and pull requests / stale (push) Successful in 40s
snapshot of https://github.com/cortezaproject/corteza.git (2024.9.x, 2026-09-18; blobs > 131072B omitted)
2026-09-18 01:22:23 +05:00

182 lines
2.8 KiB
Go

package dal
import (
"context"
"testing"
"time"
"github.com/stretchr/testify/require"
)
func TestRowEvaluatorTest(t *testing.T) {
tc := []struct {
name string
expr string
in *Row
out bool
}{{
name: "single row ok",
expr: `test == 10`,
in: (&Row{}).WithValue("test", 0, 10),
out: true,
}, {
name: "single row nok",
expr: `test == 11`,
in: (&Row{}).WithValue("test", 0, 10),
out: false,
}}
ctx := context.Background()
for _, c := range tc {
t.Run(c.name, func(t *testing.T) {
evl, err := newRunnerGval(c.expr)
require.NoError(t, err)
tt, err := evl.Test(ctx, c.in)
require.NoError(t, err)
require.Equal(t, c.out, tt)
})
}
}
func TestHandlers(t *testing.T) {
yr := time.Now().Year()
mnt := int(time.Now().Month())
qtr := mnt / 4
dy := time.Now().Day()
// @todo some of the tests were omitted because they would be too flaky
// or can not yet pass (the gval nil handlers primarily)
tcc := []struct {
name string
expr string
in simpleRow
out any
}{
{
name: "not",
expr: `!true`,
in: simpleRow{},
out: false,
},
{
name: "and",
expr: `true && false`,
in: simpleRow{},
out: false,
},
{
name: "or",
expr: `false || true`,
in: simpleRow{},
out: true,
},
{
name: "xor",
expr: `'a' xor 'b'`,
in: simpleRow{},
out: true,
},
{
name: "eq",
expr: `1 == 2`,
in: simpleRow{},
out: false,
},
{
name: "ne",
expr: `3 != 2`,
in: simpleRow{},
out: true,
},
{
name: "lt",
expr: `1 < 2`,
in: simpleRow{},
out: true,
},
{
name: "le",
expr: `1 <= 2`,
in: simpleRow{},
out: true,
},
{
name: "gt",
expr: `2 > 1`,
in: simpleRow{},
out: true,
},
{
name: "ge",
expr: `1 >= 2`,
in: simpleRow{},
out: false,
},
{
name: "add",
expr: `1+3`,
in: simpleRow{},
out: float64(4),
},
{
name: "sub",
expr: `3-5`,
in: simpleRow{},
out: float64(-2),
},
{
name: "mult",
expr: `1*2`,
in: simpleRow{},
out: float64(2),
},
{
name: "div",
expr: `2/2`,
in: simpleRow{},
out: float64(1),
},
{
name: "concat",
expr: `concat('a', 'b')`,
in: simpleRow{},
out: "ab",
},
{
name: "quarter",
expr: `quarter(now())`,
in: simpleRow{},
out: qtr,
},
{
name: "year",
expr: `year(now())`,
in: simpleRow{},
out: yr,
},
{
name: "month",
expr: `month(now())`,
in: simpleRow{},
out: mnt,
},
{
name: "day",
expr: `day(now())`,
in: simpleRow{},
out: dy,
},
}
for _, tc := range tcc {
t.Run(tc.name, func(t *testing.T) {
evl, err := newRunnerGval(tc.expr)
require.NoError(t, err)
out, err := evl.Eval(context.Background(), tc.in)
require.NoError(t, err)
require.Equal(t, tc.out, out)
})
}
}