package web
import (
"strings"
"testing"
)
// A numbered ticket is known by its number (54c5175f): the list row and
// the page head say #N, and the hex id stays beside it as the address.
// A hex id is never printed behind "#" any more, since #N is a number.
func TestATicketShowsItsNumber(t *testing.T) {
var b strings.Builder
d := pageData{Repo: "q", Ticket: ticketDetail{ID: "abcdef0123456789", Number: 12,
Fields: []ticketField{{Name: "title", Value: "Export answers 400"}}}}
if err := ticketPage.ExecuteTemplate(&b, "content", d); err != nil {
t.Fatal(err)
}
if !strings.Contains(b.String(), `<span class="t-num" data-hook="ticket-number">#12</span> Export answers 400`) {
t.Fatal("FAIL: the page head does not lead with #12")
}
var plain strings.Builder
d.Ticket.Number = 0
if err := ticketPage.ExecuteTemplate(&plain, "content", d); err != nil {
t.Fatal(err)
}
if strings.Contains(plain.String(), `data-hook="ticket-number"`) {
t.Fatal("FAIL: an unnumbered ticket (a mirror's) shows a number")
}
var list strings.Builder
row := ticketRow{ticketSummary: ticketSummary{ID: "abcdef0123456789", Title: "Export answers 400", Number: 12}, Repo: "q", State: "open"}
if err := ticketListPage.ExecuteTemplate(&list, "content", pageData{Repo: "q", Rows: []ticketRow{row}}); err != nil {
t.Fatal(err)
}
if !strings.Contains(list.String(), `data-hook="ticket-number">#12</span> · <code>abcdef01</code>`) {
t.Error("FAIL: the list row does not read #12 · abcdef01")
}
if strings.Contains(list.String(), `<code>#abcdef01`) {
t.Error("FAIL: a list still prints a hex id behind #")
}
t.Log("ok: #12 leads the title; no number when there is none; no list prints #<hex>")
}
// The chooser lists every ticket a shared number names, each by its id.
func TestAChooserListsWhatANumberNames(t *testing.T) {
var b strings.Builder
err := ticketChooserPage.ExecuteTemplate(&b, "content", pageData{Repo: "q", Chooser: &ticketChooser{Number: 12,
Tickets: []namedRow{{ID: "aaaa1111bbbb2222", Title: "ours"}, {ID: "cccc3333dddd4444", Title: "theirs"}}}})
if err != nil {
t.Fatal(err)
}
got := b.String()
if !strings.Contains(got, `data-hook="ticket-chooser"`) || !strings.Contains(got, `href="/r/q/ticket/aaaa1111bbbb2222"`) || !strings.Contains(got, `href="/r/q/ticket/cccc3333dddd4444"`) {
t.Fatalf("FAIL: the chooser does not link both tickets:\n%s", got)
}
}