package httpd
import (
"html/template"
"strings"
"testing"
"gitbay.org/gitbay/internal/store"
"gitbay.org/gitbay/internal/web"
)
// A signed-in viewer with zero issues gets a link to open one; a
// signed-out visitor gets only the fact, and no CLI command either way
// (#270).
func TestIssuesEmptyStateOffersOpenLinkForViewer(t *testing.T) {
render := func(viewer string) string {
var sb strings.Builder
p := testRepoPage()
p.Viewer = viewer
if err := web.Render(&sb, "issues.html", struct {
repoPage
State string
Label string
Query string
Filters []listFilter
Facets []facetGroup
Issues []store.Issue
LabelColors map[string]template.CSS
Older string
}{repoPage: p, State: "open"}); err != nil {
t.Fatalf("render: %v", err)
}
return sb.String()
}
anon := render("")
if !strings.Contains(anon, "no open issues") {
t.Errorf("missing empty-state fact:\n%s", anon)
}
if strings.Contains(anon, "issues/new") {
t.Error("signed-out visitor should not see an open-issue link")
}
if strings.Contains(anon, "gitbay issue create") {
t.Error("empty state should not name a CLI command")
}
viewer := render("alice")
if !strings.Contains(viewer, `href="/krz/gitbay/issues/new"`) {
t.Errorf("signed-in viewer missing the open-issue link:\n%s", viewer)
}
}
// An empty release list states the fact without a CLI command; the page
// already offers the create form above when the viewer can write and a
// tag is free to release (#270).
func TestReleasesEmptyStateHasNoCLICommand(t *testing.T) {
var sb strings.Builder
if err := web.Render(&sb, "releases.html", struct {
repoPage
Releases []struct {
store.Release
NotesHTML template.HTML
}
FreeTags []string
CanWrite bool
Notice string
Draft *draft
}{repoPage: testRepoPage()}); err != nil {
t.Fatalf("render: %v", err)
}
out := sb.String()
if !strings.Contains(out, "no releases yet") {
t.Errorf("missing empty-state fact:\n%s", out)
}
if strings.Contains(out, "gitbay release create") {
t.Error("empty state should not name a CLI command")
}
}