gui/pkg/display/hlcrf_test.go
Snider 2c5385e1cf
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Harden GUI storage and manifest paths
2026-04-15 20:43:48 +01:00

102 lines
3.3 KiB
Go

package display
import (
"os"
"path/filepath"
"strings"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestHLCRF_DefaultHLCRFTag_Good(t *testing.T) {
assert.Equal(t, "core-widget", defaultHLCRFTag("Widget.ts"))
}
func TestHLCRF_DefaultHLCRFTag_Bad(t *testing.T) {
assert.Equal(t, "feature-card", defaultHLCRFTag("feature_card.html"))
}
func TestHLCRF_DefaultHLCRFTag_Ugly(t *testing.T) {
assert.Equal(t, "core-", defaultHLCRFTag(""))
}
func TestHLCRF_BuildHLCRFComponents_Good(t *testing.T) {
root := t.TempDir()
require.NoError(t, os.MkdirAll(filepath.Join(root, ".core"), 0o755))
require.NoError(t, os.WriteFile(filepath.Join(root, "index.html"), []byte("<html></html>"), 0o644))
require.NoError(t, os.WriteFile(filepath.Join(root, "card.html"), []byte("<article>Card</article>"), 0o644))
require.NoError(t, os.WriteFile(filepath.Join(root, ".core", "view.yaml"), []byte(strings.Join([]string{
"hlcrf:",
" - name: card.html",
" - tag: core-inline",
" template: <section>Inline</section>",
}, "\n")), 0o644))
svc := &Service{}
script, err := svc.buildHLCRFComponents(filepath.Join(root, "index.html"))
require.NoError(t, err)
require.NotEmpty(t, script)
assert.Contains(t, script, "customElements.define")
assert.Contains(t, script, "article>Card</article>")
assert.Contains(t, script, "<section>Inline</section>")
assert.Contains(t, script, "core-card")
assert.Contains(t, script, "core-inline")
}
func TestHLCRF_CompileHLCRFTemplate_Good(t *testing.T) {
compiled := compileHLCRFTemplate(`<section data-slot="H">{{slot "H"}}</section><main>{{ slot "L-C" }}</main>`)
assert.Contains(t, compiled, `<slot name="H"></slot>`)
assert.Contains(t, compiled, `<slot name="L-C"></slot>`)
}
func TestHLCRF_BuildHLCRFComponents_Bad(t *testing.T) {
svc := &Service{}
script, err := svc.buildHLCRFComponents(filepath.Join(t.TempDir(), "missing.html"))
require.NoError(t, err)
assert.Empty(t, script)
}
func TestHLCRF_BuildHLCRFComponents_Ugly(t *testing.T) {
root := t.TempDir()
require.NoError(t, os.MkdirAll(filepath.Join(root, ".core"), 0o755))
require.NoError(t, os.WriteFile(filepath.Join(root, "index.html"), []byte("<html></html>"), 0o644))
require.NoError(t, os.WriteFile(filepath.Join(root, ".core", "view.yaml"), []byte(strings.Join([]string{
"hlcrf:",
" - name: missing.html",
" - template: <span>Fallback</span>",
}, "\n")), 0o644))
svc := &Service{}
script, err := svc.buildHLCRFComponents(filepath.Join(root, "index.html"))
require.NoError(t, err)
require.NotEmpty(t, script)
assert.Contains(t, script, "<span>Fallback</span>")
assert.NotContains(t, script, "missing.html")
}
func TestHLCRF_BuildHLCRFComponents_RejectsTraversal(t *testing.T) {
root := t.TempDir()
require.NoError(t, os.MkdirAll(filepath.Join(root, ".core"), 0o755))
require.NoError(t, os.WriteFile(filepath.Join(root, "index.html"), []byte("<html></html>"), 0o644))
require.NoError(t, os.WriteFile(filepath.Join(root, "outside.html"), []byte("<span>Outside</span>"), 0o644))
require.NoError(t, os.WriteFile(filepath.Join(root, ".core", "view.yaml"), []byte(strings.Join([]string{
"hlcrf:",
" - name: ../outside.html",
}, "\n")), 0o644))
svc := &Service{}
script, err := svc.buildHLCRFComponents(filepath.Join(root, "index.html"))
require.Error(t, err)
assert.Empty(t, script)
}