Skip to content

Commit 54becd8

Browse files
committed
fix: added unit tests
1 parent 269c2ae commit 54becd8

File tree

2 files changed

+67
-6
lines changed

2 files changed

+67
-6
lines changed

plugin/src/main/java/io/snyk/languageserver/protocolextension/SnykExtendedLanguageClient.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -454,19 +454,33 @@ public Issue getIssueFromCache(URI uri) {
454454
}
455455

456456
public String getDecodedParam(URI uri, String paramName) {
457-
Map<String, String> paramMap = parseQueryString(uri.getQuery());
457+
String query = uri.getQuery();
458+
if (query == null || query.isEmpty()) {
459+
return null;
460+
}
461+
462+
Map<String, String> paramMap = parseQueryString(query);
463+
String value = paramMap.get(paramName);
464+
465+
if (value == null) {
466+
return null;
467+
}
458468

459469
try {
460-
return URLDecoder.decode(paramMap.get(paramName), "UTF-8");
470+
return URLDecoder.decode(value, "UTF-8");
461471
} catch (UnsupportedEncodingException e) {
462472
SnykLogger.logError(e);
473+
return null;
463474
}
464-
return null;
465475
}
466476

467-
private static Map<String, String> parseQueryString(String queryString) {
477+
public static Map<String, String> parseQueryString(String queryString) {
468478
Map<String, String> paramMap = new HashMap<>();
469479

480+
if (queryString == null || queryString.isEmpty()) {
481+
return paramMap;
482+
}
483+
470484
for (String param : queryString.split("&")) {
471485
if (!param.isEmpty()) {
472486
String[] keyValue = param.split("=");

tests/src/test/java/io/snyk/languageserver/protocolextension/SnykExtendedLanguageClientTest.java

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import static io.snyk.eclipse.plugin.views.snyktoolview.ISnykToolView.CONGRATS_NO_ISSUES_FOUND;
1212
import static io.snyk.eclipse.plugin.views.snyktoolview.ISnykToolView.getPlural;
1313
import static org.junit.jupiter.api.Assertions.assertEquals;
14+
import static org.junit.jupiter.api.Assertions.assertTrue;
1415
import static org.mockito.ArgumentMatchers.any;
1516
import static org.mockito.Mockito.mock;
1617
import static org.mockito.Mockito.mockStatic;
@@ -24,10 +25,12 @@
2425
import java.io.File;
2526
import java.io.IOException;
2627
import java.net.URI;
28+
import java.net.URISyntaxException;
2729
import java.nio.file.Path;
2830
import java.nio.file.Paths;
2931
import java.util.Collection;
3032
import java.util.HashSet;
33+
import java.util.Map;
3134
import java.util.Set;
3235
import java.util.function.Consumer;
3336

@@ -73,6 +76,10 @@ class SnykExtendedLanguageClientTest extends LsBaseTest {
7376

7477
private ISnykToolView toolWindowMock;
7578

79+
private URI uri;
80+
private String paramName;
81+
// private SnykLogger loggerMock;
82+
7683
@BeforeEach
7784
protected void setUp() {
7885
super.setUp();
@@ -187,12 +194,11 @@ void testPublishDiagnosticsShouldChangeCache() {
187194
var folderPath = "/a/b";
188195
var uri = "file://" + folderPath + "/c/";
189196

190-
if(SystemUtils.IS_OS_WINDOWS) {
197+
if (SystemUtils.IS_OS_WINDOWS) {
191198
folderPath = "C://a/b";
192199
uri = "file:///" + folderPath + "/c/";
193200
}
194201

195-
196202
File pathFromUri = LSPEclipseUtils.fromUri(URI.create(uri));
197203
var filePath = pathFromUri.getAbsolutePath();
198204
var issueCache = new SnykIssueCache(Paths.get(folderPath));
@@ -584,4 +590,45 @@ void testGetTotal() throws IOException {
584590
private AdditionalData getSecurityIssue() {
585591
return Instancio.of(AdditionalData.class).set(Select.field(AdditionalData::isSecurityType), true).create();
586592
}
593+
594+
@Test
595+
public void getDecodedParam_Returns_Parameter_Value_If_Present_In_Query_String() throws Exception {
596+
cut = new SnykExtendedLanguageClient();
597+
String query = "product=Snyk+Code&issueId=7642f506c568056a7090d3ceb7b3c2e0&action=showInDetailPanel";
598+
URI uriWithQuery = new URI("snyk://path/to/resource?" + query);
599+
600+
Map<String, String> paramMapMock = java.util.Collections.singletonMap("issueId",
601+
"7642f506c568056a7090d3ceb7b3c2e0");
602+
603+
var result = cut.getDecodedParam(uriWithQuery, "issueId");
604+
assertEquals("7642f506c568056a7090d3ceb7b3c2e0", result);
605+
606+
// Test action parameter
607+
result = cut.getDecodedParam(uriWithQuery, "action");
608+
assertEquals("showInDetailPanel", result);
609+
610+
// Test product parameter
611+
result = cut.getDecodedParam(uriWithQuery, "product");
612+
assertEquals("Snyk Code", result);
613+
}
614+
615+
@Test
616+
public void parseQueryString_Returns_Parameters_In_Query_String() throws Exception {
617+
cut = new SnykExtendedLanguageClient();
618+
String query = "product=Snyk+Code&issueId=7642f506c568056a7090d3ceb7b3c2e0&action=showInDetailPanel";
619+
URI uriWithQuery = new URI("snyk://path/to/resource?" + query);
620+
621+
var result = cut.parseQueryString(uriWithQuery.getQuery());
622+
assertEquals(3, result.size());
623+
}
624+
625+
@Test
626+
public void parseQueryString_Returns_Empty_Map_If_Query_String_Is_Empty() throws URISyntaxException {
627+
cut = new SnykExtendedLanguageClient();
628+
URI uriWithoutQuery = new URI("snyk://path/to/resource");
629+
630+
var result = cut.parseQueryString(null);
631+
assertTrue(result.isEmpty());
632+
}
633+
587634
}

0 commit comments

Comments
 (0)