test(OpenAPINormalizer): nullability normalization for 3.1 specs (#19714)

* test(OpenAPINormalizer): nullability normalization for 3.1 specs

* chore: samples
This commit is contained in:
Joscha Feth 2024-09-30 02:49:49 +01:00 committed by GitHub
parent 2d57255817
commit d68a186c5e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 35 additions and 6 deletions

View File

@ -624,6 +624,24 @@ public class OpenAPINormalizerTest {
assertEquals(((Schema) schema6.getProperties().get("arrayOfStrings")).getType(), "array");
}
@Test
public void testOpenAPINormalizerProcessingArraySchema31NullabilitySpec() {
OpenAPI openAPI = TestUtils.parseSpec("src/test/resources/3_1/null-types-simple.yaml");
Schema schema = openAPI.getComponents().getSchemas().get("WithNullableType");
assertNull(((Schema) schema.getProperties().get("arrayDataOrNull")).getNullable());
assertNull(((Schema) schema.getProperties().get("stringDataOrNull")).getNullable());
assertNull(((Schema) schema.getProperties().get("oneofOrNull")).getNullable());
Map<String, String> inputRules = Map.of("NORMALIZE_31SPEC", "true");
OpenAPINormalizer openAPINormalizer = new OpenAPINormalizer(openAPI, inputRules);
openAPINormalizer.normalize();
assertTrue(((Schema) schema.getProperties().get("arrayDataOrNull")).getNullable());
assertTrue(((Schema) schema.getProperties().get("stringDataOrNull")).getNullable());
assertTrue(((Schema) schema.getProperties().get("oneofOrNull")).getNullable());
}
@Test
public void testOpenAPINormalizerSimplifyOneOfAnyOf31Spec() {
// to test the rule SIMPLIFY_ONEOF_ANYOF with 3.1 spec

View File

@ -0,0 +1,8 @@
**/* linguist-generated
*.md linguist-documentation
.gitattributes text
.gitattributes export-ignore
.gitignore text
.gitignore export-ignore

View File

@ -1,3 +1,4 @@
.gitattributes
.gitignore
README.md
apis/baseapi.ts

View File

@ -33,6 +33,8 @@ export class HttpException extends Error {
*/
export type RequestBody = undefined | string | FormData | URLSearchParams;
type Headers = Record<string, string>;
function ensureAbsoluteUrl(url: string) {
if (url.startsWith("http://") || url.startsWith("https://")) {
return url;
@ -44,7 +46,7 @@ function ensureAbsoluteUrl(url: string) {
* Represents an HTTP request context
*/
export class RequestContext {
private headers: { [key: string]: string } = {};
private headers: Headers = {};
private body: RequestBody = undefined;
private url: URL;
@ -93,7 +95,7 @@ export class RequestContext {
return this.httpMethod;
}
public getHeaders(): { [key: string]: string } {
public getHeaders(): Headers {
return this.headers;
}
@ -160,7 +162,7 @@ export class SelfDecodingBody implements ResponseBody {
export class ResponseContext {
public constructor(
public httpStatusCode: number,
public headers: { [key: string]: string },
public headers: Headers,
public body: ResponseBody
) {}
@ -171,8 +173,8 @@ export class ResponseContext {
* Parameter names are converted to lower case
* The first parameter is returned with the key `""`
*/
public getParsedHeader(headerName: string): { [parameter: string]: string } {
const result: { [parameter: string]: string } = {};
public getParsedHeader(headerName: string): Headers {
const result: Headers = {};
if (!this.headers[headerName]) {
return result;
}
@ -245,7 +247,7 @@ export function wrapHttpLibrary(promiseHttpLibrary: PromiseHttpLibrary): HttpLib
export class HttpInfo<T> extends ResponseContext {
public constructor(
public httpStatusCode: number,
public headers: { [key: string]: string },
public headers: Headers,
public body: ResponseBody,
public data: T,
) {