internal/httpd/buildpages_test.go
93 lines · 2548 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 Facets []facetGroup
38 Refs []string
39 CanWrite bool
40 Notice string
41 }{
42 testRepoPage(), builds, jobs, groupRuns(builds), filter, nil,
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}