dashboard_entities_test.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package api
  2. import (
  3. "context"
  4. "testing"
  5. "connectrpc.com/connect"
  6. "github.com/stretchr/testify/assert"
  7. "github.com/stretchr/testify/require"
  8. apiv1 "github.com/OliveTin/OliveTin/gen/olivetin/api/v1"
  9. config "github.com/OliveTin/OliveTin/internal/config"
  10. "github.com/OliveTin/OliveTin/internal/entities"
  11. "github.com/OliveTin/OliveTin/internal/executor"
  12. )
  13. func TestBuildEntityFieldsetDisplayRendersEntityHtmlTitleAndCssClass(t *testing.T) {
  14. entities.ClearEntitiesOfType("html_display")
  15. defer entities.ClearEntitiesOfType("html_display")
  16. entities.AddEntity("html_display", "0", map[string]any{
  17. "content": "<div class=\"content\">test</div>",
  18. })
  19. cfg := config.DefaultConfig()
  20. cfg.Dashboards = []*config.DashboardComponent{
  21. {
  22. Title: "Stream status",
  23. Contents: []*config.DashboardComponent{
  24. {
  25. Title: "Compare result",
  26. Type: "fieldset",
  27. Entity: "html_display",
  28. Contents: []*config.DashboardComponent{
  29. {
  30. Type: "display",
  31. CssClass: "full_screen",
  32. Title: "{{ html_display.content }}",
  33. },
  34. },
  35. },
  36. },
  37. },
  38. }
  39. ex := executor.DefaultExecutor(cfg)
  40. ex.RebuildActionMap()
  41. rr := &DashboardRenderRequest{
  42. cfg: cfg,
  43. ex: ex,
  44. }
  45. fieldsets := buildEntityFieldsets("html_display", cfg.Dashboards[0].Contents[0], rr)
  46. require.Len(t, fieldsets, 1)
  47. display := findComponentByType(fieldsets[0].Contents, "display")
  48. require.NotNil(t, display)
  49. assert.Equal(t, "full_screen", display.CssClass)
  50. assert.Equal(t, "<div class=\"content\">test</div>", display.Title)
  51. }
  52. func findComponentByType(components []*apiv1.DashboardComponent, componentType string) *apiv1.DashboardComponent {
  53. for _, component := range components {
  54. if component.Type == componentType {
  55. return component
  56. }
  57. if found := findNestedComponent(component, componentType); found != nil {
  58. return found
  59. }
  60. }
  61. return nil
  62. }
  63. func findNestedComponent(component *apiv1.DashboardComponent, componentType string) *apiv1.DashboardComponent {
  64. if len(component.Contents) == 0 {
  65. return nil
  66. }
  67. return findComponentByType(component.Contents, componentType)
  68. }
  69. func TestGetDashboardEntityDisplayHtmlTitle(t *testing.T) {
  70. entities.ClearEntitiesOfType("html_display")
  71. defer entities.ClearEntitiesOfType("html_display")
  72. entities.AddEntity("html_display", "0", map[string]any{
  73. "content": "<div class=\"content\">test</div>",
  74. })
  75. cfg := config.DefaultConfig()
  76. cfg.Dashboards = []*config.DashboardComponent{
  77. {
  78. Title: "Html Dashboard",
  79. Contents: []*config.DashboardComponent{
  80. {
  81. Title: "Compare result",
  82. Type: "fieldset",
  83. Entity: "html_display",
  84. Contents: []*config.DashboardComponent{
  85. {
  86. Type: "display",
  87. CssClass: "full_screen",
  88. Title: "{{ html_display.content }}",
  89. },
  90. },
  91. },
  92. },
  93. },
  94. }
  95. ts, client := getNewTestServerAndClient(cfg)
  96. defer ts.Close()
  97. resp, err := client.GetDashboard(context.Background(), connect.NewRequest(&apiv1.GetDashboardRequest{
  98. Title: "Html Dashboard",
  99. }))
  100. require.NoError(t, err)
  101. display := findComponentByType(resp.Msg.Dashboard.Contents, "display")
  102. require.NotNil(t, display)
  103. assert.Equal(t, "full_screen", display.CssClass)
  104. assert.Equal(t, "<div class=\"content\">test</div>", display.Title)
  105. }