package web
import (
"encoding/json"
"strings"
"testing"
)
// A large check-in (checkin.diff's large mode) draws its files, each
// with its counts and a link to its own diff, and no hunks.
func TestALargeCheckinPageListsItsFiles(t *testing.T) {
var dd diffDetail
if err := json.Unmarshal([]byte(`{"from":"aa","to":"bbbb","large":true,"totalLines":40001,
"files":[{"status":"M","name":"src/z.go"},{"status":"A","name":"gen/a b.json"}],
"counts":{"src/z.go":{"Added":1,"Removed":2},"gen/a b.json":{"Added":39998,"Removed":0}}}`), &dd); err != nil {
t.Fatal(err)
}
dd.Repo = "alpha"
var buf strings.Builder
if err := noHooks.template(diffPage).ExecuteTemplate(&buf, "diff-body", pageData{Repo: "alpha", Diff: dd}); err != nil {
t.Fatal(err)
}
got := buf.String()
if !strings.Contains(got, `data-hook="diff-large" data-files="2"`) || strings.Count(got, `data-hook="diff-large-file"`) != 2 {
t.Fatalf("FAIL: the large diff does not list its two files: %s", got)
}
if !strings.Contains(got, `href="/r/alpha/checkin/bbbb/diff?file=gen%2Fa%20b.json"`) || !strings.Contains(got, "+39998") {
t.Errorf("FAIL: a file lacks its own diff link or its counts: %s", got)
}
if i, j := strings.Index(got, "gen/a b.json"), strings.Index(got, "src/z.go"); i < 0 || j < 0 || i > j {
t.Error("FAIL: the files are not in path order")
}
}