Проблема метода испытаний - PullRequest
0 голосов
/ 30 января 2020

Я попробовал этот код:

//CONTROLLER


@GetMapping(path = "/validateToken/{id}")
public ResponseEntity<Boolean> validateToken(@PathVariable String id) {
        try {
            boolean bool=webSSOService.validateToken(id);
            return new ResponseEntity<Boolean>(bool, HttpStatus.OK);
        } catch (Exception e) {
            LOGGER.error(Message.ERROR_OCCURRED+Thread.currentThread().getStackTrace()[1].getMethodName()+": "+ e.getMessage());
            if (LOGGER.isDebugEnabled()) {
                e.printStackTrace();
            }
            return new ResponseEntity<Boolean>(HttpStatus.INTERNAL_SERVER_ERROR);
        }
}
//SERVICE

@Override
public boolean validateToken(String id) throws JsonProcessingException {
        Map<String,Object> parameters=new HashMap<>();
        parameters.put("id",id);

        String uri="/SSOServiceToken/validateToken/{id}";
        HttpMethod httpMethod=HttpMethod.GET;

        boolean bool=executeFilteredRequest(parameters,uri,Boolean.class,httpMethod);
        return bool;
}

private <T> T executeFilteredRequest(Map<String,Object> parameters, String uri, Class<T> type, HttpMethod httpMethod) throws JsonProcessingException {
        RestTemplate restTemplate = restTemplateBuilder.build();

        HttpHeaders headers = new HttpHeaders();
        headers.set("Accept", MediaType.APPLICATION_JSON_VALUE);
        headers.setContentType(MediaType.APPLICATION_JSON);

        UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("http://localhost:8180" + uri);
        String jsonBody=""; 

        if (httpMethod == HttpMethod.POST){
            ObjectMapper objectMapper=new ObjectMapper();
            jsonBody=objectMapper.writeValueAsString(parameters); 
        }else{
            parameters.forEach( (key, value) -> builder.queryParam(key,value));
        }
        HttpEntity<?> entity = new HttpEntity<>(jsonBody,headers); 

        ResponseEntity<T> response = restTemplate.exchange(builder.toUriString(),
                                                           httpMethod,
                                                           entity,
                                                           type);

        return response.getBody();
    }

Затем я должен проверить validateToken:

 @Test
 public void validateTokenIsOk() throws Exception {

        mockMvc.perform(MockMvcRequestBuilders
                .get("/validateToken/{id}","c8r1p15dv5lr0on")
                .accept(MediaType.APPLICATION_JSON))
                .andDo(print())
                .andExpect(status().isOk());
 }

Метод validateToken принимает идентификатор токена, для которого его флаг равен false, на входе, а затем его вывод должен стать правдой. Теперь я всегда получаю код состояния 200 и false в качестве ответа, в каждом случае, когда я пытаюсь выполнить тест с Intellij. Кроме того, я получаю сообщение: «Токен«% 7Bid% 7D »не найден в базе данных». Но если я попытаюсь проверить с Почтальоном, результат будет верным, как ожидалось Что не так с моим кодом? Почему идентификатор "% 7Bid% 7D" вместо "c8r1p15dv5lr0on"? Как генерируется "% 7Bid% 7D"?

Надеюсь, я был ясен в своем вопросе.

Большое спасибо!

1 Ответ

0 голосов
/ 31 января 2020

Проблема решена. В моем сервисе:

@Override
public boolean validateToken(String id) throws JsonProcessingException {

        Map<String,Object> parameters=new HashMap<>();

        String uri="/SSOServiceToken/validateToken"+id;
        .
        .
        .

Эта строка "% 7Bid% 7D" была закодирована как "{id}" в переменной uri. Поэтому, чтобы избежать этой ложной строки, мне нужно объединить свой URI с переменной id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...