Skip to content

Commit 2d53b5b

Browse files
committed
fix: lint errors
1 parent 7dab720 commit 2d53b5b

5 files changed

Lines changed: 59 additions & 23 deletions

File tree

experimental/analyzer/registry_evm_test.go

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@ import (
44
"testing"
55

66
"github.com/Masterminds/semver/v3"
7-
"github.com/smartcontractkit/chainlink-deployments-framework/deployment"
87
"github.com/stretchr/testify/assert"
8+
"github.com/stretchr/testify/require"
9+
10+
"github.com/smartcontractkit/chainlink-deployments-framework/deployment"
911
)
1012

1113
func TestEnvironmentEVMRegistry_GetABIByAddress(t *testing.T) {
14+
t.Parallel()
1215
typeAndVersion := deployment.TypeAndVersion{
1316
Type: deployment.ContractType("test"),
1417
Version: *semver.MustParse("1.0.0"),
@@ -26,23 +29,25 @@ func TestEnvironmentEVMRegistry_GetABIByAddress(t *testing.T) {
2629
}
2730

2831
abiObj, abiStr, err := registry.GetABIByAddress(1, "0xabc123")
29-
assert.NoError(t, err)
32+
require.NoError(t, err)
3033
assert.NotNil(t, abiObj)
31-
assert.Equal(t, `[{"type":"function","name":"test","inputs":[]}]`, abiStr)
34+
assert.JSONEq(t, `[{"type":"function","name":"test","inputs":[]}]`, abiStr)
3235
}
3336

3437
func TestEnvironmentEVMRegistry_GetABIByAddress_ChainNotFound(t *testing.T) {
38+
t.Parallel()
3539
registry := &environmentEVMRegistry{
3640
abiRegistry: map[string]string{},
3741
addressesByChain: map[uint64]map[string]deployment.TypeAndVersion{},
3842
}
3943

4044
_, _, err := registry.GetABIByAddress(999, "0xabc123")
41-
assert.Error(t, err)
45+
require.Error(t, err)
4246
assert.Contains(t, err.Error(), "no addresses found for chain selector")
4347
}
4448

4549
func TestEnvironmentEVMRegistry_GetABIByAddress_AddressNotFound(t *testing.T) {
50+
t.Parallel()
4651
registry := &environmentEVMRegistry{
4752
abiRegistry: map[string]string{},
4853
addressesByChain: map[uint64]map[string]deployment.TypeAndVersion{
@@ -51,11 +56,12 @@ func TestEnvironmentEVMRegistry_GetABIByAddress_AddressNotFound(t *testing.T) {
5156
}
5257

5358
_, _, err := registry.GetABIByAddress(1, "0xabc123")
54-
assert.Error(t, err)
59+
require.Error(t, err)
5560
assert.Contains(t, err.Error(), "address 0xabc123 not found")
5661
}
5762

5863
func TestEnvironmentEVMRegistry_GetABIByType(t *testing.T) {
64+
t.Parallel()
5965
typeAndVersion := deployment.TypeAndVersion{
6066
Type: deployment.ContractType("test"),
6167
Version: *semver.MustParse("1.0.0"),
@@ -68,12 +74,13 @@ func TestEnvironmentEVMRegistry_GetABIByType(t *testing.T) {
6874
}
6975

7076
abiObj, abiStr, err := registry.GetABIByType(typeAndVersion)
71-
assert.NoError(t, err)
77+
require.NoError(t, err)
7278
assert.NotNil(t, abiObj)
73-
assert.Equal(t, `[{"type":"function","name":"test","inputs":[]}]`, abiStr)
79+
assert.JSONEq(t, `[{"type":"function","name":"test","inputs":[]}]`, abiStr)
7480
}
7581

7682
func TestEnvironmentEVMRegistry_GetABIByType_NotFound(t *testing.T) {
83+
t.Parallel()
7784
registry := &environmentEVMRegistry{
7885
abiRegistry: map[string]string{},
7986
}
@@ -84,11 +91,12 @@ func TestEnvironmentEVMRegistry_GetABIByType_NotFound(t *testing.T) {
8491
}
8592

8693
_, _, err := registry.GetABIByType(typeAndVersion)
87-
assert.Error(t, err)
94+
require.Error(t, err)
8895
assert.Contains(t, err.Error(), "ABI not found")
8996
}
9097

9198
func TestEnvironmentEVMRegistry_GetABIByType_InvalidABI(t *testing.T) {
99+
t.Parallel()
92100
typeAndVersion := deployment.TypeAndVersion{
93101
Type: deployment.ContractType("test"),
94102
Version: *semver.MustParse("1.0.0"),
@@ -101,11 +109,12 @@ func TestEnvironmentEVMRegistry_GetABIByType_InvalidABI(t *testing.T) {
101109
}
102110

103111
_, _, err := registry.GetABIByType(typeAndVersion)
104-
assert.Error(t, err)
112+
require.Error(t, err)
105113
assert.Contains(t, err.Error(), "failed to parse ABI")
106114
}
107115

108116
func TestEnvironmentEVMRegistry_GetAllABIs(t *testing.T) {
117+
t.Parallel()
109118
registry := &environmentEVMRegistry{
110119
abiRegistry: map[string]string{
111120
"test:1.0.0": `[{"type":"function","name":"test","inputs":[]}]`,
@@ -117,11 +126,12 @@ func TestEnvironmentEVMRegistry_GetAllABIs(t *testing.T) {
117126
assert.Len(t, abis, 2)
118127
assert.Contains(t, abis, "test:1.0.0")
119128
assert.Contains(t, abis, "mock:2.0.0")
120-
assert.Equal(t, `[{"type":"function","name":"test","inputs":[]}]`, abis["test:1.0.0"])
121-
assert.Equal(t, `[{"type":"function","name":"mock","inputs":[]}]`, abis["mock:2.0.0"])
129+
assert.JSONEq(t, `[{"type":"function","name":"test","inputs":[]}]`, abis["test:1.0.0"])
130+
assert.JSONEq(t, `[{"type":"function","name":"mock","inputs":[]}]`, abis["mock:2.0.0"])
122131
}
123132

124133
func TestEnvironmentEVMRegistry_AddABI(t *testing.T) {
134+
t.Parallel()
125135
registry := &environmentEVMRegistry{
126136
abiRegistry: map[string]string{},
127137
}
@@ -133,13 +143,14 @@ func TestEnvironmentEVMRegistry_AddABI(t *testing.T) {
133143
abiStr := `[{"type":"function","name":"test","inputs":[]}]`
134144

135145
err := registry.AddABI(typeAndVersion, abiStr)
136-
assert.NoError(t, err)
146+
require.NoError(t, err)
137147

138148
// Note: The current implementation doesn't modify the registry in place due to receiver type
139149
// This test verifies the method doesn't error on valid ABI
140150
}
141151

142152
func TestEnvironmentEVMRegistry_AddABI_InvalidABI(t *testing.T) {
153+
t.Parallel()
143154
registry := &environmentEVMRegistry{
144155
abiRegistry: map[string]string{},
145156
}
@@ -151,6 +162,6 @@ func TestEnvironmentEVMRegistry_AddABI_InvalidABI(t *testing.T) {
151162
invalidABI := `invalid json`
152163

153164
err := registry.AddABI(typeAndVersion, invalidABI)
154-
assert.Error(t, err)
165+
require.Error(t, err)
155166
assert.Contains(t, err.Error(), "failed to parse ABI")
156167
}

experimental/analyzer/renderer_markdown_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -550,6 +550,7 @@ func TestTruncateMiddle(t *testing.T) {
550550

551551
// Additional tests for functions with 0% coverage
552552
func TestMarkdownRenderer_renderCallHelper(t *testing.T) {
553+
t.Parallel()
553554
renderer := NewMarkdownRenderer()
554555
ctx := NewFieldContext(nil)
555556

@@ -572,6 +573,7 @@ func TestMarkdownRenderer_renderCallHelper(t *testing.T) {
572573
}
573574

574575
func TestMarkdownRenderer_renderFieldHelper(t *testing.T) {
576+
t.Parallel()
575577
renderer := NewMarkdownRenderer()
576578
ctx := NewFieldContext(nil)
577579

@@ -583,6 +585,7 @@ func TestMarkdownRenderer_renderFieldHelper(t *testing.T) {
583585
}
584586

585587
func TestMarkdownRenderer_isSimpleValue(t *testing.T) {
588+
t.Parallel()
586589
renderer := NewMarkdownRenderer()
587590

588591
tests := []struct {
@@ -605,13 +608,15 @@ func TestMarkdownRenderer_isSimpleValue(t *testing.T) {
605608

606609
for _, tt := range tests {
607610
t.Run(tt.name, func(t *testing.T) {
611+
t.Parallel()
608612
result := renderer.isSimpleValue(tt.value)
609613
assert.Equal(t, tt.expected, result)
610614
})
611615
}
612616
}
613617

614618
func TestMarkdownRenderer_indentString(t *testing.T) {
619+
t.Parallel()
615620
input := "line1\nline2\nline3"
616621
result := indentString(input)
617622

@@ -622,6 +627,7 @@ func TestMarkdownRenderer_indentString(t *testing.T) {
622627
}
623628

624629
func TestMarkdownRenderer_indentStringWith(t *testing.T) {
630+
t.Parallel()
625631
input := "line1\nline2"
626632
customIndent := " "
627633
result := indentStringWith(input, customIndent)

experimental/analyzer/renderer_text.go

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ type TextRenderer struct {
2828
yamlFieldTmpl *template.Template
2929
arrayFieldTmpl *template.Template
3030
structFieldTmpl *template.Template
31+
namedFieldTmpl *template.Template
3132
}
3233

3334
// NewTextRenderer creates a new TextRenderer
@@ -43,10 +44,11 @@ func NewTextRenderer() *TextRenderer {
4344
// initTemplates compiles all templates with their helper functions
4445
func (r *TextRenderer) initTemplates() {
4546
funcMap := template.FuncMap{
46-
"renderField": r.renderFieldHelper,
47-
"renderCall": r.renderCallHelper,
48-
"getChainName": GetChainNameBySelector,
49-
"hexEncode": hexutil.Encode,
47+
"renderField": r.renderFieldHelper,
48+
"renderCall": r.renderCallHelper,
49+
"getChainName": GetChainNameBySelector,
50+
"getChainNameSafe": r.getChainNameOrEmpty,
51+
"hexEncode": hexutil.Encode,
5052
}
5153

5254
// Load templates from filesystem
@@ -60,6 +62,7 @@ func (r *TextRenderer) initTemplates() {
6062
r.yamlFieldTmpl = template.Must(template.New("yaml_field.tmpl").Funcs(funcMap).ParseFS(textTemplateFS, "templates/text/yaml_field.tmpl"))
6163
r.arrayFieldTmpl = template.Must(template.New("array_field.tmpl").Funcs(funcMap).ParseFS(textTemplateFS, "templates/text/array_field.tmpl"))
6264
r.structFieldTmpl = template.Must(template.New("struct_field.tmpl").Funcs(funcMap).ParseFS(textTemplateFS, "templates/text/struct_field.tmpl"))
65+
r.namedFieldTmpl = template.Must(template.New("named_field.tmpl").Funcs(funcMap).ParseFS(textTemplateFS, "templates/text/named_field.tmpl"))
6366
}
6467

6568
// Template data structures
@@ -203,6 +206,16 @@ func (r *TextRenderer) renderCallHelper(call *DecodedCall, ctx *FieldContext) st
203206
return r.RenderDecodedCall(call, ctx)
204207
}
205208

209+
// getChainNameOrEmpty is a template helper function that safely gets chain name, returning empty string on error
210+
func (r *TextRenderer) getChainNameOrEmpty(selector uint64) string {
211+
chainName, err := GetChainNameBySelector(selector)
212+
if err != nil || chainName == "" {
213+
return ""
214+
}
215+
216+
return chainName
217+
}
218+
206219
// renderFieldValue renders any field value as plain text using templates
207220
func (r *TextRenderer) renderFieldValue(field FieldValue) string {
208221
var buf bytes.Buffer
@@ -217,12 +230,11 @@ func (r *TextRenderer) renderFieldValue(field FieldValue) string {
217230
return buf.String()
218231

219232
case ChainSelectorField:
220-
chainName, err := GetChainNameBySelector(f.GetValue())
221-
if err != nil || chainName == "" {
222-
return fmt.Sprintf("`%d (<chain unknown>)`", f.GetValue())
233+
if err := r.chainSelectorFieldTmpl.Execute(&buf, f); err != nil {
234+
return fmt.Sprintf("Error rendering chain selector field: %v", err)
223235
}
224236

225-
return fmt.Sprintf("%d (%s)", f.GetValue(), chainName)
237+
return buf.String()
226238

227239
case BytesField:
228240
if err := r.bytesFieldTmpl.Execute(&buf, f); err != nil {
@@ -260,7 +272,11 @@ func (r *TextRenderer) renderFieldValue(field FieldValue) string {
260272
return buf.String()
261273

262274
case NamedField:
263-
return fmt.Sprintf("%s: %s", f.Name, r.renderFieldValue(f.Value))
275+
if err := r.namedFieldTmpl.Execute(&buf, f); err != nil {
276+
return fmt.Sprintf("Error rendering named field: %v", err)
277+
}
278+
279+
return buf.String()
264280

265281
default:
266282
return fmt.Sprintf("<unknown field type: %s>", field.GetType())

experimental/analyzer/renderer_text_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,7 @@ func TestTextRenderer_EdgeCases(t *testing.T) {
483483

484484
// Additional tests for functions with 0% coverage
485485
func TestTextRenderer_RenderProposal(t *testing.T) {
486+
t.Parallel()
486487
renderer := NewTextRenderer()
487488
ctx := NewFieldContext(nil)
488489

@@ -516,6 +517,7 @@ func TestTextRenderer_RenderProposal(t *testing.T) {
516517
}
517518

518519
func TestTextRenderer_RenderTimelockProposal(t *testing.T) {
520+
t.Parallel()
519521
renderer := NewTextRenderer()
520522
ctx := NewFieldContext(nil)
521523

@@ -552,6 +554,7 @@ func TestTextRenderer_RenderTimelockProposal(t *testing.T) {
552554
}
553555

554556
func TestTextRenderer_renderCallHelper(t *testing.T) {
557+
t.Parallel()
555558
renderer := NewTextRenderer()
556559
ctx := NewFieldContext(nil)
557560

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{{.GetValue}}
1+
{{$chainName := getChainNameOrEmpty .GetValue}}{{if and $chainName (ne $chainName "")}}{{.GetValue}} ({{$chainName}}){{else}}`{{.GetValue}} (<chain unknown>)`{{end}}

0 commit comments

Comments
 (0)