ModelResolverOAS31Test.java

package io.swagger.v3.java17.resolving.v31;

import io.swagger.v3.core.converter.ModelConverters;
import io.swagger.v3.java17.resolving.SwaggerTestBase;
import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import org.testng.annotations.Test;
import io.swagger.v3.java17.matchers.SerializationMatchers;
import java.util.List;
import java.util.Map;

public class ModelResolverOAS31Test extends SwaggerTestBase {

    @Test
    public void testOAS31JavaRecord() {
        String expectedYaml = "JavaRecordWithOAS31Fields:\n" +
                "  type: object\n" +
                "  $comment: Random comment at schema level\n" +
                "  $id: http://yourdomain.com/schemas/myschema.json\n" +
                "  description: this is model for testing OAS 3.1 Java Record resolving\n" +
                "  properties:\n" +
                "    test:\n" +
                "      type: string\n" +
                "    isLatest:\n" +
                "      type: boolean\n" +
                "    randomList:\n" +
                "      type: array\n" +
                "      contains:\n" +
                "        type: string\n" +
                "      items:\n" +
                "        type: string\n" +
                "      maxContains: 10\n" +
                "      minContains: 1\n" +
                "      prefixItems:\n" +
                "      - type: string\n" +
                "      unevaluatedItems:\n" +
                "        type: number\n" +
                "    Status:\n" +
                "      type:\n" +
                "      - string\n" +
                "      - number\n";

        Map<String, Schema> stringSchemaMap = ModelConverters.getInstance(true).readAll(JavaRecordWithOAS31Fields.class);
        SerializationMatchers.assertEqualsToYaml31(stringSchemaMap, expectedYaml);
    }

    @io.swagger.v3.oas.annotations.media.Schema(
            $id = "http://yourdomain.com/schemas/myschema.json",
            description = "this is model for testing OAS 3.1 Java Record resolving",
            $comment = "Random comment at schema level",
            types = "object"
    )
    private record JavaRecordWithOAS31Fields(
            String test,
            boolean isLatest,
            @ArraySchema(
                    maxContains = 10,
                    minContains = 1,
                    contains = @io.swagger.v3.oas.annotations.media.Schema(
                            types = "string"
                    ),
                    unevaluatedItems = @io.swagger.v3.oas.annotations.media.Schema(
                            types = "number"
                    ),
                    prefixItems = {
                            @io.swagger.v3.oas.annotations.media.Schema(
                                    types = "string"
                            )
                    }
            )
            List<String> randomList,
            @io.swagger.v3.oas.annotations.media.Schema(types = {
                    "string",
                    "number"
            })
            Object Status
    ){
    }
}