Skip to content

Commit dbeda98

Browse files
committed
Improve tests
1 parent ba794a1 commit dbeda98

File tree

13 files changed

+484
-599
lines changed

13 files changed

+484
-599
lines changed

NodeSwap.Tests/Commands/AvailCommandTests.cs

Lines changed: 49 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
using Microsoft.VisualStudio.TestTools.UnitTesting;
66
using NodeSwap.Commands;
77
using NodeSwap.Interfaces;
8-
using NodeSwap.Tests.TestUtils;
8+
using NSubstitute;
99
using Shouldly;
1010

1111
namespace NodeSwap.Tests.Commands;
@@ -15,8 +15,8 @@ public class AvailCommandTests
1515
{
1616
private string _testDirectory;
1717
private GlobalContext _globalContext;
18-
private MockNodeJsWebApi _mockNodeJsWebApi;
19-
private MockConsoleWriter _mockConsoleWriter;
18+
private INodeJsWebApi _mockNodeJsWebApi;
19+
private IConsoleWriter _mockConsoleWriter;
2020

2121
[TestInitialize]
2222
public void Setup()
@@ -30,8 +30,8 @@ public void Setup()
3030
};
3131
Directory.CreateDirectory(_globalContext.StoragePath);
3232

33-
_mockNodeJsWebApi = new MockNodeJsWebApi();
34-
_mockConsoleWriter = new MockConsoleWriter();
33+
_mockNodeJsWebApi = Substitute.For<INodeJsWebApi>();
34+
_mockConsoleWriter = Substitute.For<IConsoleWriter>();
3535
}
3636

3737
[TestCleanup]
@@ -52,13 +52,15 @@ public async Task RunAsync_WhenNoPrefix_ShouldDisplayAllVersions()
5252
new(18, 17, 0),
5353
new(16, 14, 0),
5454
};
55-
_mockNodeJsWebApi.GetInstallableNodeVersionsReturn = testVersions;
55+
_mockNodeJsWebApi.GetInstallableNodeVersions("").Returns(testVersions);
5656

5757
var availCommand = new AvailCommand(_mockNodeJsWebApi, _mockConsoleWriter) { Prefix = "" };
58+
5859
var result = await availCommand.RunAsync();
59-
60+
6061
result.ShouldBe(0);
61-
_mockNodeJsWebApi.GetInstallableNodeVersionsCalled.ShouldBeTrue();
62+
await _mockNodeJsWebApi.Received(1).GetInstallableNodeVersions("");
63+
_mockConsoleWriter.Received(2).WriteLine("");
6264
}
6365

6466
[TestMethod]
@@ -70,52 +72,59 @@ public async Task RunAsync_WhenNullPrefix_ShouldDisplayAllVersions()
7072
new(18, 17, 0),
7173
new(16, 14, 0),
7274
};
73-
_mockNodeJsWebApi.GetInstallableNodeVersionsReturn = testVersions;
75+
_mockNodeJsWebApi.GetInstallableNodeVersions(null).Returns(testVersions);
7476

7577
var availCommand = new AvailCommand(_mockNodeJsWebApi, _mockConsoleWriter) { Prefix = null };
78+
7679
var result = await availCommand.RunAsync();
77-
80+
7881
result.ShouldBe(0);
79-
_mockNodeJsWebApi.GetInstallableNodeVersionsCalled.ShouldBeTrue();
82+
await _mockNodeJsWebApi.Received(1).GetInstallableNodeVersions(null);
83+
_mockConsoleWriter.Received(2).WriteLine("");
8084
}
8185

8286
[TestMethod]
8387
public async Task RunAsync_WhenSpecificPrefix_ShouldCallWithCorrectPrefix()
8488
{
8589
var filteredVersions = new List<Version> { new(18, 17, 0), new(18, 16, 0) };
86-
_mockNodeJsWebApi.GetInstallableNodeVersionsReturn = filteredVersions;
87-
90+
_mockNodeJsWebApi.GetInstallableNodeVersions("18").Returns(filteredVersions);
91+
8892
var availCommand = new AvailCommand(_mockNodeJsWebApi, _mockConsoleWriter) { Prefix = "18" };
93+
8994
var result = await availCommand.RunAsync();
90-
95+
9196
result.ShouldBe(0);
92-
_mockNodeJsWebApi.GetInstallableNodeVersionsCalled.ShouldBeTrue();
93-
// Note: We can't easily test the prefix parameter without modifying MockNodeJsWebApi
94-
// but the command should pass it through correctly
97+
await _mockNodeJsWebApi.Received(1).GetInstallableNodeVersions("18");
98+
_mockConsoleWriter.Received(2).WriteLine("");
9599
}
96100

97101
[TestMethod]
98102
public async Task RunAsync_WhenNoVersionsFound_ShouldReturnError()
99103
{
100-
_mockNodeJsWebApi.GetInstallableNodeVersionsReturn = [];
101-
104+
_mockNodeJsWebApi.GetInstallableNodeVersions("99").Returns(new List<Version>());
105+
102106
var availCommand = new AvailCommand(_mockNodeJsWebApi, _mockConsoleWriter) { Prefix = "99" };
107+
103108
var result = await availCommand.RunAsync();
104-
109+
105110
result.ShouldBe(1);
106-
_mockNodeJsWebApi.GetInstallableNodeVersionsCalled.ShouldBeTrue();
111+
await _mockNodeJsWebApi.Received(1).GetInstallableNodeVersions("99");
112+
_mockConsoleWriter.Received(1).WriteLine("None found");
113+
_mockConsoleWriter.DidNotReceive().WriteLine("");
107114
}
108115

109116
[TestMethod]
110117
public async Task RunAsync_WhenWebApiThrowsException_ShouldReturnError()
111118
{
112-
_mockNodeJsWebApi.ShouldThrowException = true;
113-
119+
_mockNodeJsWebApi.GetInstallableNodeVersions("").Returns<List<Version>>(x => throw new Exception("Test exception"));
120+
114121
var availCommand = new AvailCommand(_mockNodeJsWebApi, _mockConsoleWriter) { Prefix = "" };
122+
115123
var result = await availCommand.RunAsync();
116-
124+
117125
result.ShouldBe(1);
118-
_mockNodeJsWebApi.GetInstallableNodeVersionsCalled.ShouldBeTrue();
126+
await _mockNodeJsWebApi.Received(1).GetInstallableNodeVersions("");
127+
_mockConsoleWriter.Received(1).WriteErrorLine("Test exception");
119128
}
120129

121130
[TestMethod]
@@ -127,28 +136,30 @@ public async Task RunAsync_WhenVersionsAvailable_ShouldCallGetInstallableVersion
127136
new(18, 17, 0),
128137
new(16, 14, 0),
129138
};
130-
_mockNodeJsWebApi.GetInstallableNodeVersionsReturn = testVersions;
139+
_mockNodeJsWebApi.GetInstallableNodeVersions("").Returns(testVersions);
131140

132141
var availCommand = new AvailCommand(_mockNodeJsWebApi, _mockConsoleWriter) { Prefix = "" };
142+
133143
var result = await availCommand.RunAsync();
134-
144+
135145
result.ShouldBe(0);
136-
_mockNodeJsWebApi.GetInstallableNodeVersionsCalled.ShouldBeTrue();
137-
146+
await _mockNodeJsWebApi.Received(1).GetInstallableNodeVersions("");
138147
testVersions.Count.ShouldBeGreaterThan(0);
139148
}
140149

141150
[TestMethod]
142151
public async Task RunAsync_WhenExactVersionPrefix_ShouldReturnSuccessfully()
143152
{
144153
var singleVersion = new List<Version> { new(18, 17, 0) };
145-
_mockNodeJsWebApi.GetInstallableNodeVersionsReturn = singleVersion;
146-
154+
_mockNodeJsWebApi.GetInstallableNodeVersions("18.17.0").Returns(singleVersion);
155+
147156
var availCommand = new AvailCommand(_mockNodeJsWebApi, _mockConsoleWriter) { Prefix = "18.17.0" };
157+
148158
var result = await availCommand.RunAsync();
149-
159+
150160
result.ShouldBe(0);
151-
_mockNodeJsWebApi.GetInstallableNodeVersionsCalled.ShouldBeTrue();
161+
await _mockNodeJsWebApi.Received(1).GetInstallableNodeVersions("18.17.0");
162+
_mockConsoleWriter.Received(2).WriteLine("");
152163
}
153164

154165
[TestMethod]
@@ -159,12 +170,14 @@ public async Task RunAsync_WhenEmptyStringPrefix_ShouldCallGetInstallableVersion
159170
new(20, 11, 0),
160171
new(18, 17, 0),
161172
};
162-
_mockNodeJsWebApi.GetInstallableNodeVersionsReturn = testVersions;
173+
_mockNodeJsWebApi.GetInstallableNodeVersions("").Returns(testVersions);
163174

164175
var availCommand = new AvailCommand(_mockNodeJsWebApi, _mockConsoleWriter) { Prefix = "" };
176+
165177
var result = await availCommand.RunAsync();
166-
178+
167179
result.ShouldBe(0);
168-
_mockNodeJsWebApi.GetInstallableNodeVersionsCalled.ShouldBeTrue();
180+
await _mockNodeJsWebApi.Received(1).GetInstallableNodeVersions("");
181+
_mockConsoleWriter.Received(2).WriteLine("");
169182
}
170183
}

0 commit comments

Comments
 (0)