internal/httpd/buildpages_test.go

v1.30.0
gitbay/internal/httpd/buildpages_test.go history · blame · raw

93 lines · 2599 bytes

 1package httpd
 2
 3import (
 4	"gitbay.org/gitbay/internal/control"
 5	"strings"
 6	"testing"
 7
 8	"gitbay.org/gitbay/internal/store"
 9	"gitbay.org/gitbay/internal/web"
10)
11
12func testRepoPage() repoPage {
13	var p repoPage
14	p.Repo = store.Repo{OwnerName: "krz", Name: "gitbay", DefaultBranch: "main"}
15	p.Host = "gitbay.org"
16	return p
17}
18
19// The build pages read their data from the build commands' JSON now, not
20// from store.Build. A renamed field would be a blank cell rather than a
21// compile error, so render both pages and look for the values.
22func TestBuildsPageRendersCommandOutput(t *testing.T) {
23	var sb strings.Builder
24	builds := []control.BuildOut{{
25		Number: 60, Job: "build", Status: "success",
26		SHA: "ff6271a9d4570cd46f169091637a9d2e40ad5c2b",
27		Ref: "cli-coverage", CreatedAt: "2026-08-28T04:42:54Z",
28	}}
29	jobs := []control.JobOut{{Name: "build"}, {Name: "nightly", Schedule: "0 3 * * *"}}
30	filter := buildFilter{}
31	err := web.Render(&sb, "builds.html", struct {
32		repoPage
33		Builds      []control.BuildOut
34		Jobs        []control.JobOut
35		Runs        []buildRun
36		Filter      buildFilter
37		FilterLinks []buildFilterLink
38		Refs        []string
39		CanWrite    bool
40		Notice      string
41	}{
42		testRepoPage(), builds, jobs, groupRuns(builds), filter, filterLinks(filter, jobs),
43		distinctRefs(builds, filter.Ref), true, "",
44	})
45	if err != nil {
46		t.Fatalf("render: %v", err)
47	}
48	out := sb.String()
49	for _, want := range []string{
50		"build", "success", "cli-coverage", "ff6271a9d4",
51		`value="build"`, `value="nightly"`, "schedule 0 3 * * *",
52	} {
53		if !strings.Contains(out, want) {
54			t.Errorf("builds.html missing %q", want)
55		}
56	}
57}
58
59func TestBuildPageRendersCommandOutput(t *testing.T) {
60	var sb strings.Builder
61	err := web.Render(&sb, "build.html", struct {
62		repoPage
63		Build    control.BuildOut
64		Log      string
65		CanWrite bool
66		Notice   string
67	}{
68		testRepoPage(),
69		control.BuildOut{
70			Number: 60, Job: "build", Status: "success",
71			SHA: "ff6271a9d4570cd46f169091637a9d2e40ad5c2b", Ref: "cli-coverage",
72			CreatedAt: "2026-08-28T04:42:54Z", FinishedAt: "2026-08-28T04:43:06Z",
73		},
74		"step 1 ok",
75		true, "",
76	})
77	if err != nil {
78		t.Fatalf("render: %v", err)
79	}
80	out := sb.String()
81	for _, want := range []string{
82		"Build 60", "success", "build on cli-coverage", "ff6271a9d4",
83		"2026-08-28 04:42", "2026-08-28 04:43", "step 1 ok",
84	} {
85		if !strings.Contains(out, want) {
86			t.Errorf("build.html missing %q", want)
87		}
88	}
89	// A finished build offers no cancel control, even to a writer.
90	if strings.Contains(out, "/cancel") {
91		t.Error("build.html offers cancel on a finished build")
92	}
93}