|
1 | 1 | package com.getyourguide.openapi.validation.core;
|
2 | 2 |
|
| 3 | +import static org.junit.jupiter.api.Assertions.assertEquals; |
| 4 | +import static org.mockito.ArgumentMatchers.any; |
3 | 5 | import static org.mockito.Mockito.mock;
|
| 6 | +import static org.mockito.Mockito.verify; |
4 | 7 |
|
| 8 | +import com.atlassian.oai.validator.model.SimpleRequest; |
5 | 9 | import com.getyourguide.openapi.validation.api.metrics.MetricsReporter;
|
6 |
| -import com.getyourguide.openapi.validation.api.model.ValidatorConfiguration; |
| 10 | +import com.getyourguide.openapi.validation.api.model.RequestMetaData; |
| 11 | +import com.getyourguide.openapi.validation.core.validator.OpenApiInteractionValidatorWrapper; |
| 12 | +import java.net.URI; |
| 13 | +import java.util.HashMap; |
7 | 14 | import java.util.concurrent.RejectedExecutionException;
|
8 | 15 | import java.util.concurrent.ThreadPoolExecutor;
|
9 | 16 | import org.junit.jupiter.api.BeforeEach;
|
10 | 17 | import org.junit.jupiter.api.Test;
|
| 18 | +import org.mockito.ArgumentCaptor; |
11 | 19 | import org.mockito.Mockito;
|
12 | 20 |
|
13 | 21 | public class OpenApiRequestValidatorTest {
|
14 | 22 |
|
15 | 23 | private ThreadPoolExecutor threadPoolExecutor;
|
| 24 | + private OpenApiInteractionValidatorWrapper validator; |
16 | 25 |
|
17 | 26 | private OpenApiRequestValidator openApiRequestValidator;
|
18 | 27 |
|
19 | 28 | @BeforeEach
|
20 | 29 | public void setup() {
|
21 | 30 | threadPoolExecutor = mock();
|
| 31 | + validator = mock(); |
22 | 32 | ValidationReportHandler validationReportHandler = mock();
|
23 | 33 | MetricsReporter metricsReporter = mock();
|
24 | 34 |
|
25 | 35 | openApiRequestValidator = new OpenApiRequestValidator(
|
26 | 36 | threadPoolExecutor,
|
27 | 37 | validationReportHandler,
|
28 | 38 | metricsReporter,
|
29 |
| - "", |
30 |
| - new ValidatorConfiguration(null, null, null) |
| 39 | + validator |
31 | 40 | );
|
32 | 41 | }
|
33 | 42 |
|
34 | 43 | @Test
|
35 | 44 | public void testWhenThreadPoolExecutorRejectsExecutionThenItShouldNotThrow() {
|
36 |
| - Mockito.doThrow(new RejectedExecutionException()).when(threadPoolExecutor).execute(Mockito.any()); |
| 45 | + Mockito.doThrow(new RejectedExecutionException()).when(threadPoolExecutor).execute(any()); |
37 | 46 |
|
38 | 47 | openApiRequestValidator.validateRequestObjectAsync(mock(), null);
|
39 | 48 | }
|
| 49 | + |
| 50 | + @Test |
| 51 | + public void testWhenEncodedQueryParamIsPassedThenValidationShouldHappenWithQueryParamDecoded() { |
| 52 | + var uri = URI.create("https://api.example.com?ids=1%2C2%2C3&text=e%3Dmc2%20%26%20more&spaces=this+is+a+sparta"); |
| 53 | + var request = new RequestMetaData("GET", uri, new HashMap<>()); |
| 54 | + |
| 55 | + openApiRequestValidator.validateRequestObject(request, null); |
| 56 | + |
| 57 | + var simpleRequestArgumentCaptor = ArgumentCaptor.forClass(SimpleRequest.class); |
| 58 | + verify(validator).validateRequest(simpleRequestArgumentCaptor.capture()); |
| 59 | + verifyQueryParamValueEquals(simpleRequestArgumentCaptor, "ids", "1,2,3"); |
| 60 | + verifyQueryParamValueEquals(simpleRequestArgumentCaptor, "text", "e=mc2 & more"); |
| 61 | + verifyQueryParamValueEquals(simpleRequestArgumentCaptor, "spaces", "this is a sparta"); |
| 62 | + } |
| 63 | + |
| 64 | + private void verifyQueryParamValueEquals( |
| 65 | + ArgumentCaptor<SimpleRequest> simpleRequestArgumentCaptor, |
| 66 | + String name, |
| 67 | + String expected |
| 68 | + ) { |
| 69 | + var ids = simpleRequestArgumentCaptor.getValue().getQueryParameterValues(name).iterator().next(); |
| 70 | + assertEquals(expected, ids); |
| 71 | + } |
40 | 72 | }
|
0 commit comments