package api
import (
"context"
"testing"
"connectrpc.com/connect"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
apiv1 "github.com/OliveTin/OliveTin/gen/olivetin/api/v1"
config "github.com/OliveTin/OliveTin/internal/config"
"github.com/OliveTin/OliveTin/internal/entities"
"github.com/OliveTin/OliveTin/internal/executor"
)
func TestBuildEntityFieldsetDisplayRendersEntityHtmlTitleAndCssClass(t *testing.T) {
entities.ClearEntitiesOfType("html_display")
defer entities.ClearEntitiesOfType("html_display")
entities.AddEntity("html_display", "0", map[string]any{
"content": "
test
",
})
cfg := config.DefaultConfig()
cfg.Dashboards = []*config.DashboardComponent{
{
Title: "Stream status",
Contents: []*config.DashboardComponent{
{
Title: "Compare result",
Type: "fieldset",
Entity: "html_display",
Contents: []*config.DashboardComponent{
{
Type: "display",
CssClass: "full_screen",
Title: "{{ html_display.content }}",
},
},
},
},
},
}
ex := executor.DefaultExecutor(cfg)
ex.RebuildActionMap()
rr := &DashboardRenderRequest{
cfg: cfg,
ex: ex,
}
fieldsets := buildEntityFieldsets("html_display", cfg.Dashboards[0].Contents[0], rr)
require.Len(t, fieldsets, 1)
display := findComponentByType(fieldsets[0].Contents, "display")
require.NotNil(t, display)
assert.Equal(t, "full_screen", display.CssClass)
assert.Equal(t, "test
", display.Title)
}
func findComponentByType(components []*apiv1.DashboardComponent, componentType string) *apiv1.DashboardComponent {
for _, component := range components {
if component.Type == componentType {
return component
}
if found := findNestedComponent(component, componentType); found != nil {
return found
}
}
return nil
}
func findNestedComponent(component *apiv1.DashboardComponent, componentType string) *apiv1.DashboardComponent {
if len(component.Contents) == 0 {
return nil
}
return findComponentByType(component.Contents, componentType)
}
func TestGetDashboardEntityDisplayHtmlTitle(t *testing.T) {
entities.ClearEntitiesOfType("html_display")
defer entities.ClearEntitiesOfType("html_display")
entities.AddEntity("html_display", "0", map[string]any{
"content": "test
",
})
cfg := config.DefaultConfig()
cfg.Dashboards = []*config.DashboardComponent{
{
Title: "Html Dashboard",
Contents: []*config.DashboardComponent{
{
Title: "Compare result",
Type: "fieldset",
Entity: "html_display",
Contents: []*config.DashboardComponent{
{
Type: "display",
CssClass: "full_screen",
Title: "{{ html_display.content }}",
},
},
},
},
},
}
ts, client := getNewTestServerAndClient(cfg)
defer ts.Close()
resp, err := client.GetDashboard(context.Background(), connect.NewRequest(&apiv1.GetDashboardRequest{
Title: "Html Dashboard",
}))
require.NoError(t, err)
display := findComponentByType(resp.Msg.Dashboard.Contents, "display")
require.NotNil(t, display)
assert.Equal(t, "full_screen", display.CssClass)
assert.Equal(t, "test
", display.Title)
}