1// SPDX-License-Identifier: AGPL-3.0-or-later
2
3package web
4
5import (
6 "bytes"
7 "context"
8 "testing"
9
10 "github.com/stretchr/testify/assert"
11 "github.com/stretchr/testify/require"
12
13 "bnema.dev/ermite/internal/domain"
14 "bnema.dev/ermite/internal/ports"
15)
16
17func TestChecksSectionRuns(t *testing.T) {
18 t.Parallel()
19 repo := domain.Repo{Name: repoName(t, "proj")}
20 check := func(run int64, name, event string) ports.CheckView {
21 return ports.CheckView{CICheck: domain.CICheck{RunID: run, Name: name, WorkflowName: "Smoke", Status: domain.CICompleted, Conclusion: domain.CISuccess}, Event: event}
22 }
23 a, b, c := check(7, "build", "push"), check(8, "build", "pull_request"), check(7, "test", "push")
24 single := checksSection(repo, []ports.CheckView{a, c})
25 require.Len(t, single.Rows, 2)
26 assert.Equal(t, []CheckRow{
27 {Name: "build", Kind: "ok", State: "success", Href: runHref("proj", 7)},
28 {Name: "test", Kind: "ok", State: "success", Href: runHref("proj", 7)},
29 }, single.Rows)
30 var flat bytes.Buffer
31 require.NoError(t, MRChecks(single).Render(context.Background(), &flat))
32 assert.NotContains(t, flat.String(), "ck-group")
33
34 multi := checksSection(repo, []ports.CheckView{a, b, c})
35 require.Len(t, multi.Rows, 3)
36 assert.Equal(t, "Smoke · push", multi.Rows[0].GroupLabel)
37 assert.Equal(t, "test", multi.Rows[1].Name)
38 assert.Empty(t, multi.Rows[1].GroupLabel)
39 assert.Equal(t, "Smoke · pull_request", multi.Rows[2].GroupLabel)
40 assert.Equal(t, runHref("proj", 8), multi.Rows[2].GroupHref)
41 var html bytes.Buffer
42 require.NoError(t, MRChecks(multi).Render(context.Background(), &html))
43 assert.Contains(t, html.String(), `Checks <span class="count">3</span>`)
44 assert.Contains(t, html.String(), `<li class="ck-group"><a href="`+runHref("proj", 7)+`">Smoke · push</a></li>`)
45 t.Log(html.String())
46 b.Event = ""
47 fallback := checksSection(repo, []ports.CheckView{a, b})
48 assert.Equal(t, "Smoke · run 8", fallback.Rows[1].GroupLabel)
49}