2121
2222
2323import java .time .ZonedDateTime ;
24+ import java .util .Arrays ;
2425import java .util .Collections ;
2526import java .util .concurrent .CompletableFuture ;
2627import org .eclipse .lsp4j .MessageActionItem ;
@@ -227,28 +228,55 @@ void updateRegistrationsOnWorkspaceSettingsChange() {
227228 }
228229
229230 @ Test
230- void shouldShowSonarQubeNotificationToUserAndClickOnNotification () {
231+ void shouldShowSonarQubeNotificationToUserAndClickOnNotificationLink () {
231232 ServerNotifications .EventListener listener = underTest .new EventListener (false );
232233 String category = "category" ;
233234 String message = "message" ;
234235 String link = "http://some.link" ;
235236 String projectKey = "projectKey" ;
236237 ServerNotification notification = new DefaultServerNotification (category , message , link , projectKey , ZonedDateTime .now ());
237238
238- MessageActionItem browseAction = new MessageActionItem ("Open in SonarQube" );
239+ MessageActionItem browseAction = new MessageActionItem ("Show on SonarQube" );
240+ MessageActionItem settingsAction = new MessageActionItem ("Open Settings" );
239241 when (client .showMessageRequest (any ())).thenReturn (CompletableFuture .completedFuture (browseAction ));
242+
240243 listener .handle (notification );
241244
242245 verify (telemetry ).devNotificationsReceived (category );
243246 ArgumentCaptor <ShowMessageRequestParams > messageCaptor = ArgumentCaptor .forClass (ShowMessageRequestParams .class );
244247 verify (client ).showMessageRequest (messageCaptor .capture ());
245248 ShowMessageRequestParams shownMessage = messageCaptor .getValue ();
246249 assertThat (shownMessage ).extracting (ShowMessageRequestParams ::getMessage , ShowMessageRequestParams ::getActions )
247- .containsExactly ("SonarQube Notification: message" , Collections . singletonList (browseAction ));
250+ .containsExactly ("SonarQube Notification: message" , Arrays . asList (browseAction , settingsAction ));
248251 verify (telemetry ).devNotificationsClicked (category );
249252 verify (client ).browseTo (link );
250253 }
251254
255+ @ Test
256+ void shouldShowSonarQubeNotificationToUserAndOpenSettings () {
257+ ServerNotifications .EventListener listener = underTest .new EventListener (false );
258+ String category = "category" ;
259+ String message = "message" ;
260+ String link = "http://some.link" ;
261+ String projectKey = "projectKey" ;
262+ ServerNotification notification = new DefaultServerNotification (category , message , link , projectKey , ZonedDateTime .now ());
263+
264+ MessageActionItem browseAction = new MessageActionItem ("Show on SonarQube" );
265+ MessageActionItem settingsAction = new MessageActionItem ("Open Settings" );
266+ when (client .showMessageRequest (any ())).thenReturn (CompletableFuture .completedFuture (settingsAction ));
267+
268+ listener .handle (notification );
269+
270+ verify (telemetry ).devNotificationsReceived (category );
271+ ArgumentCaptor <ShowMessageRequestParams > messageCaptor = ArgumentCaptor .forClass (ShowMessageRequestParams .class );
272+ verify (client ).showMessageRequest (messageCaptor .capture ());
273+ ShowMessageRequestParams shownMessage = messageCaptor .getValue ();
274+ assertThat (shownMessage ).extracting (ShowMessageRequestParams ::getMessage , ShowMessageRequestParams ::getActions )
275+ .containsExactly ("SonarQube Notification: message" , Arrays .asList (browseAction , settingsAction ));
276+
277+ verify (client ).openConnectionSettings (false );
278+ }
279+
252280 @ Test
253281 void shouldShowSonarCloudNotificationToUserAndNotClickOnNotification () {
254282 ServerNotifications .EventListener listener = underTest .new EventListener (true );
@@ -258,16 +286,18 @@ void shouldShowSonarCloudNotificationToUserAndNotClickOnNotification() {
258286 String projectKey = "projectKey" ;
259287 ServerNotification notification = new DefaultServerNotification (category , message , link , projectKey , ZonedDateTime .now ());
260288
261- MessageActionItem browseAction = new MessageActionItem ("Open in SonarCloud" );
289+ MessageActionItem browseAction = new MessageActionItem ("Show on SonarCloud" );
262290 when (client .showMessageRequest (any ())).thenReturn (CompletableFuture .completedFuture (null ));
291+ MessageActionItem settingsAction = new MessageActionItem ("Open Settings" );
292+
263293 listener .handle (notification );
264294
265295 verify (telemetry ).devNotificationsReceived (category );
266296 ArgumentCaptor <ShowMessageRequestParams > messageCaptor = ArgumentCaptor .forClass (ShowMessageRequestParams .class );
267297 verify (client ).showMessageRequest (messageCaptor .capture ());
268298 ShowMessageRequestParams shownMessage = messageCaptor .getValue ();
269299 assertThat (shownMessage ).extracting (ShowMessageRequestParams ::getMessage , ShowMessageRequestParams ::getActions )
270- .containsExactly ("SonarCloud Notification: message" , Collections . singletonList (browseAction ));
300+ .containsExactly ("SonarCloud Notification: message" , Arrays . asList (browseAction , settingsAction ));
271301 verify (telemetry , never ()).devNotificationsClicked (category );
272302 }
273303
0 commit comments