Skip to content

Commit a2fd6ad

Browse files
committed
Add config tests
1 parent 82cb75c commit a2fd6ad

File tree

1 file changed

+152
-0
lines changed

1 file changed

+152
-0
lines changed

toolprovider/config_test.go

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
package toolprovider
2+
3+
import (
4+
"testing"
5+
6+
"github.com/bitrise-io/bitrise/v2/models"
7+
"github.com/bitrise-io/bitrise/v2/toolprovider/provider"
8+
"github.com/stretchr/testify/assert"
9+
)
10+
11+
func TestGetToolRequests(t *testing.T) {
12+
tests := []struct {
13+
name string
14+
config models.BitriseDataModel
15+
expected []provider.ToolRequest
16+
wantErr bool
17+
}{
18+
{
19+
name: "Empty tools",
20+
config: models.BitriseDataModel{
21+
Tools: models.ToolsModel{},
22+
},
23+
expected: []provider.ToolRequest{},
24+
wantErr: false,
25+
},
26+
{
27+
name: "Multiple tools with different version strategies",
28+
config: models.BitriseDataModel{
29+
Tools: models.ToolsModel{
30+
"golang": "1.20.3",
31+
"nodejs": "20:installed",
32+
"ruby": "3.2:latest",
33+
},
34+
},
35+
expected: []provider.ToolRequest{
36+
{
37+
ToolName: "golang",
38+
UnparsedVersion: "1.20.3",
39+
ResolutionStrategy: provider.ResolutionStrategyStrict,
40+
PluginIdentifier: nil,
41+
},
42+
{
43+
ToolName: "nodejs",
44+
UnparsedVersion: "20",
45+
ResolutionStrategy: provider.ResolutionStrategyLatestInstalled,
46+
PluginIdentifier: nil,
47+
},
48+
{
49+
ToolName: "ruby",
50+
UnparsedVersion: "3.2",
51+
ResolutionStrategy: provider.ResolutionStrategyLatestReleased,
52+
PluginIdentifier: nil,
53+
},
54+
},
55+
wantErr: false,
56+
},
57+
{
58+
name: "Multiple tools with some having plugin identifiers",
59+
config: models.BitriseDataModel{
60+
Tools: models.ToolsModel{
61+
"golang": "1.20.3",
62+
"custom-tool": "1.0.0",
63+
"nodejs": "20:installed",
64+
},
65+
ToolConfig: &models.ToolConfigModel{
66+
ExtraPlugins: map[models.ToolID]string{
67+
"custom-tool": "https://github.com/example/custom-tool-plugin",
68+
},
69+
},
70+
},
71+
expected: []provider.ToolRequest{
72+
{
73+
ToolName: "golang",
74+
UnparsedVersion: "1.20.3",
75+
ResolutionStrategy: provider.ResolutionStrategyStrict,
76+
PluginIdentifier: nil,
77+
},
78+
{
79+
ToolName: "custom-tool",
80+
UnparsedVersion: "1.0.0",
81+
ResolutionStrategy: provider.ResolutionStrategyStrict,
82+
PluginIdentifier: stringPtr("https://github.com/example/custom-tool-plugin"),
83+
},
84+
{
85+
ToolName: "nodejs",
86+
UnparsedVersion: "20",
87+
ResolutionStrategy: provider.ResolutionStrategyLatestInstalled,
88+
PluginIdentifier: nil,
89+
},
90+
},
91+
wantErr: false,
92+
},
93+
{
94+
name: "Tool with nil ToolConfig",
95+
config: models.BitriseDataModel{
96+
Tools: models.ToolsModel{
97+
"golang": "1.20.3",
98+
},
99+
ToolConfig: nil,
100+
},
101+
expected: []provider.ToolRequest{
102+
{
103+
ToolName: "golang",
104+
UnparsedVersion: "1.20.3",
105+
ResolutionStrategy: provider.ResolutionStrategyStrict,
106+
PluginIdentifier: nil,
107+
},
108+
},
109+
wantErr: false,
110+
},
111+
{
112+
name: "Tool with ToolConfig but nil ExtraPlugins",
113+
config: models.BitriseDataModel{
114+
Tools: models.ToolsModel{
115+
"golang": "1.20.3",
116+
},
117+
ToolConfig: &models.ToolConfigModel{
118+
Provider: "asdf",
119+
ExtraPlugins: nil,
120+
},
121+
},
122+
expected: []provider.ToolRequest{
123+
{
124+
ToolName: "golang",
125+
UnparsedVersion: "1.20.3",
126+
ResolutionStrategy: provider.ResolutionStrategyStrict,
127+
PluginIdentifier: nil,
128+
},
129+
},
130+
wantErr: false,
131+
},
132+
}
133+
134+
for _, tt := range tests {
135+
t.Run(tt.name, func(t *testing.T) {
136+
result, err := getToolRequests(tt.config)
137+
138+
if tt.wantErr {
139+
assert.Error(t, err)
140+
assert.Nil(t, result)
141+
return
142+
}
143+
144+
assert.NoError(t, err)
145+
assert.ElementsMatch(t, tt.expected, result)
146+
})
147+
}
148+
}
149+
150+
func stringPtr(s string) *string {
151+
return &s
152+
}

0 commit comments

Comments
 (0)