arnaucube
arnaucube/gitviewPublic Self-hosted repository
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}