package adminconsole import ( "bytes" "io/fs" "strings" "testing" ) func TestRendererRendersDashboard(t *testing.T) { renderer, err := NewRenderer() if err != nil { t.Fatalf("NewRenderer: %v", err) } var buf bytes.Buffer err = renderer.Render(&buf, "dashboard", PageData{ Title: "Dashboard", Username: "ops-bob", ActiveNav: "dashboard", }) if err != nil { t.Fatalf("Render: %v", err) } out := buf.String() for _, want := range []string{ "", "Dashboard", "ops-bob", `href="/_gm/users"`, "/_gm/assets/console.css", } { if !strings.Contains(out, want) { t.Errorf("rendered page missing %q\n--- page ---\n%s", want, out) } } } func TestRendererUnknownPage(t *testing.T) { renderer := MustNewRenderer() if err := renderer.Render(&bytes.Buffer{}, "does-not-exist", PageData{}); err == nil { t.Fatal("expected an error rendering an unknown page") } } func TestRendererEscapesUsername(t *testing.T) { renderer := MustNewRenderer() var buf bytes.Buffer if err := renderer.Render(&buf, "dashboard", PageData{Username: ""}); err != nil { t.Fatalf("Render: %v", err) } if strings.Contains(buf.String(), "") { t.Error("username was not HTML-escaped in the rendered page") } } func TestAssetsContainsStylesheet(t *testing.T) { fsys, err := Assets() if err != nil { t.Fatalf("Assets: %v", err) } if _, err := fs.Stat(fsys, "console.css"); err != nil { t.Fatalf("console.css missing from embedded assets: %v", err) } }