@@ -95,39 +95,120 @@ suite("activate", () => {
95
95
} ) ;
96
96
} ) ;
97
97
98
- test ( "calls installCLI" , ( ) => {
98
+ test ( "calls suggestInstallingDartFrogCLI when Dart Frog CLI is not installed" , ( ) => {
99
+ const vscodeStub = {
100
+ commands : {
101
+ registerCommand : sinon . stub ( ) ,
102
+ } ,
103
+ } ;
104
+
105
+ const utilsStub = {
106
+ isDartFrogCLIInstalled : sinon . stub ( ) ,
107
+ } ;
108
+ utilsStub . isDartFrogCLIInstalled . returns ( false ) ;
109
+
110
+ const extension = proxyquire ( "../../extension" , {
111
+ vscode : vscodeStub ,
112
+ // eslint-disable-next-line @typescript-eslint/naming-convention
113
+ "./utils" : utilsStub ,
114
+ } ) ;
115
+
116
+ const context = { subscriptions : [ ] } ;
117
+ const suggestInstallingCLI = sinon . stub ( ) ;
118
+ const ensureCompatibleCLI = sinon . stub ( ) ;
119
+ extension . activate ( context , suggestInstallingCLI , ensureCompatibleCLI ) ;
120
+
121
+ sinon . assert . calledOnce ( suggestInstallingCLI ) ;
122
+ } ) ;
123
+
124
+ test ( "calls ensureCompatibleDartFrogCLI when Dart Frog CLI is installed" , ( ) => {
99
125
const vscodeStub = {
100
126
commands : {
101
127
registerCommand : sinon . stub ( ) ,
102
128
} ,
103
129
} ;
104
130
105
131
const utilsStub = {
106
- readDartFrogCLIVersion : sinon . stub ( ) ,
107
- isCompatibleDartFrogCLIVersion : sinon . stub ( ) ,
108
132
isDartFrogCLIInstalled : sinon . stub ( ) ,
109
133
} ;
110
- utilsStub . readDartFrogCLIVersion . returns ( "0.0.0" ) ;
111
- utilsStub . isCompatibleDartFrogCLIVersion . returns ( true ) ;
112
134
utilsStub . isDartFrogCLIInstalled . returns ( true ) ;
113
135
114
- const commandsStub = {
136
+ const extension = proxyquire ( "../../extension" , {
137
+ vscode : vscodeStub ,
138
+ // eslint-disable-next-line @typescript-eslint/naming-convention
139
+ "./utils" : utilsStub ,
140
+ } ) ;
141
+
142
+ const context = { subscriptions : [ ] } ;
143
+ const suggestInstallingCLI = sinon . stub ( ) ;
144
+ const ensureCompatibleCLI = sinon . stub ( ) ;
145
+ extension . activate ( context , suggestInstallingCLI , ensureCompatibleCLI ) ;
146
+
147
+ sinon . assert . calledOnce ( ensureCompatibleCLI ) ;
148
+ } ) ;
149
+ } ) ;
150
+
151
+ suite ( "suggestInstallingDartFrogCLI" , ( ) => {
152
+ let vscodeStub : any ;
153
+ let utilsStub : any ;
154
+ let commandsStub : any ;
155
+ let extension : any ;
156
+
157
+ beforeEach ( ( ) => {
158
+ vscodeStub = {
159
+ window : {
160
+ showWarningMessage : sinon . stub ( ) ,
161
+ } ,
162
+ } ;
163
+
164
+ utilsStub = {
165
+ isDartFrogCLIInstalled : sinon . stub ( ) ,
166
+ } ;
167
+ utilsStub . isDartFrogCLIInstalled . returns ( false ) ;
168
+
169
+ commandsStub = {
115
170
installCLI : sinon . stub ( ) ,
116
171
} ;
117
172
118
- const extension = proxyquire ( "../../extension" , {
173
+ extension = proxyquire ( "../../extension" , {
119
174
vscode : vscodeStub ,
120
175
// eslint-disable-next-line @typescript-eslint/naming-convention
121
176
"./utils" : utilsStub ,
122
177
// eslint-disable-next-line @typescript-eslint/naming-convention
123
178
"./commands" : commandsStub ,
124
179
} ) ;
180
+ } ) ;
125
181
126
- const context = { subscriptions : [ ] } ;
127
- extension . activate ( context ) ;
182
+ afterEach ( ( ) => {
183
+ sinon . restore ( ) ;
184
+ } ) ;
185
+
186
+ test ( "shows warning suggesting to install Dart Frog CLI" , async ( ) => {
187
+ await extension . suggestInstallingDartFrogCLI ( ) ;
188
+
189
+ sinon . assert . calledOnceWithExactly (
190
+ vscodeStub . window . showWarningMessage ,
191
+ "Dart Frog CLI is not installed. Install Dart Frog CLI to use this extension." ,
192
+ "Install Dart Frog CLI" ,
193
+ "Ignore"
194
+ ) ;
195
+ } ) ;
196
+
197
+ test ( "installs Dart Frog CLI when selected" , async ( ) => {
198
+ vscodeStub . window . showWarningMessage . returns ( "Install Dart Frog CLI" ) ;
199
+
200
+ await extension . suggestInstallingDartFrogCLI ( ) ;
128
201
129
202
sinon . assert . calledOnce ( commandsStub . installCLI ) ;
130
203
} ) ;
204
+
205
+ test ( "does not install Dart Frog CLI when ignored" , async ( ) => {
206
+ vscodeStub . window . showWarningMessage . returns ( "Ignore" ) ;
207
+
208
+ await extension . suggestInstallingDartFrogCLI ( ) ;
209
+
210
+ sinon . assert . notCalled ( commandsStub . installCLI ) ;
211
+ } ) ;
131
212
} ) ;
132
213
133
214
suite ( "ensureCompatibleDartFrogCLI" , ( ) => {
0 commit comments