internal/httpd/buildpages_test.go
81 lines · 2131 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 }{
61 testRepoPage(),
62 control.BuildOut{
63 Number: 60, Job: "build", Status: "success",
64 SHA: "ff6271a9d4570cd46f169091637a9d2e40ad5c2b", Ref: "cli-coverage",
65 CreatedAt: "2026-08-28T04:42:54Z", FinishedAt: "2026-08-28T04:43:06Z",
66 },
67 "step 1 ok",
68 })
69 if err != nil {
70 t.Fatalf("render: %v", err)
71 }
72 out := sb.String()
73 for _, want := range []string{
74 "Build 60", "success", "build on cli-coverage", "ff6271a9d4",
75 "2026-08-28 04:42", "2026-08-28 04:43", "step 1 ok",
76 } {
77 if !strings.Contains(out, want) {
78 t.Errorf("build.html missing %q", want)
79 }
80 }
81}