70 lines
1.9 KiB
Go
70 lines
1.9 KiB
Go
package service
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"3588AdminBackend/internal/config"
|
|
)
|
|
|
|
func TestConfigPreviewServiceListsSources(t *testing.T) {
|
|
root := t.TempDir()
|
|
mustWrite(t, filepath.Join(root, "configs", "templates", "workshop_face_shoe_alarm.json"), `{}`)
|
|
mustWrite(t, filepath.Join(root, "configs", "profiles", "local_3588_test.json"), `{}`)
|
|
mustWrite(t, filepath.Join(root, "configs", "overlays", "face_debug.json"), `{}`)
|
|
|
|
svc := NewConfigPreviewService(&config.Config{MediaRepoPath: root})
|
|
sources, err := svc.ListSources()
|
|
if err != nil {
|
|
t.Fatalf("ListSources: %v", err)
|
|
}
|
|
|
|
if sources.Root != root {
|
|
t.Fatalf("expected root %q, got %q", root, sources.Root)
|
|
}
|
|
if got := sourceNames(sources.Templates); strings.Join(got, ",") != "workshop_face_shoe_alarm" {
|
|
t.Fatalf("unexpected templates: %v", got)
|
|
}
|
|
if got := sourceNames(sources.Profiles); strings.Join(got, ",") != "local_3588_test" {
|
|
t.Fatalf("unexpected profiles: %v", got)
|
|
}
|
|
if got := sourceNames(sources.Overlays); strings.Join(got, ",") != "face_debug" {
|
|
t.Fatalf("unexpected overlays: %v", got)
|
|
}
|
|
}
|
|
|
|
func TestConfigPreviewServiceRejectsUnsafeNames(t *testing.T) {
|
|
root := t.TempDir()
|
|
svc := NewConfigPreviewService(&config.Config{MediaRepoPath: root})
|
|
|
|
_, err := svc.Render(ConfigPreviewRequest{
|
|
Template: "../secret",
|
|
Profile: "local_3588_test",
|
|
ConfigID: "preview",
|
|
ConfigVersion: "v1",
|
|
})
|
|
if err == nil {
|
|
t.Fatal("expected unsafe template name to be rejected")
|
|
}
|
|
}
|
|
|
|
func sourceNames(items []ConfigSource) []string {
|
|
out := make([]string, 0, len(items))
|
|
for _, item := range items {
|
|
out = append(out, item.Name)
|
|
}
|
|
return out
|
|
}
|
|
|
|
func mustWrite(t *testing.T, path string, body string) {
|
|
t.Helper()
|
|
if err := os.MkdirAll(filepath.Dir(path), 0755); err != nil {
|
|
t.Fatalf("mkdir %s: %v", filepath.Dir(path), err)
|
|
}
|
|
if err := os.WriteFile(path, []byte(body), 0644); err != nil {
|
|
t.Fatalf("write %s: %v", path, err)
|
|
}
|
|
}
|