internal/httpd/buildpages_test.go

2867b44a48ea8afa6b7c21d5e1d69272a7b235fa
gitbay/internal/httpd/buildpages_test.go history · blame · raw

88 lines · 2348 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	err := web.Render(&sb, "builds.html", struct {
25		repoPage
26		Builds   []control.BuildOut
27		Jobs     []control.JobOut
28		CanWrite bool
29		Notice   string
30	}{
31		testRepoPage(),
32		[]control.BuildOut{{
33			Number: 60, Job: "build", Status: "success",
34			SHA: "ff6271a9d4570cd46f169091637a9d2e40ad5c2b",
35			Ref: "cli-coverage", CreatedAt: "2026-08-28T04:42:54Z",
36		}},
37		[]control.JobOut{{Name: "build"}, {Name: "nightly", Schedule: "0 3 * * *"}},
38		true, "",
39	})
40	if err != nil {
41		t.Fatalf("render: %v", err)
42	}
43	out := sb.String()
44	for _, want := range []string{
45		"#60 build", "success", "cli-coverage", "ff6271a9d4",
46		`value="build"`, `value="nightly"`, "schedule 0 3 * * *",
47	} {
48		if !strings.Contains(out, want) {
49			t.Errorf("builds.html missing %q", want)
50		}
51	}
52}
53
54func TestBuildPageRendersCommandOutput(t *testing.T) {
55	var sb strings.Builder
56	err := web.Render(&sb, "build.html", struct {
57		repoPage
58		Build    control.BuildOut
59		Log      string
60		CanWrite bool
61		Notice   string
62	}{
63		testRepoPage(),
64		control.BuildOut{
65			Number: 60, Job: "build", Status: "success",
66			SHA: "ff6271a9d4570cd46f169091637a9d2e40ad5c2b", Ref: "cli-coverage",
67			CreatedAt: "2026-08-28T04:42:54Z", FinishedAt: "2026-08-28T04:43:06Z",
68		},
69		"step 1 ok",
70		true, "",
71	})
72	if err != nil {
73		t.Fatalf("render: %v", err)
74	}
75	out := sb.String()
76	for _, want := range []string{
77		"Build 60", "success", "build on cli-coverage", "ff6271a9d4",
78		"2026-08-28 04:42", "2026-08-28 04:43", "step 1 ok",
79	} {
80		if !strings.Contains(out, want) {
81			t.Errorf("build.html missing %q", want)
82		}
83	}
84	// A finished build offers no cancel control, even to a writer.
85	if strings.Contains(out, "/cancel") {
86		t.Error("build.html offers cancel on a finished build")
87	}
88}