Skip to content

Commit cae110f

Browse files
committed
Add more tests
1 parent 509c49a commit cae110f

File tree

3 files changed

+327
-0
lines changed

3 files changed

+327
-0
lines changed
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
package reporter
2+
3+
import (
4+
"log/slog"
5+
"net/http"
6+
"net/http/httptest"
7+
"testing"
8+
"time"
9+
10+
"github.com/neilotoole/slogt"
11+
"github.com/stretchr/testify/require"
12+
)
13+
14+
func TestGithubReporterDelete(t *testing.T) {
15+
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
16+
w.WriteHeader(http.StatusOK)
17+
}))
18+
defer srv.Close()
19+
20+
slog.SetDefault(slogt.New(t))
21+
r, err := NewGithubReporter(
22+
t.Context(),
23+
"v0.0.0",
24+
srv.URL,
25+
srv.URL,
26+
time.Second,
27+
"token",
28+
"owner",
29+
"repo",
30+
123,
31+
50,
32+
"HEAD",
33+
false,
34+
)
35+
require.NoError(t, err)
36+
37+
// Delete should always return nil
38+
err = r.Delete(t.Context(), nil, ExistingComment{})
39+
require.NoError(t, err)
40+
}
41+
42+
func TestGithubReporterIsEqual(t *testing.T) {
43+
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
44+
w.WriteHeader(http.StatusOK)
45+
}))
46+
defer srv.Close()
47+
48+
slog.SetDefault(slogt.New(t))
49+
r, err := NewGithubReporter(
50+
t.Context(),
51+
"v0.0.0",
52+
srv.URL,
53+
srv.URL,
54+
time.Second,
55+
"token",
56+
"owner",
57+
"repo",
58+
123,
59+
50,
60+
"HEAD",
61+
false,
62+
)
63+
require.NoError(t, err)
64+
65+
type testCaseT struct {
66+
name string
67+
existing ExistingComment
68+
pending PendingComment
69+
expected bool
70+
}
71+
72+
testCases := []testCaseT{
73+
{
74+
name: "different paths",
75+
existing: ExistingComment{
76+
path: "file1.yml",
77+
line: 10,
78+
text: "comment",
79+
},
80+
pending: PendingComment{
81+
path: "file2.yml",
82+
line: 10,
83+
text: "comment",
84+
},
85+
expected: false,
86+
},
87+
{
88+
name: "same path, different text",
89+
existing: ExistingComment{
90+
path: "file.yml",
91+
line: 10,
92+
text: "comment1",
93+
},
94+
pending: PendingComment{
95+
path: "file.yml",
96+
line: 10,
97+
text: "comment2",
98+
},
99+
expected: false,
100+
},
101+
}
102+
103+
for _, tc := range testCases {
104+
t.Run(tc.name, func(t *testing.T) {
105+
// Use empty ghPR for simple path/text comparison tests
106+
dst := ghPR{files: nil}
107+
result := r.IsEqual(dst, tc.existing, tc.pending)
108+
require.Equal(t, tc.expected, result)
109+
})
110+
}
111+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package reporter
2+
3+
import (
4+
"log/slog"
5+
"testing"
6+
7+
"github.com/neilotoole/slogt"
8+
)
9+
10+
func TestGitlabLogger(t *testing.T) {
11+
t.Run("Info logs message", func(t *testing.T) {
12+
slog.SetDefault(slogt.New(t))
13+
logger := gitlabLogger{}
14+
// This should not panic and should log
15+
logger.Info("test info message", "key1", "value1", "key2", 123)
16+
})
17+
18+
t.Run("Warn logs message", func(t *testing.T) {
19+
slog.SetDefault(slogt.New(t))
20+
logger := gitlabLogger{}
21+
// This should not panic and should log
22+
logger.Warn("test warn message", "key1", "value1")
23+
})
24+
25+
t.Run("Error logs message", func(t *testing.T) {
26+
slog.SetDefault(slogt.New(t))
27+
logger := gitlabLogger{}
28+
// This should not panic and should log
29+
logger.Error("test error message")
30+
})
31+
32+
t.Run("Debug logs message", func(t *testing.T) {
33+
slog.SetDefault(slogt.New(t))
34+
logger := gitlabLogger{}
35+
// This should not panic and should log
36+
logger.Debug("test debug message", "key", "value")
37+
})
38+
}

internal/reporter/json_test.go

Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
package reporter_test
2+
3+
import (
4+
"bytes"
5+
"context"
6+
"encoding/json"
7+
"strings"
8+
"testing"
9+
10+
"github.com/prometheus/common/model"
11+
"github.com/stretchr/testify/require"
12+
13+
"github.com/cloudflare/pint/internal/checks"
14+
"github.com/cloudflare/pint/internal/diags"
15+
"github.com/cloudflare/pint/internal/discovery"
16+
"github.com/cloudflare/pint/internal/parser"
17+
"github.com/cloudflare/pint/internal/reporter"
18+
)
19+
20+
func TestJSONReporter(t *testing.T) {
21+
t.Run("NewJSONReporter creates reporter", func(t *testing.T) {
22+
buf := &bytes.Buffer{}
23+
jr := reporter.NewJSONReporter(buf)
24+
require.NotNil(t, jr)
25+
})
26+
27+
t.Run("Submit with empty summary", func(t *testing.T) {
28+
buf := &bytes.Buffer{}
29+
jr := reporter.NewJSONReporter(buf)
30+
31+
summary := reporter.NewSummary([]reporter.Report{})
32+
err := jr.Submit(context.Background(), summary)
33+
require.NoError(t, err)
34+
35+
var result []reporter.JSONReport
36+
err = json.Unmarshal(buf.Bytes(), &result)
37+
require.NoError(t, err)
38+
require.Empty(t, result)
39+
})
40+
41+
t.Run("Submit with single report", func(t *testing.T) {
42+
buf := &bytes.Buffer{}
43+
jr := reporter.NewJSONReporter(buf)
44+
45+
p := parser.NewParser(false, parser.PrometheusSchema, model.UTF8Validation)
46+
mockFile := p.Parse(strings.NewReader(`
47+
- record: test
48+
expr: up == 0
49+
`))
50+
51+
summary := reporter.NewSummary([]reporter.Report{
52+
{
53+
Path: discovery.Path{
54+
Name: "test.yml",
55+
SymlinkTarget: "test.yml",
56+
},
57+
Owner: "team-a",
58+
ModifiedLines: []int{2},
59+
Rule: mockFile.Groups[0].Rules[0],
60+
Problem: checks.Problem{
61+
Lines: diags.LineRange{
62+
First: 1,
63+
Last: 2,
64+
},
65+
Reporter: "test-reporter",
66+
Summary: "test error",
67+
Details: "test details",
68+
Severity: checks.Fatal,
69+
},
70+
},
71+
})
72+
73+
err := jr.Submit(context.Background(), summary)
74+
require.NoError(t, err)
75+
76+
var result []reporter.JSONReport
77+
err = json.Unmarshal(buf.Bytes(), &result)
78+
require.NoError(t, err)
79+
require.Len(t, result, 1)
80+
require.Equal(t, "test.yml", result[0].Path)
81+
require.Equal(t, "team-a", result[0].Owner)
82+
require.Equal(t, "test-reporter", result[0].Reporter)
83+
require.Equal(t, "test error", result[0].Problem)
84+
require.Equal(t, "test details", result[0].Details)
85+
require.Equal(t, "Fatal", result[0].Severity)
86+
require.Equal(t, []int{1, 2}, result[0].Lines)
87+
})
88+
89+
t.Run("Submit with multiple reports", func(t *testing.T) {
90+
buf := &bytes.Buffer{}
91+
jr := reporter.NewJSONReporter(buf)
92+
93+
p := parser.NewParser(false, parser.PrometheusSchema, model.UTF8Validation)
94+
mockFile := p.Parse(strings.NewReader(`
95+
- record: test1
96+
expr: up == 0
97+
- record: test2
98+
expr: down == 1
99+
`))
100+
101+
summary := reporter.NewSummary([]reporter.Report{
102+
{
103+
Path: discovery.Path{
104+
Name: "test1.yml",
105+
SymlinkTarget: "test1.yml",
106+
},
107+
Rule: mockFile.Groups[0].Rules[0],
108+
Problem: checks.Problem{
109+
Lines: diags.LineRange{First: 1, Last: 1},
110+
Reporter: "reporter1",
111+
Summary: "error1",
112+
Severity: checks.Warning,
113+
},
114+
},
115+
{
116+
Path: discovery.Path{
117+
Name: "test2.yml",
118+
SymlinkTarget: "test2.yml",
119+
},
120+
Rule: mockFile.Groups[0].Rules[1],
121+
Problem: checks.Problem{
122+
Lines: diags.LineRange{First: 3, Last: 5},
123+
Reporter: "reporter2",
124+
Summary: "error2",
125+
Details: "details2",
126+
Severity: checks.Bug,
127+
},
128+
},
129+
})
130+
131+
err := jr.Submit(context.Background(), summary)
132+
require.NoError(t, err)
133+
134+
var result []reporter.JSONReport
135+
err = json.Unmarshal(buf.Bytes(), &result)
136+
require.NoError(t, err)
137+
require.Len(t, result, 2)
138+
require.Equal(t, "test1.yml", result[0].Path)
139+
require.Equal(t, "test2.yml", result[1].Path)
140+
})
141+
142+
t.Run("Submit with report without owner and details", func(t *testing.T) {
143+
buf := &bytes.Buffer{}
144+
jr := reporter.NewJSONReporter(buf)
145+
146+
p := parser.NewParser(false, parser.PrometheusSchema, model.UTF8Validation)
147+
mockFile := p.Parse(strings.NewReader(`
148+
- record: test
149+
expr: up
150+
`))
151+
152+
summary := reporter.NewSummary([]reporter.Report{
153+
{
154+
Path: discovery.Path{
155+
Name: "test.yml",
156+
SymlinkTarget: "test.yml",
157+
},
158+
Rule: mockFile.Groups[0].Rules[0],
159+
Problem: checks.Problem{
160+
Lines: diags.LineRange{First: 1, Last: 1},
161+
Reporter: "test",
162+
Summary: "test",
163+
Severity: checks.Information,
164+
},
165+
},
166+
})
167+
168+
err := jr.Submit(context.Background(), summary)
169+
require.NoError(t, err)
170+
171+
var result []reporter.JSONReport
172+
err = json.Unmarshal(buf.Bytes(), &result)
173+
require.NoError(t, err)
174+
require.Len(t, result, 1)
175+
require.Empty(t, result[0].Owner)
176+
require.Empty(t, result[0].Details)
177+
})
178+
}

0 commit comments

Comments
 (0)