Skip to content

Commit 24fd4b5

Browse files
committed
Unit tests
1 parent adc95ec commit 24fd4b5

File tree

1 file changed

+134
-1
lines changed

1 file changed

+134
-1
lines changed

toolprovider/mise/install_test.go

Lines changed: 134 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"testing"
77

8+
"github.com/bitrise-io/bitrise/v2/toolprovider/mise/nixpkgs"
89
"github.com/bitrise-io/bitrise/v2/toolprovider/provider"
910
"github.com/stretchr/testify/require"
1011
)
@@ -86,7 +87,6 @@ func TestMiseVersionString(t *testing.T) {
8687
want: "nixpkgs:[email protected]",
8788
wantErr: false,
8889
},
89-
// TODO: more test cases?
9090
}
9191

9292
for _, tt := range tests {
@@ -181,3 +181,136 @@ func TestIsAlreadyInstalled(t *testing.T) {
181181
})
182182
}
183183
}
184+
185+
func TestCanBeInstalledWithNix(t *testing.T) {
186+
tests := []struct {
187+
name string
188+
toolID provider.ToolID
189+
version string
190+
resolutionStrategy provider.ResolutionStrategy
191+
setupFake func(m *fakeExecEnv)
192+
want bool
193+
}{
194+
{
195+
name: "concrete Ruby version that exists in index",
196+
toolID: provider.ToolID("ruby"),
197+
version: "3.3.9",
198+
resolutionStrategy: provider.ResolutionStrategyStrict,
199+
setupFake: func(m *fakeExecEnv) {
200+
m.setResponse(fmt.Sprintf("plugin install %s %s", nixpkgs.PluginName, nixpkgs.PluginGitURL), "")
201+
m.setResponse("ls --installed --json --quiet ruby", "[]")
202+
m.setResponse("ls-remote --quiet nixpkgs:[email protected]", "3.3.9")
203+
},
204+
want: true,
205+
},
206+
{
207+
name: "fuzzy Ruby version that matches an existing version in index",
208+
toolID: provider.ToolID("ruby"),
209+
version: "3.3",
210+
resolutionStrategy: provider.ResolutionStrategyLatestReleased,
211+
setupFake: func(m *fakeExecEnv) {
212+
m.setResponse(fmt.Sprintf("plugin install %s %s", nixpkgs.PluginName, nixpkgs.PluginGitURL), "")
213+
m.setResponse("ls --installed --json --quiet ruby", "[]")
214+
m.setResponse("ls-remote --quiet nixpkgs:[email protected]", "3.3.8\n3.3.9")
215+
},
216+
want: true,
217+
},
218+
{
219+
name: "concrete Ruby version that doesn't exist in index",
220+
toolID: provider.ToolID("ruby"),
221+
version: "0.0.1",
222+
resolutionStrategy: provider.ResolutionStrategyStrict,
223+
setupFake: func(m *fakeExecEnv) {
224+
m.setResponse(fmt.Sprintf("plugin install %s %s", nixpkgs.PluginName, nixpkgs.PluginGitURL), "")
225+
m.setResponse("ls --installed --json --quiet ruby", "[]")
226+
m.setResponse("ls-remote --quiet nixpkgs:[email protected]", "")
227+
},
228+
want: false,
229+
},
230+
{
231+
name: "nixpkgs plugin install error",
232+
toolID: provider.ToolID("ruby"),
233+
version: "3.3.9",
234+
resolutionStrategy: provider.ResolutionStrategyStrict,
235+
setupFake: func(m *fakeExecEnv) {
236+
m.setError(fmt.Sprintf("plugin install %s %s", nixpkgs.PluginName, nixpkgs.PluginGitURL), fmt.Errorf("fake error"))
237+
},
238+
want: false,
239+
},
240+
{
241+
name: "nixpkgs index check error",
242+
toolID: provider.ToolID("ruby"),
243+
version: "3.3.9",
244+
resolutionStrategy: provider.ResolutionStrategyStrict,
245+
setupFake: func(m *fakeExecEnv) {
246+
m.setResponse(fmt.Sprintf("plugin install %s %s", nixpkgs.PluginName, nixpkgs.PluginGitURL), "")
247+
m.setResponse("ls --installed --json --quiet ruby", "[]")
248+
m.setError("ls-remote --quiet nixpkgs:[email protected]", fmt.Errorf("fake error"))
249+
},
250+
want: false,
251+
},
252+
}
253+
254+
t.Setenv("BITRISE_TOOLSETUP_FAST_INSTALL", "1")
255+
for _, tt := range tests {
256+
t.Run(tt.name, func(t *testing.T) {
257+
execEnv := newFakeExecEnv()
258+
tt.setupFake(execEnv)
259+
260+
request := provider.ToolRequest{
261+
ToolName: tt.toolID,
262+
UnparsedVersion: tt.version,
263+
ResolutionStrategy: tt.resolutionStrategy,
264+
}
265+
266+
got := canBeInstalledWithNix(request, execEnv)
267+
require.Equal(t, tt.want, got)
268+
269+
})
270+
}
271+
}
272+
273+
func TestInstallRequest(t *testing.T) {
274+
tests := []struct {
275+
name string
276+
tool provider.ToolRequest
277+
useNix bool
278+
want provider.ToolRequest
279+
}{
280+
{
281+
name: "without nixpkgs",
282+
tool: provider.ToolRequest{
283+
ToolName: "node",
284+
UnparsedVersion: "18.20.0",
285+
ResolutionStrategy: provider.ResolutionStrategyStrict,
286+
},
287+
useNix: false,
288+
want: provider.ToolRequest{
289+
ToolName: "node",
290+
UnparsedVersion: "18.20.0",
291+
ResolutionStrategy: provider.ResolutionStrategyStrict,
292+
},
293+
},
294+
{
295+
name: "with nixpkgs",
296+
tool: provider.ToolRequest{
297+
ToolName: "node",
298+
UnparsedVersion: "18",
299+
ResolutionStrategy: provider.ResolutionStrategyLatestInstalled,
300+
},
301+
useNix: true,
302+
want: provider.ToolRequest{
303+
ToolName: "nixpkgs:node",
304+
UnparsedVersion: "18",
305+
ResolutionStrategy: provider.ResolutionStrategyLatestInstalled,
306+
},
307+
},
308+
}
309+
310+
for _, tt := range tests {
311+
t.Run(tt.name, func(t *testing.T) {
312+
got := installRequest(tt.tool, tt.useNix)
313+
require.Equal(t, tt.want, got)
314+
})
315+
}
316+
}

0 commit comments

Comments
 (0)