Skip to content

Commit 3e2515e

Browse files
authored
Fix encoding on search (#145)
1 parent 306c6e9 commit 3e2515e

File tree

2 files changed

+57
-6
lines changed

2 files changed

+57
-6
lines changed

src/main/java/org/gridsuite/explore/server/services/DirectoryService.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.springframework.web.client.RestTemplate;
2323
import org.springframework.web.util.UriComponentsBuilder;
2424

25+
import java.net.URI;
2526
import java.util.*;
2627
import java.util.stream.Collectors;
2728

@@ -196,17 +197,17 @@ public String getNameCandidate(UUID directoryUuid, String elementName, String ty
196197
}
197198

198199
public String searchElements(String userInput, String directoryUuid, String userId) {
199-
String path = UriComponentsBuilder
200-
.fromPath(DIRECTORIES_SERVER_ROOT_PATH + "/elements/indexation-infos")
201-
.queryParam(PARAM_DIRECTORY_UUID, directoryUuid)
202-
.queryParam(PARAM_USER_INPUT, userInput)
203-
.toUriString();
200+
URI uri = UriComponentsBuilder
201+
.fromUriString(directoryServerBaseUri + DIRECTORIES_SERVER_ROOT_PATH + "/elements/indexation-infos")
202+
.queryParam(PARAM_DIRECTORY_UUID, "{directoryUuid}")
203+
.queryParam(PARAM_USER_INPUT, "{userInput}")
204+
.build(directoryUuid, userInput);
204205

205206
HttpHeaders headers = new HttpHeaders();
206207
headers.add(HEADER_USER_ID, userId);
207208
headers.setContentType(MediaType.APPLICATION_JSON);
208209
return restTemplate
209-
.exchange(directoryServerBaseUri + path, HttpMethod.GET, new HttpEntity<>(headers), String.class)
210+
.exchange(uri, HttpMethod.GET, new HttpEntity<>(headers), String.class)
210211
.getBody();
211212
}
212213

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package org.gridsuite.explore.server;
2+
3+
import org.gridsuite.explore.server.services.DirectoryService;
4+
import org.junit.jupiter.api.Test;
5+
import org.mockito.ArgumentCaptor;
6+
import org.mockito.Mock;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.boot.test.context.SpringBootTest;
9+
import org.springframework.boot.test.mock.mockito.MockBean;
10+
import org.springframework.http.HttpEntity;
11+
import org.springframework.http.HttpMethod;
12+
import org.springframework.http.ResponseEntity;
13+
import org.springframework.web.client.RestTemplate;
14+
15+
import java.net.URI;
16+
import java.util.UUID;
17+
18+
import static org.junit.jupiter.api.Assertions.assertTrue;
19+
import static org.mockito.ArgumentMatchers.*;
20+
import static org.mockito.Mockito.verify;
21+
import static org.mockito.Mockito.when;
22+
23+
@SpringBootTest
24+
class DirectoryServiceTest {
25+
26+
@MockBean
27+
private RestTemplate restTemplate;
28+
29+
@Mock
30+
private ResponseEntity<String> responseEntity;
31+
32+
@Autowired
33+
private DirectoryService directoryService;
34+
35+
@Test
36+
void testSearchElementsWithSpecialCharacters() {
37+
String userInput = "a+éè{}\\`b";
38+
String directoryUuid = UUID.randomUUID().toString();
39+
String userId = "testUser";
40+
when(restTemplate.exchange(any(URI.class), eq(HttpMethod.GET), any(HttpEntity.class), eq(String.class)))
41+
.thenReturn(responseEntity);
42+
43+
directoryService.searchElements(userInput, directoryUuid, userId);
44+
45+
ArgumentCaptor<URI> uriCaptor = ArgumentCaptor.forClass(URI.class);
46+
verify(restTemplate).exchange(uriCaptor.capture(), any(), any(), any(Class.class));
47+
String uriString = uriCaptor.getValue().toString();
48+
assertTrue(uriString.contains("userInput=a%2B%C3%A9%C3%A8%7B%7D%5C%60b"));
49+
}
50+
}

0 commit comments

Comments
 (0)