gitview/internal/routes/languages_test.go
internal/routes/languages_test.goRaw
1package routes
2
3import (
4 "net/http/httptest"
5 "os"
6 "path/filepath"
7 "strings"
8 "testing"
9 "time"
10
11 gogit "github.com/go-git/go-git/v5"
12 "github.com/go-git/go-git/v5/plumbing"
13 "github.com/go-git/go-git/v5/plumbing/object"
14)
15
16// Both views must describe the selected default branch, even when HEAD differs.
17func TestLanguageViewsUseDefaultBranch(t *testing.T) {
18 c, _ := testWorkspace(t)
19 path := filepath.Join(c.Repo.ScanPath, "sample")
20 repo, err := gogit.PlainOpen(path)
21 if err != nil {
22 t.Fatal(err)
23 }
24 if err := repo.Storer.SetReference(plumbing.NewSymbolicReference(plumbing.HEAD, plumbing.NewBranchReferenceName("develop"))); err != nil {
25 t.Fatal(err)
26 }
27 if err := os.WriteFile(filepath.Join(path, "script.py"), []byte(strings.Repeat("print('hello')\n", 100)), 0644); err != nil {
28 t.Fatal(err)
29 }
30 wt, err := repo.Worktree()
31 if err != nil {
32 t.Fatal(err)
33 }
34 if _, err := wt.Add("script.py"); err != nil {
35 t.Fatal(err)
36 }
37 if _, err := wt.Commit("Add Python on develop", &gogit.CommitOptions{Author: &object.Signature{Name: "Test", Email: "test@example.com", When: time.Now()}}); err != nil {
38 t.Fatal(err)
39 }
40 for _, branch := range []string{"main", "develop"} {
41 c.Repo.MainBranch = []string{branch}
42 handler := Handlers(c)
43 for _, url := range []string{"/", "/sample"} {
44 w := httptest.NewRecorder()
45 handler.ServeHTTP(w, httptest.NewRequest("GET", url, nil))
46 body := w.Body.String()
47 if w.Code != 200 {
48 t.Fatalf("%s on %s: status %d", url, branch, w.Code)
49 }
50 if strings.Contains(body, "ZgotmplZ") {
51 t.Fatal("template rejected language colors or bar sizes")
52 }
53 if url == "/" {
54 language := "Go"
55 if branch == "develop" {
56 language = "Python"
57 }
58 if !strings.Contains(body, `class="repo-language"`) || !strings.Contains(body, `</span>`+language+`</span>`) {
59 t.Errorf("index on %s: missing primary language %s", branch, language)
60 }
61 } else {
62 if !strings.Contains(body, `class="language-bar"`) || !strings.Contains(body, `class="language-legend"`) {
63 t.Fatal("repository page missing language breakdown")
64 }
65 if branch == "main" && !strings.Contains(body, "100.0%") {
66 t.Fatal("single language share should be 100%")
67 }
68 if branch == "develop" && !strings.Contains(body, "<strong>Python</strong>") {
69 t.Fatal("branch language statistics were not refreshed")
70 }
71 }
72 }
73 }
74}