Skip to content

Commit 2e5f1be

Browse files
committed
test: Verify int32 format validation end-to-end via OpenApiServer
1 parent ad5fd7d commit 2e5f1be

3 files changed

Lines changed: 87 additions & 0 deletions

File tree

src/test/java/com/retailsvc/http/OpenApiServerIT.java

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -703,6 +703,58 @@ void formatByteShouldReturnOkOnValidBase64() {
703703
}
704704
}
705705

706+
@Nested
707+
class FormatInt32 {
708+
709+
String path = "/format/int32";
710+
711+
@Test
712+
void formatInt32ShouldReturnBadRequestOnOverflow() {
713+
try (var server =
714+
newServer(Map.of("format-int32", exchange -> exchange.sendResponseHeaders(200, -1)));
715+
var client = httpClient()) {
716+
717+
var request = newRequest(server, path + "?n=2147483648", "GET", noBody());
718+
719+
var response = client.send(request, BodyHandlers.ofString());
720+
var statusCode = response.statusCode();
721+
var contentType = response.headers().firstValue("Content-Type").orElse("");
722+
var responseBody = response.body();
723+
724+
assertThat(statusCode).isEqualTo(400);
725+
assertThat(contentType).contains("application/problem+json");
726+
assertThat(responseBody).contains("\"format\"");
727+
728+
} catch (IOException e) {
729+
fail(e);
730+
} catch (InterruptedException e) {
731+
Thread.currentThread().interrupt();
732+
fail(e);
733+
}
734+
}
735+
736+
@Test
737+
void formatInt32ShouldReturnOkOnValidValue() {
738+
try (var server =
739+
newServer(Map.of("format-int32", exchange -> exchange.sendResponseHeaders(200, -1)));
740+
var client = httpClient()) {
741+
742+
var request = newRequest(server, path + "?n=42", "GET", noBody());
743+
744+
var response = client.send(request, BodyHandlers.ofString());
745+
var statusCode = response.statusCode();
746+
747+
assertThat(statusCode).isEqualTo(200);
748+
749+
} catch (IOException e) {
750+
fail(e);
751+
} catch (InterruptedException e) {
752+
Thread.currentThread().interrupt();
753+
fail(e);
754+
}
755+
}
756+
}
757+
706758
@Nested
707759
class Gates {
708760

src/test/resources/openapi.json

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,27 @@
272272
}
273273
}
274274
},
275+
"/format/int32": {
276+
"get": {
277+
"operationId": "format-int32",
278+
"parameters": [
279+
{
280+
"in": "query",
281+
"name": "n",
282+
"required": true,
283+
"schema": {
284+
"type": "integer",
285+
"format": "int32"
286+
}
287+
}
288+
],
289+
"responses": {
290+
"200": {
291+
"description": "OK"
292+
}
293+
}
294+
}
295+
},
275296
"/format/byte": {
276297
"get": {
277298
"operationId": "format-byte",

src/test/resources/openapi.yaml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,20 @@ paths:
191191
"200":
192192
description: OK
193193

194+
/format/int32:
195+
get:
196+
operationId: format-int32
197+
parameters:
198+
- in: query
199+
name: n
200+
required: true
201+
schema:
202+
type: integer
203+
format: int32
204+
responses:
205+
"200":
206+
description: OK
207+
194208
/format/byte:
195209
get:
196210
operationId: format-byte

0 commit comments

Comments
 (0)