55using Microsoft . VisualStudio . TestTools . UnitTesting ;
66using NodeSwap . Commands ;
77using NodeSwap . Interfaces ;
8- using NodeSwap . Tests . TestUtils ;
8+ using NSubstitute ;
99using Shouldly ;
1010
1111namespace 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