gitcat
1package server
2
3import (
4 "net/http"
5 "net/http/httptest"
6 "strings"
7 "testing"
8)
9
10// TestBlobRendersContent 回归测试:曾出现「限量读取返回空内容」的 bug——
11// 限流缓冲拿到了数据,却返回了另一个空缓冲,导致所有文件预览全白。
12func TestBlobRendersContent(t *testing.T) {
13 srv, st, _, _ := newTestServer(t)
14 dir := makeRepo(t, srv, st, "read", nil)
15 commitFiles(t, dir, "init", map[string]string{"main.go": "package main\n\nfunc main() {}\n"})
16
17 r := httptest.NewRequest(http.MethodGet, "/read/blob/main/main.go", nil)
18 w := httptest.NewRecorder()
19 srv.Handler().ServeHTTP(w, r)
20 if w.Code != http.StatusOK {
21 t.Fatalf("状态码 = %d", w.Code)
22 }
23 html := w.Body.String()
24 for _, want := range []string{"package main", "func main"} {
25 if !strings.Contains(html, want) {
26 t.Errorf("页面缺少文件内容 %q,疑似读取返回空内容", want)
27 }
28 }
29 if !strings.Contains(html, "codeline") {
30 t.Error("未渲染代码视图")
31 }
32}
33
34// TestReadmeRendersOnHome 确认首页能渲染 README(同样依赖 BlobLimited)。
35func TestReadmeRendersOnHome(t *testing.T) {
36 srv, st, _, _ := newTestServer(t)
37 dir := makeRepo(t, srv, st, "doc", nil)
38 commitFiles(t, dir, "init", map[string]string{"README.md": "# 标题\n\n一段说明。\n"})
39
40 r := httptest.NewRequest(http.MethodGet, "/doc", nil)
41 w := httptest.NewRecorder()
42 srv.Handler().ServeHTTP(w, r)
43 if w.Code != http.StatusOK {
44 t.Fatalf("状态码 = %d", w.Code)
45 }
46 if html := w.Body.String(); !strings.Contains(html, "一段说明") {
47 t.Error("README 未渲染,疑似 BlobLimited 返回空内容")
48 }
49}