use of io.vertx.ext.web.validation.testutils.TestRequest in project vertx-web by vert-x3.
the class RouterBuilderIntegrationTest method testSharedRequestBody.
@Test
public void testSharedRequestBody(Vertx vertx, VertxTestContext testContext) {
Checkpoint checkpoint = testContext.checkpoint(2);
loadBuilderAndStartServer(vertx, "src/test/resources/specs/shared_request_body.yaml", testContext, routerBuilder -> {
routerBuilder.setOptions(HANDLERS_TESTS_OPTIONS);
final Handler<RoutingContext> handler = routingContext -> {
RequestParameters params = routingContext.get("parsedParameters");
RequestParameter body = params.body();
JsonObject jsonBody = body.getJsonObject();
routingContext.response().setStatusCode(200).setStatusMessage("OK").putHeader("Content-Type", "application/json").end(jsonBody.toBuffer());
};
routerBuilder.operation("thisWayWorks").handler(handler);
routerBuilder.operation("thisWayBroken").handler(handler);
}).onComplete(h -> {
JsonObject obj = new JsonObject().put("id", "aaa").put("name", "bla");
testRequest(client, HttpMethod.POST, "/v1/working").expect(statusCode(200)).expect(jsonBodyResponse(obj)).sendJson(obj, testContext, checkpoint);
testRequest(client, HttpMethod.POST, "/v1/notworking").expect(statusCode(200)).expect(jsonBodyResponse(obj)).sendJson(obj, testContext, checkpoint);
});
}
use of io.vertx.ext.web.validation.testutils.TestRequest in project vertx-web by vert-x3.
the class RouterBuilderIntegrationTest method testQueryParameterArrayExploded.
@Test
public void testQueryParameterArrayExploded(Vertx vertx, VertxTestContext testContext) {
loadBuilderAndStartServer(vertx, VALIDATION_SPEC, testContext, routerBuilder -> {
routerBuilder.operation("arrayTestFormExploded").handler(routingContext -> {
RequestParameters params = routingContext.get("parsedParameters");
String serialized = params.queryParameter("parameter").getJsonArray().stream().map(Object::toString).collect(Collectors.joining(","));
routingContext.response().setStatusMessage(serialized).end();
});
}).onComplete(h -> {
QueryStringEncoder encoder = new QueryStringEncoder("/queryTests/arrayTests/formExploded");
List<String> values = new ArrayList<>();
values.add("4");
values.add("2");
values.add("26");
for (String s : values) {
encoder.addParam("parameter", s);
}
String serialized = String.join(",", values);
testRequest(client, HttpMethod.GET, encoder.toString()).expect(statusCode(200), statusMessage(serialized)).send(testContext);
});
}
use of io.vertx.ext.web.validation.testutils.TestRequest in project vertx-web by vert-x3.
the class RouterBuilderIntegrationTest method commaSeparatedMultipartEncoding.
@Test
public void commaSeparatedMultipartEncoding(Vertx vertx, VertxTestContext testContext) {
Checkpoint checkpoint = testContext.checkpoint(3);
loadBuilderAndStartServer(vertx, "src/test/resources/specs/multipart.yaml", testContext, routerBuilder -> {
routerBuilder.setOptions(new RouterBuilderOptions().setRequireSecurityHandlers(false));
routerBuilder.operation("testMultipartMultiple").handler(routingContext -> {
RequestParameters params = routingContext.get("parsedParameters");
routingContext.response().setStatusCode(200).setStatusMessage(params.body().getJsonObject().getString("type")).end();
});
}).onComplete(h -> {
MultipartForm form1 = MultipartForm.create().binaryFileUpload("file1", "random-file", "src/test/resources/random-file", "application/octet-stream").attribute("type", "application/octet-stream");
testRequest(client, HttpMethod.POST, "/testMultipartMultiple").expect(statusCode(200), statusMessage("application/octet-stream")).sendMultipartForm(form1, testContext, checkpoint);
MultipartForm form2 = MultipartForm.create().binaryFileUpload("file1", "random.txt", "src/test/resources/random.txt", "text/plain").attribute("type", "text/plain");
testRequest(client, HttpMethod.POST, "/testMultipartMultiple").expect(statusCode(200), statusMessage("text/plain")).sendMultipartForm(form2, testContext, checkpoint);
MultipartForm form3 = MultipartForm.create().binaryFileUpload("file1", "random.txt", "src/test/resources/random.txt", "application/json").attribute("type", "application/json");
testRequest(client, HttpMethod.POST, "/testMultipartMultiple").expect(statusCode(400)).sendMultipartForm(form3, testContext, checkpoint);
});
}
use of io.vertx.ext.web.validation.testutils.TestRequest in project vertx-web by vert-x3.
the class RouterBuilderIntegrationTest method concretePathsMatchFirst.
@Test
public void concretePathsMatchFirst(Vertx vertx, VertxTestContext testContext) {
// make sure /pets/mine is matched first when there is a choice between /pets/{petId} and /pets/mine
// see https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#patterned-fields
// also test situations (working in Vert.x 3) not strictly defined by the spec but agreed by one OpenAPI top contributor:
// https://stackoverflow.com/questions/67382759/are-those-openapi-3-paths-ambiguous
Checkpoint checkpoint = testContext.checkpoint(4);
loadBuilderAndStartServer(vertx, "src/test/resources/specs/path_matching_order.yaml", testContext, routerBuilder -> {
routerBuilder.setOptions(HANDLERS_TESTS_OPTIONS);
routerBuilder.operation("searchPets").handler(routingContext -> {
routingContext.response().setStatusMessage("searchPets").end();
});
routerBuilder.operation("searchPetsInShop").handler(routingContext -> {
routingContext.response().setStatusMessage("searchPetsInShop").end();
});
routerBuilder.operation("addPet").handler(routingContext -> {
routingContext.response().setStatusMessage("addPet").end();
});
routerBuilder.operation("addPetToShop").handler(routingContext -> {
routingContext.response().setStatusMessage("addPetToShop").end();
});
}).onComplete(h -> {
testRequest(client, HttpMethod.POST, "/pets/wolfie").expect(statusCode(200), statusMessage("addPet")).sendJson(new JsonObject(), testContext, checkpoint);
testRequest(client, HttpMethod.POST, "/pets/_search").expect(statusCode(200), statusMessage("searchPets")).send(testContext, checkpoint);
testRequest(client, HttpMethod.POST, "/shops/mine/pets/wolfie").expect(statusCode(200), statusMessage("addPetToShop")).sendJson(new JsonObject(), testContext, checkpoint);
testRequest(client, HttpMethod.POST, "/shops/mine/pets/_search").expect(statusCode(200), statusMessage("searchPetsInShop")).send(testContext, checkpoint);
});
}
use of io.vertx.ext.web.validation.testutils.TestRequest in project vertx-web by vert-x3.
the class RouterBuilderIntegrationTest method exposeConfigurationTest.
@Test
public void exposeConfigurationTest(Vertx vertx, VertxTestContext testContext) {
Checkpoint checkpoint = testContext.checkpoint();
loadBuilderAndStartServer(vertx, "src/test/resources/specs/router_builder_test.yaml", testContext, routerBuilder -> {
routerBuilder.setOptions(new RouterBuilderOptions().setRequireSecurityHandlers(false).setOperationModelKey("fooBarKey"));
routerBuilder.operation("listPets").handler(routingContext -> {
JsonObject operation = routingContext.get("fooBarKey");
routingContext.response().setStatusCode(200).setStatusMessage(operation.getString("operationId")).end();
});
}).onComplete(h -> testRequest(client, HttpMethod.GET, "/pets").expect(statusCode(200), statusMessage("listPets")).send(testContext, checkpoint));
}
Aggregations