package assets
import (
"context"
"os"
"path/filepath"
"strings"
"testing"
"github.com/dushixiang/pika/internal/models"
)
type testSystemConfigProvider struct {
config *models.SystemConfig
}
func (p testSystemConfigProvider) GetSystemConfig(context.Context) (*models.SystemConfig, error) {
return p.config, nil
}
func TestRenderUIFilesInDir(t *testing.T) {
dir := t.TempDir()
indexPath := filepath.Join(dir, "index.html")
src := `
[[.SystemNameZh]][[if and .SystemNameZh .SystemNameEn]] | [[end]][[.SystemNameEn]]
`
if err := os.WriteFile(indexPath, []byte(src), 0644); err != nil {
t.Fatal(err)
}
provider := testSystemConfigProvider{
config: &models.SystemConfig{
SystemNameZh: "皮卡监控",
SystemNameEn: "Pika Monitor",
ICPCode: "ICP-1",
DefaultView: "grid",
CustomJS: `console.log("pika");`,
CustomCSS: `body { color: red; }`,
Version: "v1.2.3",
},
}
if err := RenderUIFilesInDir(dir, provider); err != nil {
t.Fatal(err)
}
rendered, err := os.ReadFile(indexPath)
if err != nil {
t.Fatal(err)
}
html := string(rendered)
for _, want := range []string{
"皮卡监控 | Pika Monitor",
`SystemNameZh: "皮卡监控"`,
`Version: "v1.2.3"`,
`console.log("pika");`,
`body { color: red; }`,
} {
if !strings.Contains(html, want) {
t.Fatalf("rendered index.html missing %q:\n%s", want, html)
}
}
if _, err := os.Stat(filepath.Join(dir, "index.html.tmpl")); err != nil {
t.Fatal(err)
}
}