internal/httpd/buildpages_test.go
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}