Add basic tests for system/reporter pkg

This commit is contained in:
Tomaž Jerman
2022-09-01 16:55:21 +02:00
parent 8ac3b50077
commit 9bfe742fb7
+178
View File
@@ -0,0 +1,178 @@
package reporter
import (
"context"
"testing"
"github.com/cortezaproject/corteza-server/pkg/dal"
"github.com/cortezaproject/corteza-server/system/types"
"github.com/stretchr/testify/require"
)
type (
mockModelFinder struct{}
)
func (mockModelFinder) FindModel(dal.ModelRef) *dal.Model {
return &dal.Model{}
}
func TestRuns(t *testing.T) {
simpleSS := types.ReportStepSet{
{Load: &types.ReportStepLoad{
Name: "l1",
Source: "src",
Definition: map[string]interface{}{
"module": "mod",
"ns": "ns",
},
}},
}
t.Run("no definitions", func(t *testing.T) {
rr, err := Runs(mockModelFinder{}, simpleSS, nil)
require.NoError(t, err)
require.Empty(t, rr)
})
t.Run("one definition", func(t *testing.T) {
defs := types.ReportFrameDefinitionSet{
{Name: "d1", Source: "l1"},
}
rr, err := Runs(mockModelFinder{}, simpleSS, defs)
require.NoError(t, err)
require.Len(t, rr, 1)
})
t.Run("two different definitions for same source", func(t *testing.T) {
defs := types.ReportFrameDefinitionSet{
{Name: "d1", Source: "l1"},
{Name: "d2", Source: "l1"},
}
rr, err := Runs(mockModelFinder{}, simpleSS, defs)
require.NoError(t, err)
require.Len(t, rr, 2)
require.Equal(t, "d1", rr[0].Defs[0].Name)
require.Equal(t, "d2", rr[1].Defs[0].Name)
})
t.Run("two defs for link", func(t *testing.T) {
defs := types.ReportFrameDefinitionSet{
{Name: "d1", Source: "lnk", Ref: "l1"},
{Name: "d1", Source: "lnk", Ref: "l2"},
}
linkSS := types.ReportStepSet{
{Load: &types.ReportStepLoad{
Name: "l1",
Source: "src",
Definition: map[string]interface{}{
"module": "mod",
"ns": "ns",
},
}},
{Load: &types.ReportStepLoad{
Name: "l2",
Source: "src",
Definition: map[string]interface{}{
"module": "mod",
"ns": "ns",
},
}},
{Link: &types.ReportStepLink{
Name: "lnk",
LocalSource: "l1",
ForeignSource: "l2",
LocalColumn: "lc",
ForeignColumn: "fc",
}},
}
rr, err := Runs(mockModelFinder{}, linkSS, defs)
require.NoError(t, err)
require.Len(t, rr, 1)
require.Equal(t, "d1", rr[0].Defs[0].Name)
require.Equal(t, "l1", rr[0].Defs[0].Ref)
require.Equal(t, "d1", rr[0].Defs[1].Name)
require.Equal(t, "l2", rr[0].Defs[1].Ref)
})
t.Run("link and regular", func(t *testing.T) {
defs := types.ReportFrameDefinitionSet{
{Name: "d1", Source: "lnk", Ref: "l1"},
{Name: "d1", Source: "lnk", Ref: "l2"},
{Name: "d2", Source: "l1"},
}
linkSS := types.ReportStepSet{
{Load: &types.ReportStepLoad{
Name: "l1",
Source: "src",
Definition: map[string]interface{}{
"module": "mod",
"ns": "ns",
},
}},
{Load: &types.ReportStepLoad{
Name: "l2",
Source: "src",
Definition: map[string]interface{}{
"module": "mod",
"ns": "ns",
},
}},
{Link: &types.ReportStepLink{
Name: "lnk",
LocalSource: "l1",
ForeignSource: "l2",
LocalColumn: "lc",
ForeignColumn: "fc",
}},
}
rr, err := Runs(mockModelFinder{}, linkSS, defs)
require.NoError(t, err)
require.Len(t, rr, 2)
require.Equal(t, "d1", rr[0].Defs[0].Name)
require.Equal(t, "l1", rr[0].Defs[0].Ref)
require.Equal(t, "d1", rr[0].Defs[1].Name)
require.Equal(t, "l2", rr[0].Defs[1].Ref)
require.Equal(t, "d2", rr[1].Defs[0].Name)
})
}
func TestFrames_regular(t *testing.T) {
ctx := context.Background()
buff := dal.InMemoryBuffer()
buff.Add(ctx, (&dal.Row{}).WithValue("id", 0, 1).WithValue("f1", 0, "f1 v1").WithValue("f2", 0, "f2 v1"))
buff.Add(ctx, (&dal.Row{}).WithValue("id", 0, 2).WithValue("f1", 0, "f1 v2").WithValue("f2", 0, "f2 v2"))
buff.Add(ctx, (&dal.Row{}).WithValue("id", 0, 3).WithValue("f1", 0, "f1 v3").WithValue("f2", 0, "f2 v3"))
r := run{
Pipeline: dal.Pipeline{&dal.Datasource{Ident: "l1"}},
Defs: types.ReportFrameDefinitionSet{
{
Name: "d1",
Source: "l1",
Columns: types.ReportFrameColumnSet{
{Name: "id", Label: "id", Kind: "Record"},
{Name: "f1", Label: "f1", Kind: "String"},
},
},
},
}
ff, err := Frames(ctx, buff, r)
require.NoError(t, err)
require.Len(t, ff, 1)
f := ff[0]
require.Len(t, f.Rows, 3)
require.Equal(t, types.ReportFrameRow{"1", "f1 v1"}, f.Rows[0])
require.Equal(t, types.ReportFrameRow{"2", "f1 v2"}, f.Rows[1])
require.Equal(t, types.ReportFrameRow{"3", "f1 v3"}, f.Rows[2])
}