Skip to content
quarry Artifact [9751986da9]
Login

Artifact [9751986da9]

Artifact 9751986da98caeacca4345c15b63a0e303667211f4dd12948b9b8545f73c2379:


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 := noHooks.template(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 := noHooks.template(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 := noHooks.template(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 := noHooks.template(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)
	}
}