Skip to content

Commit 7f928ba

Browse files
committed
Unit tests
1 parent 4081af8 commit 7f928ba

File tree

1 file changed

+134
-0
lines changed

1 file changed

+134
-0
lines changed

toolprovider/mise/install_test.go

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

0 commit comments

Comments
 (0)