Files
upstream-corteza/server/pkg/dal/aggregator_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

192 lines
3.5 KiB
Go

package dal
import (
"context"
"testing"
"github.com/stretchr/testify/require"
)
func TestAggregator(t *testing.T) {
tcc := []struct {
name string
rows []simpleRow
attrubutes []simpleAttribute
out simpleRow
}{
// Plain operations
{
name: "simple count",
rows: []simpleRow{
{"v": 1},
{"v": 5},
{"v": 35},
{"v": 11.5},
},
out: simpleRow{"count": float64(4)},
attrubutes: []simpleAttribute{
{ident: "count", expr: "count(v)"},
},
},
{
name: "simple count nulls",
rows: []simpleRow{
{"v": nil},
{"v": 5},
{"v": 35},
{"v": 11.5},
},
out: simpleRow{"count": float64(3)},
attrubutes: []simpleAttribute{
{ident: "count", expr: "count(v)"},
},
},
{
name: "simple sum",
rows: []simpleRow{
{"v": 1},
{"v": 5},
{"v": 35},
{"v": 11.5},
},
out: simpleRow{"sum": float64(52.5)},
attrubutes: []simpleAttribute{
{ident: "sum", expr: "sum(v)"},
},
},
{
name: "simple sum nulls",
rows: []simpleRow{
{"v": nil},
{"v": 5},
{"v": 35},
{"v": 11.5},
},
out: simpleRow{"sum": float64(51.5)},
attrubutes: []simpleAttribute{
{ident: "sum", expr: "sum(v)"},
},
},
{
name: "simple min",
rows: []simpleRow{
{"v": 1},
{"v": 5},
{"v": 35},
{"v": 11.5},
},
out: simpleRow{"min": float64(1)},
attrubutes: []simpleAttribute{
{ident: "min", expr: "min(v)"},
},
},
{
name: "simple min nulls",
rows: []simpleRow{
{"v": nil},
{"v": 5},
{"v": 35},
{"v": 11.5},
},
out: simpleRow{"min": float64(5)},
attrubutes: []simpleAttribute{
{ident: "min", expr: "min(v)"},
},
},
{
name: "simple max",
rows: []simpleRow{
{"v": 1},
{"v": 5},
{"v": 35},
{"v": 11.5},
},
out: simpleRow{"max": float64(35)},
attrubutes: []simpleAttribute{
{ident: "max", expr: "max(v)"},
},
},
{
name: "simple max nulls",
rows: []simpleRow{
{"v": 1},
{"v": 5},
{"v": nil},
{"v": 11.5},
},
out: simpleRow{"max": float64(11.5)},
attrubutes: []simpleAttribute{
{ident: "max", expr: "max(v)"},
},
},
{
name: "simple avg",
rows: []simpleRow{
{"v": 1},
{"v": 5},
{"v": 35},
{"v": 11.5},
},
out: simpleRow{"avg": float64(13.125)},
attrubutes: []simpleAttribute{
{ident: "avg", expr: "avg(v)"},
},
},
{
name: "simple avg nulls",
rows: []simpleRow{
{"v": nil},
{"v": 5},
{"v": 35},
{"v": nil},
},
out: simpleRow{"avg": float64(20)},
attrubutes: []simpleAttribute{
{ident: "avg", expr: "avg(v)"},
},
},
// With a nested expression
// @todo tests to assure nil values; omitting due to the gval issue
{
name: "nested expression",
rows: []simpleRow{
{"v": 1},
{"v": 5},
{"v": 35},
{"v": 11.5},
},
out: simpleRow{"sum": float64(60.5)},
attrubutes: []simpleAttribute{
{ident: "sum", expr: "sum(v + 2)"},
},
},
}
ctx := context.Background()
for _, tc := range tcc {
t.Run(tc.name, func(t *testing.T) {
agg := Aggregator()
for _, a := range tc.attrubutes {
require.NoError(t, agg.AddAggregateE(a.ident, a.expr))
}
for _, r := range tc.rows {
require.NoError(t, agg.Aggregate(ctx, r))
}
out := make(simpleRow)
require.NoError(t, agg.Scan(out))
require.Equal(t, tc.out, out)
})
}
}
func TestAggregatorInit(t *testing.T) {
t.Run("non supported agg. op.", func(t *testing.T) {
agg := Aggregator()
require.Error(t, agg.AddAggregateE("count", "div(v)"))
})
}